За последние 24 часа нас посетили 36710 программистов и 1724 робота. Сейчас ищут 911 программистов ...

Следующий элемент в массиве

Тема в разделе "PHP для новичков", создана пользователем q0b3rMAN, 27 авг 2020.

  1. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.504
    Симпатии:
    283
    В общем как-то так.
    Скрипт сырой, сделан на коленке.
    Но работает.
    PHP:
    1. <?php
    2. $json = file_get_contents('https://api.exmo.com/v1.1/ticker');
    3. //$json = file_get_contents('ticker.json');
    4. echo '<pre>';
    5.  
    6. $json = json_decode($json, true);
    7.  
    8. $arr1 = array();
    9. $arr2 = array();
    10. $currcodes = array();
    11.  
    12. foreach($json as $key =>$value)
    13. {
    14. list($column1, $column2) = explode('_', $key);
    15.  
    16. $arr1[$column1][$column2] = $value['sell_price'];
    17. $arr2[$column1][$column2] = $value['buy_price'];
    18. $currcodes[] = $column1;
    19. $currcodes[] = $column2;
    20. }
    21. $elements = array_unique($currcodes);
    22.  
    23. $total = count($elements);
    24. $max = $total - 1;
    25.  
    26. function fact($i = 1) {
    27.     if($i === 0)
    28.         return 1;
    29.     else
    30.         return $i * fact($i - 1);
    31. }
    32. function move($i = 0) {
    33.     global $max, $right, $current;
    34.     if($current[$i] >= $max - ($right - $i)) {
    35.         move($i - 1);
    36.     } else {
    37.         ++$current[$i];
    38.         if($i < $right) {
    39.             $k = 1;
    40.             for($j = $i + 1; $j <= $right; ++$j, ++$k)
    41.                 $current[$j] = $current[$i] + $k;
    42.         }
    43.     }
    44. }
    45.  
    46. $comb = 0;
    47. $combs = (fact($total) / (fact(3) * fact($total - 3)));
    48. $result = array();
    49. $right = 3 - 1;
    50. $current = range(0, $right);
    51.  
    52. while($comb < $combs) {
    53.     $result[] = $current;
    54.     ++$comb;
    55.     if($comb < $combs)
    56.         move($right);
    57. }
    58.  
    59. $extcomb = array();
    60. foreach($result as $res) {
    61.     $row = array();
    62.     for($i = 0; $i < 3; ++$i)
    63.         $row[$i] = $elements[$res[$i]];
    64. if(!in_array('', $row))
    65. {
    66. $extcomb[] = join('-', $row);
    67. }
    68. }
    69. $arbsit = array();
    70. foreach($extcomb as $value)
    71. {
    72.    list($z, $o, $t) = explode('-', $value);
    73.  
    74.     if(isset($arr1[$z][$o]) && isset($arr2[$z][$t]) && isset($arr1[$o][$t]))
    75.     {
    76.     if ((1 / $arr1[$z][$o]) * $arr2[$z][$t] >= $arr1[$o][$t])
    77.       {
    78.        $arbsit[] = $value;
    79.        }
    80.     }
    81.      elseif(isset($arr1[$o][$z]) && isset($arr2[$o][$t]) && isset($arr1[$z][$t]))
    82.     {
    83.      if ((1 / $arr1[$o][$z]) * $arr2[$o][$t] >= $arr1[$z][$t])
    84.       {
    85.        $arbsit[] = $value;
    86.        }
    87.     }
    88.      elseif(isset($arr1[$o][$t]) && isset($arr2[$o][$z]) && isset($arr1[$t][$z]))
    89.     {
    90.     if ((1 / $arr1[$o][$t]) * $arr2[$o][$z] >= $arr1[$t][$z])
    91.       {
    92.        $arbsit[] = $value;
    93.        }
    94.     }
    95.      elseif(isset($arr1[$t][$z]) && isset($arr2[$t][$o]) && isset($arr1[$z][$o]))
    96.     {
    97.     if ((1 / $arr1[$t][$z]) * $arr2[$t][$o] >= $arr1[$z][$o])
    98.       {
    99.        $arbsit[] = $value;
    100.        }
    101.     }
    102.      elseif(isset($arr1[$z][$t]) && isset($arr2[$z][$o]) && isset($arr1[$t][$o]))
    103.     {
    104.     if ((1 / $arr1[$z][$t]) * $arr2[$z][$o] >= $arr1[$t][$o])
    105.       {
    106.        $arbsit[] = $value;
    107.        }
    108.     }
    109.      elseif(isset($arr1[$t][$o]) && isset($arr2[$t][$z]) && isset($arr1[$o][$z]))
    110.     {
    111.     if ((1 / $arr1[$t][$o]) * $arr2[$t][$z] >= $arr1[$o][$z])
    112.       {
    113.        $arbsit[] = $value;
    114.       }
    115.     }
    116.  
    117. }
    118.  
    119. print_r($arbsit); //вывод массива с тройками кодов валют, где есть <i>арбитражная ситуация</i>
    120. //для проверки работоспособности скачайте файл ticker.json, и отредактируйте его,
    121. //раскоменнтировав третью строку
    122. ?>
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    имхо - не имеет реальной ценности,

    - так как любая покупка продажа сопровождается некой комиссией, которая и съест весь ваш профит )))
    - да и сделки вы мгновенно не провернете, а растянутые во времени - теряют смысл, ибо курсы слишком быстро меняются
     
  3. q0b3rMAN

    q0b3rMAN Активный пользователь

    С нами с:
    11 июн 2011
    Сообщения:
    142
    Симпатии:
    0
    Ну это уже отдельный разговор. Стоит начать с того, что всё зависит от объёма сделок.
    А тут, проблем я не вижу. Во первых, данные арбитражки висят довольно таки долго, что позволяет человеку спокойно провести все валютные операции, кликая руками. Но всё же, раз на то пошло, почти все криптовалютные биржи предоставляют API которые позволяют сделать всё в автоматизированном режиме. Минус есть конечно один, что сами биржи борятся с такими ситуациями которые возникают в них, не давая некоторое время провести сделку.
    По всей видимости вы выигрываете супер приз. Кидайте в л/с реквизиты, есть также еще пару вопросов ;))