За последние 24 часа нас посетили 20767 программистов и 1109 роботов. Сейчас ищут 392 программиста ...

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

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

  1. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    В общем как-то так.
    Скрипт сырой, сделан на коленке.
    Но работает.
    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.816
    Симпатии:
    735
    Адрес:
    Татарстан
    имхо - не имеет реальной ценности,

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

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

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