В общем как-то так. Скрипт сырой, сделан на коленке. Но работает. PHP: <?php $json = file_get_contents('https://api.exmo.com/v1.1/ticker'); //$json = file_get_contents('ticker.json'); echo '<pre>'; $json = json_decode($json, true); $arr1 = array(); $arr2 = array(); $currcodes = array(); foreach($json as $key =>$value) { list($column1, $column2) = explode('_', $key); $arr1[$column1][$column2] = $value['sell_price']; $arr2[$column1][$column2] = $value['buy_price']; $currcodes[] = $column1; $currcodes[] = $column2; } $elements = array_unique($currcodes); $total = count($elements); $max = $total - 1; function fact($i = 1) { if($i === 0) return 1; else return $i * fact($i - 1); } function move($i = 0) { global $max, $right, $current; if($current[$i] >= $max - ($right - $i)) { move($i - 1); } else { ++$current[$i]; if($i < $right) { $k = 1; for($j = $i + 1; $j <= $right; ++$j, ++$k) $current[$j] = $current[$i] + $k; } } } $comb = 0; $combs = (fact($total) / (fact(3) * fact($total - 3))); $result = array(); $right = 3 - 1; $current = range(0, $right); while($comb < $combs) { $result[] = $current; ++$comb; if($comb < $combs) move($right); } $extcomb = array(); foreach($result as $res) { $row = array(); for($i = 0; $i < 3; ++$i) $row[$i] = $elements[$res[$i]]; if(!in_array('', $row)) { $extcomb[] = join('-', $row); } } $arbsit = array(); foreach($extcomb as $value) { list($z, $o, $t) = explode('-', $value); if(isset($arr1[$z][$o]) && isset($arr2[$z][$t]) && isset($arr1[$o][$t])) { if ((1 / $arr1[$z][$o]) * $arr2[$z][$t] >= $arr1[$o][$t]) { $arbsit[] = $value; } } elseif(isset($arr1[$o][$z]) && isset($arr2[$o][$t]) && isset($arr1[$z][$t])) { if ((1 / $arr1[$o][$z]) * $arr2[$o][$t] >= $arr1[$z][$t]) { $arbsit[] = $value; } } elseif(isset($arr1[$o][$t]) && isset($arr2[$o][$z]) && isset($arr1[$t][$z])) { if ((1 / $arr1[$o][$t]) * $arr2[$o][$z] >= $arr1[$t][$z]) { $arbsit[] = $value; } } elseif(isset($arr1[$t][$z]) && isset($arr2[$t][$o]) && isset($arr1[$z][$o])) { if ((1 / $arr1[$t][$z]) * $arr2[$t][$o] >= $arr1[$z][$o]) { $arbsit[] = $value; } } elseif(isset($arr1[$z][$t]) && isset($arr2[$z][$o]) && isset($arr1[$t][$o])) { if ((1 / $arr1[$z][$t]) * $arr2[$z][$o] >= $arr1[$t][$o]) { $arbsit[] = $value; } } elseif(isset($arr1[$t][$o]) && isset($arr2[$t][$z]) && isset($arr1[$o][$z])) { if ((1 / $arr1[$t][$o]) * $arr2[$t][$z] >= $arr1[$o][$z]) { $arbsit[] = $value; } } } print_r($arbsit); //вывод массива с тройками кодов валют, где есть <i>арбитражная ситуация</i> //для проверки работоспособности скачайте файл ticker.json, и отредактируйте его, //раскоменнтировав третью строку ?>
имхо - не имеет реальной ценности, - так как любая покупка продажа сопровождается некой комиссией, которая и съест весь ваш профит ))) - да и сделки вы мгновенно не провернете, а растянутые во времени - теряют смысл, ибо курсы слишком быстро меняются
Ну это уже отдельный разговор. Стоит начать с того, что всё зависит от объёма сделок. А тут, проблем я не вижу. Во первых, данные арбитражки висят довольно таки долго, что позволяет человеку спокойно провести все валютные операции, кликая руками. Но всё же, раз на то пошло, почти все криптовалютные биржи предоставляют API которые позволяют сделать всё в автоматизированном режиме. Минус есть конечно один, что сами биржи борятся с такими ситуациями которые возникают в них, не давая некоторое время провести сделку. По всей видимости вы выигрываете супер приз. Кидайте в л/с реквизиты, есть также еще пару вопросов )