Комментарии к постам CloseToAlgoTrading

Мои комментарии:в блогах в форуме
Ответы мне:в блогах в форуме
Все комментарии: к моим постам
А можно узнать, есть ли позитивные результаты применения этого подход спустя 3 года?
avatar
  • 18 февраля 2024, 16:19
  • Еще
22022022, это рассуждения вокруг сферического коня в вакууме. Если ваши стратегии что-то полезное делают а не монетку подбрасывают, то не будет там ни шевеления каждый такт, ни среднего 0 по суммированию ненулевых позиций.
avatar
  • 05 января 2024, 11:43
  • Еще

Лучше торговать одну стратегию сайзом 10, чем 100 стратегий сайзом 0,1.
Если стратегий разные и «взаимоисключающие» наблюдать как каждую секунду сыпятся ордера +0,1;-0,1+0,1;-0,1… а позиция >50% времени находится у 0.

avatar
  • 05 января 2024, 09:58
  • Еще
Андрей К, с флагами это был ваш вариант...
В моем я предлагалюслать иветы с данными и да много писателей один читатель.
Просто когда я размышляю о данной проблеме… я что то прихожу к выводу что для оптимального решения надо в ручную группировать стратегии по некоторым признакам и как то оптимально высчитывать время которое нужно на консолидацию заявок, что бы выигрыш от всего этого окупал бы вложенное время
avatar
  • 05 января 2024, 00:58
  • Еще
CloseToAlgoTrading, 
В варианте где менеджер следит за выставленными флагами есть одно но… если менеджер опрашивает флаги сам то придется делать это циклично, а это опять таки явная задержка

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

что я понял из ваших комментов: куча разного кода в разных модулях имееет асинхронный доступ к пулу, который управляет заявками.

Я бы начал тестить модель «много писателей, один читатель». В данном случае, куча стратегий будет писать в одну и туже 32-х/64-х битную переменную, каждая в свой бит. (первая страта в 0 бит, вторая страта в 1 бит, третья страта в 2 бит и тд..)… тогда пулу не надо опрашивать каждую страту, ему только надо атомарно зачитать эту переменную и сравнить ее с конкретным значением (например если у вас 16 страт, то нужно сделать сравнение strategy_flags == 0xFF)

получается, когда вы получили новый котир/новый тик/новую свечу текущего таймфрема, ваши страты сделали расчет, а пул в этот момент следит за битными флагами.

это конечно если все позволит язык. Если вдруг это на qlua, даже не знаю, как это там все решать
avatar
  • 05 января 2024, 00:35
  • Еще
Дмитрий Овчинников, на практике для единичных трейдеров мне кажется ваша мысль вполне верной.
avatar
  • 05 января 2024, 00:17
  • Еще
Андрей К,
В варианте где менеджер следит за выставленными флагами есть одно но… если менеджер опрашивает флаги сам то придется делать это циклично, а это опять таки явная задержка. Если стратегия дёргает метод в менеджере синхронно, то это блокировка других стратегий на время обработки…
avatar
  • 05 января 2024, 00:15
  • Еще
Андрей К,
Если T_wait != 0 то мы можем это делать с любым типом заявок, но нам придется платить тем что мы будем терять в скорости.

В итоге нам придется в любом случае как-то аллокировать стратегия к пулам, т.е. группировать их по какой-то логике…

ЗЫ. Коммуникацию к пулу лучше делать асинхронной в любом случае.
avatar
  • 05 января 2024, 00:11
  • Еще
Андрей К,
Давайте представим есть некий набор расчетных модулей (назовем их стратегиями) есть модули которые реализуют исполнение для каждой стратегии. Коммуникация между стратегией и модулем синхронная. Данные пусть будут для простоты [ тикер, количество ]. Т е. Мы имеем
Стратегия _1:1_ исполнитель.
Исполнитель отсылает:
1. Заявки на прямую брокеру
2. Исполнитель отсылает заявки в пул для агрегации

Каждая такая связка отдельный процесс.

При первом варианте все просто, нет никакой возможности сводить позиции внутри.
При втором варианте мы имеем:

[Стратегия_1:1_исполнитель]_n:1_пул
На самом деле взаимосвязь должна быть м: н но пусть буде н:1.

Тут не важно синхронно или асинхронно мы пуляем заявки в пул. Ибо либо он их сразу выполняет либо он ждёт некоторое время (пусть будет настраиваемый параметр T_wait)..

При моментально исполнении мы можем только агрегировать и консолидировать наши заявки по лимитным ордерам, либо по отложенным ордерам, вроде он дей пен и тд.
avatar
  • 05 января 2024, 00:05
  • Еще
Андрей К, 
нет такой проблемы у медленных трейдеров. Кирилл, сводящий в 1М таймфрейме сводит по факту единичные случаи в год. И это при том, что у него все стратегии пересчитывают одновременно. Добавить вариативность времени пересчета и даже эти единицы пропадут.
avatar
  • 04 января 2024, 22:32
  • Еще
Андрей К, 

Спасибо за ответ :).

Моя архитектура далека от идеальной), с одной стороны скорость моих стратегий этого и не требует, с другой по чуть-чуть всё равно что-то подкручиваю. Но мне она нравится). И по функционалу и чисто эстетически)).

У меня execution сервис, он принимает на вход сигналы (сигнал — ну типа тикер, объем, направление). Дальше эта хреновина уже брокеру соответствующему это направляет в виде заявки. Этому сервису без разницы кто его дергает, но дергают его стратегии. И стратегии это тоже отдельные приложения). Например, 10 стратегий это 10 запущенных приложений, они берут данные, что-то вычисляют и в ExecutionAPI пуляют набор сигналов. Стратегия за один run может сгенерировать несколько сигналов, но даже они сейчас в ExecutionAPI прилетят последовательно (надо метод для пакетной отправки сделать). В общем стратегически грамотное место чтобы инкапсулировать логику сведения ордеров уже есть). Правда само сведение пока не особо нужно).

 

avatar
  • 04 января 2024, 22:26
  • Еще
Кирилл Гудков, т.е все упирается в один тип исполнения и таймфрейм…
avatar
  • 04 января 2024, 22:24
  • Еще
Redline, как я написал в топике, меня интересует технический момент реализации. Если исполнение одного типа, то вопрос технически не сложен… все посылается в один общий пул и выводится лишь то что осталось. Если исполнение разнотипные то :) никто так не делает судя по всему… я надеялся что может быть кто-то с этим сталкивался, пусть даже как академическая щадача
avatar
  • 04 января 2024, 22:22
  • Еще
CloseToAlgoTrading, комиссия в сипи счас 0.001%
avatar
  • 04 января 2024, 22:09
  • Еще
Replikant_mih, тут мы вываливаемся в вопрос, синхронный или асинхронный алго реализован. То есть умудрился ли разраб наделать кучу параллельных потоков, которые пуляют командами в менеджера и думает, что так будет быстрее всего или все сделал в одном потоке.

Если синхронный, то тут же все просто. У тебя страты на обсчет будут вызываться последовательно и последняя будет дергать некий commit, после которого ордер менеджер все начнет переваривать.

Если асинхронный, то тут фантазии нет предела )) Можно твою идею, кстати так биржа реализовала свои алгоритмы в ядре ) По какому то периоду N делать обсчет ордеров.

Мой мозг заточен всегда на самые быстрые оптимальные решения, я бы пошел другим путем. Наверное, я бы сделал, что каждая страта должна ставить флаг, что она сделала расчет. А менеджер бы следил за кол-ом поставленных флагов и по всем выставленным флагам высчитывал общую позу по заявкам. Но надо сказать, что асинхронным методом я бы точно не пошел )
avatar
  • 04 января 2024, 21:58
  • Еще
ves2010, ну отчего же надумана… у меня есть реальный кейс. Сейчас он реализован как одна стратегия но их на самом деле две… стратегии на долгий срок…
Суть такова что две стратегии работают на одном и том же наборе (снп500) и выбирают активы примерно по одному и тому же принципу… и вот в моменты ребалансировки часто получается что в одной модели позиция увеличивается а в другой уменьшается…
Следовательно нет смысла выводить два ордера брокеру, а просто пересчитать разницу и вывести один ордер… куда более интересный вариант возникает если использовать разные варианты исполнения, скажем адаптивный в середину среда и лимит на открытии рыка..
Но так как это происходит раз в месяц, то это не проблема, но если это будет происходить раз в минуту то тут есть над чем подумать
avatar
  • 04 января 2024, 21:32
  • Еще
Replikant_mih, вот это именно тот вопрос который хочется прояснить :)
avatar
  • 04 января 2024, 21:17
  • Еще
CloseToAlgoTrading, а зачем самому себе козни строить? 
Если прям невмоготу, создайте второй портфель с маркет исполнением, там встречка не парит.
avatar
  • 04 января 2024, 20:42
  • Еще
Андрей К, А как разрулить то, что ордера не одномоментно прилетают в этот модуль? Квантовать как-то, типа нарубаем на какие-то равные промежутки времени, кто в эту электричку набился — их сводим, остальные в рамках следующей электрички?
avatar
  • 04 января 2024, 20:32
  • Еще

Если правильно разрабатывать архитектуру алго, то такие вопросы наверное сами решаются в процессе разработки. 

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

Выше описанная задача решается исключительно в рамках менеджера ордеров. Фактически тут будет зашит конвертер, на входе которого много ордеров, на выходе несколько.

avatar
  • 04 января 2024, 20:20
  • Еще
Выберите надежного брокера, чтобы начать зарабатывать на бирже:
....все тэги
UPDONW
Новый дизайн