Как не попасть на «логические ошибки тестирования» и сделать робота правильно.
Заметка про то, как организовать логику робота, если Вы собираетесь вести большие тесты на свечных данных, а так поступают (или должны бы поступить) 95% всех, кто торгует роботами.
В общем, тема важная.
Основной её тейк такой: Если делаешь робота для тестов на свечках, старайся делать всю логику в событии завершения свечи.
И далее почему.
Отдельно на этом остановлюсь. И Арбитражи, и скринеры, и ребалансировщики, и тесты на одном инструменте – всё это просто и быстро тестируется на свечных данных.
При этом, если использовать ленту сделок для тестов, сразу же можно напороться на увеличение сложности тестирования в десятки раз (а то и в сотни).
Поэтому, если у тебя не ХФТ, использовать надо для тестов свечи.
В рамках слоя создания роботов есть события, подходящие для создания логики на тестах. В основном это конечно же:
Рассмотрим пример того, как усреднять позицию, выставляя в рынок одновременно несколько ордеров.
Это стало возможно совсем недавно, т.к. камрады из сообщества очень просили. Методы, которыми будем пользоваться для усреднения позиций, называются BuyAtLimitToPositionUnsafe и SellAtLimitToPositionUnsafe. В отличие от старых методов (Без приписки Unsafe), данные методы не убирают предыдущие ордера на усреднение, и можно выставить в рынок множество ордеров.
Точка входа у робота контртредовая на канале Envelops.
Итоговая логика робота на графике выглядит так:
Шорт, прикрытый стоп ордером, выход в плюс через профит, и два лимитных ордера на бирже для усреднения.
На ГитХаб в репозитории OsEngine это находится здесь:
https://github.com/AlexWan/OsEngine
Внутри проекта здесь:
Инвесторам важно не только быстро и удобно совершать торговые операции в десктопном веб-терминале, но и анализировать успешность совершённых сделок. Для этого в виджете Позиции был реализован функционал аналитики портфеля, который мы обновили в последней версии. Теперь Аналитика портфеля состоит из двух вкладок. Расскажем подробнее про каждую из них.
Это основная вкладка аналитики портфеля, которая отражает главную информацию по счёту. Во вкладке по умолчанию выбрано отображение результатов торговли за последний месяц, а также доступны периоды в 3 месяца, год, с начала года и возможность выбора конкретных дат.
Доходность показывает, какую прибыль удалось получить инвестору в конкретный период времени с учётом всех поступлений и списаний. Также отображается доходность в процентах — это отношение прибыли к вложенным деньгам с учётом ввода и вывода.
В расчёт включены:
изменение стоимости текущих активов
закрытые сделки
выплаченные дивиденды и купоны
Рассмотрим пример того, как выходить из позиции двумя (вообще можно больше, но в примере 2) лимитными ордерами одновременно.
Это стало возможно совсем недавно, т.к. камрады из сообщества очень просили. Метод, которым будем пользоваться для закрытия позиций, называется CloseAtLimitUnsafe. Отличие от CloseAtLimit такое:
Точка входа у робота контртредовая на канале Envelops.
Итоговая логика робота на графике выглядит так:
Шорт, прикрытый стоп ордером, и два лимитных ордера на бирже для закрытия в прибыль.
На ГитХаб в репозитории OsEngine это находится здесь:
Проблема в том, что Финам закрыл скачивание старых (ранее 2020 года) фьючерсов по отдельности, предлагая только «склеенные» инструменты.
А для ряда задач нужно иметь параллельные котировки в районе даты экспирации, т.е. котировки уходящего фьюча вместе с котировками «будущего» фьюча.
Может кто-то знает, где скачать такие данные? Потому как склеивание по методу Финама (в ночь за 2 дня до экпирации) не подходит для решения задачи в общем виде ((.
Вот, например, по недавней экспирации 19.09.24… Финам склеивает фьючи в ночь с 17 на 18 сентября, т.е. в 23:49:59 выдеается фьюч 9.24, а утром 18-го в 10:00:00 выдается котировка 12.24-го...
А мне нужны разные, чтобы можно было смоделировать перезаход из уходящего фьюча в будущий.
Раньше это можно было сделать, скачав просто разные фьючи в разное время и склеив их не в ночь, а, например, в. А теперь такой возможности нет.
Можно организовать другую склейку, отличную от склейки финама… тогда тоже можно поставить последовательно 2 фьюча и в момент склейки переложиться… момент склейки мы знаем, значит можно закрыть прошлую по закрытию и открыть новую по открытию след.периода
Паттерн позволяет разделить логику тестирования от логики реального входа внутри робота для того, чтобы при входе и выходе не «рисовать свечи» своими большими заявками.
Очень важная заготовка паттерна управления позицией для тех, у кого много денег на счету. В том числе разберём исходный код, чтобы Вы могли модернизировать свои способы входа в реале, опираясь на данные исходники. В примере логика айсберга выделена в отдельный объект и использована многопоточность, но её надо будет переиспользовать без изменений, поэтому не пугайтесь, кто не программист, переиспользовать удастся. Будете входить, как захотите в реале.
Итоговая логика робота на графике в реале выглядит так:
В примере на графике получилось даже зайти лучше, чем если бы мы это делали одним ордером.
Сам робот – классический отбойник от боллинджера с выходом в % по стопу и профиту. Выход также в реале через «кастомный айсберг».
На ГитХаб в репозитории OsEngine это находится здесь: