Сегодня мы поговорим о важности оптимизации структуры кода.
Для арбитража важнее всего два фактора: 1) эффективность использования средств; 2) скорость выкупа;
Быстрое выполнение заказов обычно зависит от того, насколько близко к бирже находится сервер, лучше ли сеть. Но на самом деле для большинства новичков просто оптимизировать структуру кода позволяет ускорить стратегию на несколько десятков миллисекунд, что не уступает эффекту замены на лучшую сеть. Однако стоимость намного ниже.
Однако при использовании только одной торговой пары оптимизированная структура кода обычно улучшается менее чем на 1 мс, и почти не видно разницы.
Повышение эффективности использования средств, зачастую требует одних и тех же средств для одновременного наблюдения за реализацией нескольких торговых пар, что приводит к увеличению количества логических циклов, и в это время очевидно, что преимущества оптимизации структуры кода очевидны. Обычно сложность многобиржевого многоторгового опроса составляет O (n), что может быть полностью уменьшено до O (n) или даже O (n).*m) ((m) когда торговые пары достигают сотен, а биржи одновременно наблюдают десятки.
Например, есть две арбитражные траектории: A-C и A-B-C. Два пути требуют расчета дважды, один раз рассчитывая прибыль, которую может принести путь, предполагая, что p1 и p2, один раз рассчитывая путь конкретно для каждой биржи и ее сделки по конкретному требованию счета price и amount.
Наиболее распространенным способом написания является написание функции, которая рассчитывает прибыль, в частности, price и amount. Затем циклически вызывает эту функцию, получая прибыль на каждом пути, и выбирает наибольшую прибыль для торговли.
Очевидно, что при сравнении нам нужно рассчитать только прибыль, а не начать с цены и суммы платежа.
Таким образом, при оптимизации можно разделить функции profit и quotation на две функции. Во-первых, функция, которая вызывает profit, получает прибыль от каждого пути, а затем выбирает наибольшую прибыль для совершения сделки. Таким образом, функция, которая вызывает profit, логически вызывается только один раз с каждого цикла.
Далее, если проанализировать код, то можно обнаружить, что в большинстве случаев, если один из путей имеет прибыль, то его обычно арбитрируют другие. Поэтому очень редко бывает так, что одновременно существует несколько путей.
Поэтому мы можем оптимизировать стратегию еще больше, установив цикл, цикл в if-высказываниях, если мы обнаружим, что какой-то путь имеет прибыль, мы его разобьем, а затем вычислим количество и цену упоминаний этого пути.
Таким образом, сложность упрощается с O{\displaystyle O} на n+1 для O{\displaystyle O} на m+1, где m < n. Когда все биржи имеют равные шансы, m равно n/2, то есть сложность уменьшается до O{\displaystyle O} на n/2+1.
То есть, с помощью простой функции разделения, анализирующей логическую оптимизацию структуры, можно снизить временную сложность от O{\displaystyle O} 2n) до O{\displaystyle O} n/2+1).
На самом деле, когда я пишу код, есть множество сценариев, которые можно оптимизировать, и я часто пишу код после того, как я закончил, и часто обнаруживаю, что логика оптимизации существует, которая может оптимизировать некоторое O (n!) в O (n).*(n+1)). Иногда даже можно оптимизировать логику, выполняемую за несколько сотен миллисекунд, до 1 мс.
В качестве небольшого шага, который может значительно сократить промежуток между стратегическими опросами, мы рекомендуем оптимизировать структуру кода.