Найти тему

Где лось? Или почему алготрейдеры все таки сливают. Часть 2.

щщ
щщ

Продолжение ...

Где лось? Или почему алготрейдеры все таки сливают. Часть 1.

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

1. Все это лохотрон. Пойду на завод.

2. Я понял, что это лохотрон, но другие об этом еще не знают. Буду впаривать им роботов и обучающие курсы, и жить с этого.

3. Этот робот слил, поставлю другой, у меня еще есть, что сливать.

4. Куплю очень дорогой обучающий курс по программированию роботов, потому, что у меня очень большие запасы времени и денег, чтобы учиться, программировать, и (со значительной, но уже не 100% долей вероятности) ... сливать.

5. Разобраться, где брать точные тиковые данные на торгуемые инструменты. Добиться максимально возможного соответствия тестов реальности, учитывать возможные проскальзывания и все издержки в тестах. Только в таком случае тестирование роботов / торговых стратегий будет иметь смысл.

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

Разобрались, как скачать нужные котировки именно того брокера у которого мы торгуем. Правильно выставили все комиссии и свопы. Пара EURUSD, лот фиксированные 0.1, потому что при таком лоте на всех парах, где вторым идет символ USD 1 пункт (по четвертом знаку после запятой) равен одному доллару. Так удобней сравнивать тесты между собой и с реалом.

Делаем тест с 1.08.2022 по 30.01.2023.

-2

И сравниваем результат теста с мониторингом реального счета за тот же период.

-3

В первую очередь делаем общее сравнение по двум показателям: количество сделок и чистая прибыль в пипсах. На скринах они подчеркнуты красным.

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

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

9 сделок было на тесте, но не было на реале. 4 сделки было на реале, но не случилось на тесте.

Сначала разберемся с лишними сделками на тесте:

Сделка 31 августа.
Сделка 31 августа.

На реале соответственно ее нет. Но можно посмотреть логи терминала, что же происходило в это время.

-5

1. В 00:00:10.272 Робот отправил на сервер брокера лимитный ордер ровно по той цене, которая у нас была и по тесту. 1.00145

2. В 00:00:10. 491 приходит отчет от брокера об открытии лимитного ордера даже на 1 пипс (5 знак после запятой) выше. На 1.00146

3. В 01:00:01.147 мой несработавший лимитный ордер удаляется роботом согласно его логике.

Но на тесте по тиковым данным от этого же брокера сделка открывалась, значит цена на этом уровне и даже ниже была. Ведь лимитный ордер на тесте сработал!

По тестеру сделка была прибыльной. Ага! Брокер тырит мою прибыль! А убыток оставляет мне. И вообще форекс - лохотрон. Идем гневно писать об этом по всем форумам. То есть, если серьезно, мы нашли ситуацию, которая уменьшает нашу прибыль и которая, раз уж она случилась, вполне может и повторяться. Разве не интересно с этим разобраться? Если мы с таким не сталкивались, то выявив такую ситуацию, вполне естественно обратиться к брокеру за разъяснениями:

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

2. Лимитный ордер на форекс имеет свои дополнительные особенности. При его установке он есть только на сервере у брокера. Когда цена доходит до его уровня, он отправляется на сервер поставщика ликвидности, который первым дал активировавшую его цену. За те миллисекунды, пока ордер будет идти до него, цена может сходить даже ниже, а потом уйти выше уже к моменту его прихода, и поставщик его не исполнит.

3. Время исполнения в тестере 00:00. Когда-то давно ночные скальперы именно в это время активней всего превращали брокеров в тыквы. Теперь брокеры и поставщики ликвидности создали целую мифологию о перезапусках серверов, низкой ликвидности в это время и т. д. и т. п., очень сильно расширяют спреды и частенько превращают ордера клиентов в тыквы.

То есть ордер был отправлен брокером поставщику, но тот его не исполнил, отправил обратно реджект.

Мы выявили первую причину потери сделок на реале.

Причина 1: цена дошла до уровня нашего лимитного ордера, но либо до него не дошла очередь на исполнение у поставщика, либо пока ордер шел до него, цена успела уйти обратно. Таких сделок в рассматриваемый период выявлено 3.

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

Например я выключаю этого робота во время перехода с летнего времени на зимнее и обратно. Америка и Европа осуществляют переход не одновременно, с интервалом в 1 - 2 недели. В этом роботе я не отладил нормальный учет этого момента, поэтому на всякий случай его отключаю в этот интервал.

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

Если этого не помнить по прошествии времени это можно проверить по логам терминала и это будет выглядеть так:

-6

И так:

-7

Или так:

-8

И просто считаем и анализируем сделки робота в тестере в выпавший с реала период. Таких сделок оказалось 6.

Итак, причина 2: в широком смысле - ручное вмешательство или сбои инфраструктуры.

Итого мы нашли 9 потерянных сделок, которые присутствуют в тесте, то есть должны были случится по логике робота, но не случились на реале. А также выявили причины их отсутствия. Интересно?

Еще интересней, то что в тестере у нас в этот период 59 сделок. Минус 9 потерянных, получается 50. Но в реальной торговле у нас случилось 54 сделки. При том, что руками я не торгую категорически. А в анализ сделки других роботов попасть не могли. Целых 4 лишних сделки.

Сделка в реале.
Сделка в реале.
Дырка в тестере
Дырка в тестере

И опять надо лезть в логи терминала:

-11

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

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

-12

Сравниваем по времени со сделкой на реальном счете. Совпадение вплоть до секунды, то есть это оно. ordersend error 130. Ошибка в коде, которая иногда почему то показывает себя в тестере, но никак не проявляла себя при реальной торговле. Таких сделок у нас за полгода в тестере одна из 59. Так, не в значай, мы глядя в код мы обнаружили там ошибку, сравнивая тест с реалом.

И еще у нас остаются 3 сделки, которые присутствуют на реале, но отсутствуют в тестере. Снова лезем в лог терминала с реальным счетом, видим такую картину:

-13

Робот устанавливает отложенный ордер на покупку по цене 1.07913, но брокер устанавливает его на 1 пипс (5 знак после запятой) хуже, 1.07914.

На платформе мт4 отсутствует возможно отправлять лимитные ордера хуже рынка. Но брокер может отправлять такие ордера через свое апи поставщику. Это реализовано через соответствующие настройки в личном кабинете брокера. Не баг, но инфраструктурная фича. Я это и сделал, теперь брокер плюсует 1 пипс (5 знак после запятой) к моим лимитным ордерам отправляемы на сервер поставщика. Сделано это для увеличения вероятности срабатывания лимитного ордера. Действие это фичи видно в логах реального счета только в сравнении с тестом. Цена дошла ровно до значения цены лимитного ордера в реале и ушла обратно в плюсовую зону. Если бы все было, как в тестере, ордер бы не открылся.

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

Как я писал ранее мне гораздо удобнее сравнивать прибыль/убыток в пунктах (4 знак после запятой). По тесту прибыль в пунктах 47.2. Все отсутствующие на реале, но присутствующие на тесте сделки прибыльные. Значит наша прибыль на реале должна быть меньше. Логично же?

Но на реальном счете прибыль составила:

-14

62.9 пунктов (4 знак после запятой) ??? То есть на, без малого, 16 пунктов больше. Интересно же разобраться почему?

-15

В правой колонке комментарии. В квадратных скобках первым идет проскальзывание при открытии ордера, вторым при закрытии ордера. Плюс означает, что на данную величину ордер был исполнен лучше (для трейдера)), чем было указано в лимитном ордере. И это опять же чудесное свойство лимитных ордеров (не у всех брокеров) на форекс. Также как на централизованных биржах он не может исполниться хуже цены указанной в нем, но на форекс, в отличии от бирж, в случае ecn/stp/ndd вывода ордера на поставщиков, он может быть исполнен лучше.

И таких положительных проскальзываний у нас набралось за полгода на почти 16 пунктов (по 4 знаку).

Итак ... нахрена, то есть выводы зачем все это было нужно в данном конкретном случае?

1. Разобрались почему исчезает часть сделок на реале по сравнению с тестером. Если робот пробует исполнять сделки в ролловер около 24-00 по Москве, то они могут быть не исполнены совсем. Можно улучшить ситуацию поставив время начала торговли, скажем с 24-02. Конкретно в тестах статьи этих бы сделок не было. Это улучшило бы соответствие тестов реалу. Возможно у роботов для бирж могут быть подобные инфраструктурные нюансы. Скажем, время сразу после открытия или перед закрытием торгов.

2. Разобрались с особенностями исполнения лимитных ордеров у конкретного брокера. Убедились, что выбор открывать и закрывать ордера только лимитными ордерами является правильным и даже увеличивает нашу прибыль на реале по сравнению с тестером. Мне кажется, что эту фичу можно было бы реализовать и в биржевых роботах.

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

4. Нашли баг в коде, не влазя в код.

Мы выявили все причины расхождений тестера с реалом у конкретного робота, в конкретный период времени и их влияние на результаты торговли. Игнорировать эти моменты это, как полететь на Луну, дать начальный импульс и до самой смерти в межпланетном пространстве ни разу не проверить правильным ли курсом полетели.

Главный вывод, это то что у нас и в тестере, и на реале, торгует один и тот же робот, а не две "разные сущности".