Eugene Bright
Eugene Bright личный блог
05 октября 2020, 22:33

Робострой: вопрос из "зала" о неисполненных заявках. Просто поделиться опытом.

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

Мой ответ (в 3-х частях, по мере внесения уточнений и подробностей) ему был следующий:

1. Все перечисленные «проблемы» решаются очень просто и успешно, если немного расширить само понятие «робот».
Добавьте надстройку, следящую за состоянием робота, за состоянием сети, инета, которая автоматически блокирует ненужные явления (задваивание ордеров на одном баре, например, или обрыв связи с сервером), и проблем не будет. Да, это выходит за рамки Lua (или того, на чем реализован робот). У меня такие сервисы реализованы на C#, опять же например. Итог: сам включается/выключается, «фильтрует базар» и поддерживает постоянное подключение, «постукивая» мне логами на почту или джаббер…

(тут следует уточняющий вопрос коллеги...)

2. ОК, расширю ответ: все неисполненные по каким-либо причинам ордера мой робот запоминает и при первой же возможности реализует. Сам! Я не влезаю в его работу, он сам решает проблему. Сам снимает, сам восстанавливает.
Главный закон моего робота: сигналы должны быть корректны и всегда исполнены на 100%.

(тут следует еще один уточняющий вопрос коллеги...)

3. Микаелян Саро, у меня робот ВСЕГДА  исполняет сигнал. Для того, чтобы ордер был реализован, в моем роботе предусмотрен алгоритм сопровождения ордера в торговой системе. Он перемещает ордер, изменяет цену, объем — всё, что нужно, лишь бы выполнить главное — реализовать сигнал на 100%.
Ну, а то, что цена на рынке не совпадает с какой-то «расчетной», — это просто может стать результатом, что расчет, выполненный до сего момента, оказался неверным в настоящий момент, и его нужно скорректировать с учетом «момента».

Иллюстрация к моим ответам (в нотации IDEF0) — трехконтурная архитектура автономного торгового комплекса:

Робострой: вопрос из "зала" о неисполненных заявках. Просто поделиться опытом.



42 Комментария
  • милый мой
    05 октября 2020, 22:45
    красивая диаграмма
  • Микаелян Саро
    05 октября 2020, 23:06
    Вы слегка суть не уловили статьи. В ней говорится о том как искажается реальные результаты относительно тестовых  при моделировании не исполнении сигнала по расчетным значениям. То что система автономна и перевыставит заявки никто не спорит.
      • GoodBargains
        06 октября 2020, 06:58
        Eugene Bright, одинаково торгует, чтотв бек тесте, чтотв бою? Да ладно привирать. Никогда на 100 ппоцентов моделирование в тесте не будет совпадать с входами и выходами, те рынок это живое существо. Вы хороший теоретик похоже.
  • Anest
    05 октября 2020, 23:16
     Возможно у вас с оппонентом разные представления о роботах. Нередко под более модным соусом продают фактически старую бизнес-модель робота.По принципу ещё древнего Метастока, выполнилось некоторое условие --> пуляется заявка по рынку, а дальше логика включается, только на «выход» по противоположному сигналу.
  • GrayFox
    05 октября 2020, 23:26
    А если на одном и том же баре цена верха и низа попадает под алгоритм. Допустим, открытия или закрытия сделки. ДВАЖДЫ!!! и закрытие и открытие и закрытие и открытие.
    Как в тесте робот сможет прогнать такой вариант?

    Часто подобная ситуация переворачивает результаты.

    Допустим: Есть открытая. Диапазон достигнут, надо закрыть и развернуть.
    Но тут же есть и в обратной стороне свечи добрать или отстопиться.
    В итоге может получиться, что взята увеличенная поза по экстремуму и против себя.
    Ну не на «тиках» же у Вас робот, который по «свечам» (сужу по описанию)?!!!
      • GrayFox
        05 октября 2020, 23:44
        Eugene Bright, Согласен. Полагаю, речь про КВИК.
        В том же МТ я решал проще — маркерами, которые просто прямо к заявке присасываются и сопровождают ордер-исполнение-закрытие на всём протяжении алгоритма робота… именно «РОБОТА»...

        В иных — надо самому приблуду делать ))))

        Секретик: «Маркер» — хорошее слово для заявки.

        А когда у тебя используется 10+ инструментов сразу — тем более ))))
          • GrayFox
            06 октября 2020, 00:07
            Eugene Bright, «Ничего не понимаю..» «коллега»
            ))))
    • GoodBargains
      06 октября 2020, 07:00
      GrayFox, да и на тиках не будет совпадать. Если б он торговал реально знал бы отчем речь идет)) если на цене нет ликвидности, то в реале сделки по той цене никогда не будет, а в тесте будет. А это два совершенно разных алгоритма) Отследить чтобы сделка была или не было задвоений вообще не проблема. А вот отсутсвие ликвидности для сделки в реале- это проблема всех проблем
  • GrayFox
    05 октября 2020, 23:30
     А неисполненные отслеживаются всегда легко. Достаточно вести отдельную таблицу/массив, который сравнивает последнюю сделку с предыдущей заявкой (в т.ч. по полноте исполнения).
    Есть заявка — попала в данные свои очередной строкой.
    Есть исполнение (добивка строки заявки в столбце сделок) — проверка на полноту.
    Появилась новая заявка, когда прошлая строка не заполнена — значит прошлая не исполнена (ну или исполнена частично, если идёт сравнение объема).

    Это же очень просто.
    • Anest
      05 октября 2020, 23:37
      GrayFox, в Trans2Quik же есть коллбэки — Order_StatusCallback b Trade_Status_Callback , с ними проще будет, Хотя конечно реализовать можно по разному.
        • Anest
          05 октября 2020, 23:49
          Eugene Bright, Вполне возможно, мы тут каждый, на своей«волне» и со своими «тараканами» :)
        • GrayFox
          05 октября 2020, 23:50
          Eugene Bright, как пропал? как в систему не прошёл ордер? Есть же всегда в любой приблуде «контроль ошибок»… отклик… Да или нет… при том с кодом ошибки.
            • GrayFox
              06 октября 2020, 00:08
              Eugene Bright, так и быть… от системы получать отклик ошибки ли ОК… 0 или конкретика...
              Есть иной вариант? если не на низкоуровневом пишешь?
              Во всех приблудах есть отклик!!!!
              Его и проверять!!
              (при тестирование есть ли такое — не знаю, потому что в боевых всегда проверял, однако)
                • GrayFox
                  06 октября 2020, 00:12
                  Eugene Bright, да нормально на мысль наведено, просто слишком много остального. Я попытался добавить, что это реально просто.
                  С ПРИБЛУДАМИ для программирования — просто (отклик) ...
                  Без приблуд на машинном — сразу надо закладывать отдельным блоком контроля исполнения.
                    • GrayFox
                      06 октября 2020, 00:16
                      Eugene Bright, спачибо за вечер. Доставило писать тут.
                        • GrayFox
                          06 октября 2020, 00:18
                          Eugene Bright, надо держаться вместе! Нас так мало!!!
                          (осталось)
                • GrayFox
                  06 октября 2020, 00:15
                  Eugene Bright, Вспомнил (вроде бы) Павловский дворец… под Питером… Там большой кирпичный тоннель. и красивое Эхо ...
                  Если крикнуть «Кто украл хомуты?» — ответ через пару секунд «ты-ты-ты» ...
                  Все всегда хотели при экскурсоводе крикнуть «Кому не спится в ночь глухую???» ..
                  Вот так ответ и получается.

                  Если крикнул одно, а получил иное — значит косяк.

                  Это и надо проверять ))))
                    • GrayFox
                      06 октября 2020, 00:17
                      Eugene Bright, ага…
                  • Дмитрий К
                    06 октября 2020, 08:17
                    GrayFox, чот не работает эхо в этом тоннеле, как мой ребёнок ни орал, адекватный коллбэк не приходит
      • GrayFox
        05 октября 2020, 23:49
        Anest, всё равно для алгоритма (не знаю его) надо отследить исполнение заявки. И количество и вообще исполнение.
        Иначе можно получить полную чехарду.
        Алгоритм рабочий, но за счет факта исполнения/неисполнения/частичного — он может просто привести к совсем иным результатам… а при бэктесте — только на тиках. ЧАСТО МОЖЕТ БЫТЬ ДВИГ В ОБЕ СТОРОНЫ ДАЖЕ НА МИНУТЕ, который попадает под алгоритм со всех сразу блоков принятия решения. Тут вопрос очередности блоков, однако, бектест не даст такого результата, какой вживую.

        Могу четко сказать… одного из роботов я ещё лет 5 назад сажал на боевой счет и потом делал бектест на минутках (он не по барам работал)...

        Итог плачевен.

        Боевой + 120% за 6 мес… Тестовый — -40% на одном и том же периоде.
    • Дмитрий Овчинников
      05 октября 2020, 23:52
      GrayFox, 
      Это же очень просто.

      Это очень просто только в одном случае, в случае «лабораторных условий».
      В реальной жизни, когда торгуется несколько сотен алгоритмов с разнообразными правилами выставления ордеров, с большим количеством ордеров и сделок по многим инструментам за торговую сессию, эта простая задача превращается в весьма сложную.
      • GrayFox
        06 октября 2020, 00:06
        Дмитрий Овчинников, да… потому от частного к общему. Не так ли?
        Вопрос в том, как избежать ошибок при тесте.
        • Дмитрий Овчинников
          06 октября 2020, 00:31
          GrayFox, 
          тесты, к сожалению, не способны при всех ухищрениях тестирующих, смоделировать те ситуации и ошибки, которые возникнут в реальной торговле ;)
            • Дмитрий Овчинников
              06 октября 2020, 09:35
              Eugene Bright, 
              да я же не спорю, тестируйте на здоровье. Но все в итоге будет зависеть от опыта. А его в тестах не найдете :)
  • Виталий
    06 октября 2020, 12:02
    что то не понял я о чем пост? о том что надо не просто послать заявку, но и проконтролить ее исполнение, дак это очевидные вещи по-моему, нет? ибо все время какие-то лаги происходят то обрыв, то неконнект некоторое время и пропущенный момент…

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн