Алгоритм арбитража для нескольких бирж, нескольких валют и нескольких сумм - PullRequest
3 голосов
/ 02 августа 2020

Я ищу способ применить алгоритм арбитража на нескольких биржах и в разных валютах. и несколько торговых сумм. Я видел примеры использования BellmanFord и FloydWarshall, но тот, который я пробовал все, похоже, предполагает, что набор данных графика состоит из цен на несколько валют на одной единственной бирже. Я пробовал повозиться и заставить его поддерживать цены на нескольких биржах, но не добился успеха.

В одной статье, которую я прочитал, говорилось, что я использую BellmanFord и просто помещаю только лучшую цену биржи в график (как против всех биржевых цен). Хотя кажется, что это должно сработать, я чувствую, что таким образом можно упустить ценность. Это правильный способ go об этом?

А что касается нескольких сумм, должен ли я просто сделать один график для каждой суммы сделки? Скажем, я хочу запустить алгоритм за 100 долларов и за 1000 долларов, могу ли я просто заполнить график дважды, один раз для каждого набора данных? Цены будут отличаться на 100 долларов от 1000 долларов, поэтому одна биржа с лучшей ценой в 100 долларов может отличаться от цены на 1000 долларов.

Примеры:

График будет выглядеть следующим образом :

rates = [
    [1, 0.23, 0.26, 17.41],
    [4.31, 1, 1.14, 75.01],
    [3.79, 0.88, 1, 65.93],
    [0.057, 0.013, 0.015, 1],
]

currencies = ('PLN', 'EUR', 'USD', 'RUB')

ССЫЛКИ:

1 Ответ

0 голосов
/ 02 августа 2020

Пытаясь добиться большей точности, чем скорости, есть способ представить всю книгу заказов каждой биржи внутри линейной программы . Для каждой ставки у нас есть переменная с действительной стоимостью, которая представляет, сколько мы хотим продать по этой цене, в диапазоне от нуля до суммы ставки. Для каждого аска у нас есть переменная с действительной стоимостью, которая представляет, сколько мы хотим купить по этой цене, в диапазоне от нуля до запрашиваемой суммы. (Я предполагаю, что можно получить частичное заполнение, но если нет, вы можете переключиться на целочисленное программирование.) Ограничения говорят, что для каждой валюты, кроме долларов (или чего-то еще, чего вы хотите больше), общая купленная сумма равна общая проданная сумма. Вы можете усилить это, потребовав подробный баланс для каждой пары (валюты, обмена), но тогда вы можете оставить некоторые возможности на столе. Остерегайтесь риска контрагента и проскальзывания.

Для разных величин стартового капитала вы можете разделить доллары на «входящие» и «исходящие» и ограничить предложение «входящих долларов», максимизируя «исходящие». долларов ", с однозначным преобразованием без ограничений по входящим долларам в исходящие. Затем вы можете решить для одного ограничения в долларах, настроить ограничение и использовать двойной симплекс, чтобы повторно решить LP быстрее, чем с нуля.

...