Обсуждение статьи "Треугольный арбитраж" - страница 4

 

Поскольку арбитраж изобилует порой очень негативными ситуациями, то для боевого применения почти необходимо всегда иметь условие аварийного выключения ТС.

 
fxsaber:

Поскольку арбитраж изобилует порой очень негативными ситуациями, то для боевого применения почти необходимо всегда иметь условие аварийного выключения ТС.


С этим никто не спорит. Но это уже каждый сможет дописать самостоятельно.

 

Математическая интерпретация валютного арбитража в общем виде довольно простая


Поиск показал, что именно это предлагалось здесь на форуме

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Флетовая конструкция, но как по ней открыться?

anonymous, 2014.09.23 22:30

1) Вершины графа - все используемые валюты.

2) Веса ребер графа - логарифмы соответствующих курсов (в них же можно учесть транзакционные издержки).

3) Решение можно получить при помощи алгоритма Беллмана-Форда.

4) Если пути с отрицательной стоимостью не существует - арбитражной ситуации нет.

Быстро и без перебора.

Несколько картинок для затравки

Реализация поиска отрицательного цикла (арбитража) через Беллмана-Форда несложная. Но вот в этой довольно свежей статье говорится, что не находится оптимальный отрицательный цикл - наиболее короткий (наименьшая сумма ребер) цикл. Так это или нет?


Неужели для определения наиболее сильного текущего арбитража нужно создавать свой велосипед в 2017 году?

 

Беллман-Форд хорош для постепенного получения синтетического стакана

  1. По текущим ценам (бестпрайсы) через БФ находим наилучшую синтетическую цену. Запихиваем ее на бестпрайс синтетического стакана. Объем вычисляем, исходя из того, чтобы был съеден полностью весь объем бестпрайса реального символа, что входит в наилучшую синтетическую комбинацию.
  2. После этого цена бестпрайса реального символа из п.2 сменяется на следующий банд. К "новым ценам" применяем п.1.
В итоге зацикливаем оба пункта до момента, пока не окажется, что нет ни одного символа (могущего участвовать в синтетической комбинации) с ненулевой "ликвидностью". На этом синтетический стакан будет сформирован.

 
fxsaber:

не находится оптимальный отрицательный цикл - наиболее короткий (наименьшая сумма ребер) цикл. Так это или нет?


https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%91%D0%B5%D0%BB%D0%BB%D0%BC%D0%B0%D0%BD%D0%B0_%E2%80%94_%D0%A4%D0%BE%D1%80%D0%B4%D0%B0 : "Алгоритм Беллмана-Форда — алгоритм поиска кратчайшего пути во взвешенном графе".

Если путь с такой длиной не единственный - по идее, есть шанс выбрать путь с такой же стоимостью, но проходящий через большее количество вершин. Решить проблему можно двумя способами (предположение, проверять лень):

1) Вместо N итераций по кол-ву валют и последующей проверки на отрицательный цикл - сделать N итераций, но проверять на отрицательный цикл начиная с третьей.

2) В восстановлении кратчайшего пути использовать перебор с возвратом. Худший случай - когда все пути отрицательны и имеют одинаковую стоимость. Нереалистично для корректных данных + запросто можно защититься от этого, добавив safety counter.

 
anonymous:

https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%91%D0%B5%D0%BB%D0%BB%D0%BC%D0%B0%D0%BD%D0%B0_%E2%80%94_%D0%A4%D0%BE%D1%80%D0%B4%D0%B0 : "Алгоритм Беллмана-Форда — алгоритм поиска кратчайшего пути во взвешенном графе".

Он работает, как выделили, только в случае, когда нет отрицательных циклов. А наличие их определяется на выполнении условия релаксации на последней итерации БФ.

Если путь с такой длиной не единственный - по идее, есть шанс выбрать путь с такой же стоимостью, но проходящий через большее количество вершин.

Речь идет не о такой же стоимости, а о разных арбитражах одновременно. Возьмем совсем элементарный случай. EURUSD и GBPUSD имеют отрицательный спред. Но при этом арбитраж по GBPUSD более выгоден. Однако, БФ может показать отрицательный цикл EUR->USD->EUR, а не GBP->USD->GBP. Стоимость второго цикла меньше, но БФ и не призван показывать "наилучшие" отрицательные циклы.

В упомянутой статье предлагается не точный метод поиска оптимального отрицательного цикла. Неужели до сих пор четкий велосипед не наладили?


ЗЫ Хотя пример плохой, если БФ стартовать с USD, то должен показать GBPUSD. Но суть все равно ясна.

 

На этой картинке показан арбитраж из четырех валютных пар (количество голубых стрелок). Возможен ли оптимальный арбитраж из бОльшего количества участников?

 

> А наличие их определяется на выполнении условия релаксации на последней итерации БФ.

Всё же, предлагаю начать проверять после каждой итерации :)

> Стоимость второго цикла меньше, но БФ и не призван показывать "наилучшие" отрицательные циклы

Значит просто в вашей реализации берется первый попавшийся цикл с отрицательной стоимостью. Берите не первый попавшийся...

  for (unsigned int i = 0; i < n; i++) {
    for (unsigned int j = 0; j < n; j++) {
      // заведите три переменных под 1) наилучшее значение разности левой и правой частей;
      // 2-3) индексы i & j, в которых это значение достигается.
      if ((dis[i] + weights(i, j)) < dis[j]) { 
        // извлечение цикла нужно будет делать после завершения итераций по i/j
        return extract_cycle(pre, j, n);
      }
    }
  }


 
anonymous:

> А наличие их определяется на выполнении условия релаксации на последней итерации БФ.

Всё же, предлагаю начать проверять после каждой итерации :)

> Стоимость второго цикла меньше, но БФ и не призван показывать "наилучшие" отрицательные циклы

Значит просто в вашей реализации берется первый попавшийся цикл с отрицательной стоимостью. Берите не первый попавшийся...

Да, мысль перебрать все попадающиеся циклы сразу появилась. Но совсем не очевидно, что среди них будет наименьший из возможных.

Честно говоря, доказательства корректности БФ (все, что прочел) какие-то туманные. И когда речь заходит об отрицательных циклах, то они возникают только, как некий бонус. И ничего конкретного, кроме определения их наличия, БФ не гарантирует.

Если бы было простое решение с перебором, то, наверное, в статье не стали бы придумывать примерный алгоритм поиск оптимального цикла. Сам я за велосипед еще не брался, но пока не видно, что там такого непреодолимого. Поиск нефига не выдает, кроме каких-то примитивных HFT-рассуждений для квант-ресурсов.

 

а не проще ли запустить робота и посмотреть что он находит и торгует?
я с уважением отношусь к теоретикам, без них тоже никуда, но я лично практик и данная идея, по крайней мере, для торговли на рынках не требует такой серьёзной мат.подготовки, потому что

а) все цены предлагаемые нам уже имеют свой маркап

б)встречные заявки уже сведены до того как дошли до нас

в)в полученном виде арбитраж имеет вероятностный характер.


с радостью готов выслушать мнение зачем в такой простой идее такое сложное решение.