Открыл прошлую наработку в визуальном редакторе и понял, что ничего не понял. Перепишу робота, заведу чистый репозиторий на гитхаб и теперь буду писать и показывать все подробно.
Как я вообще сделал этого робота, почему он работает, и, самое важное, что значат все эти «op_t_hour», «cl_day» и прочие невероятные сокращения в качестве имен переменных?
Решил писать с нуля.
И еще, решил завести чистый аккаунт на гитхаб. Репозиторий со всеми роботами будет публичным: https://github.com/supalis/trading_systems
Появление «Марка»
Самое ценное, что удалось вынести из вчерашнего бота «mark_op_bar», это название «Марк», которое само собой приклеилось, пока таскал код из билдера визуального редактора в компилятор терминала.
Алгоритм «Марка» по блокам:
1. Появляется новая свеча
2. Фильтруем котировки по инструменту
3. Устанавливаем дефолтный таймфрейм (1H)
4. Получаем данные предыдущего бара (shift 1)
5. Получаем час предыдущего бара (преобразуем из даты в число)
6. Сравниваем час предыдущего бара с тем, в который мы хотим открываться (global: int open_hour)
7. Получаем направление прошлой свечи (close ? open)
8. Открываем покупку или продажу, в зависимости от прошлой свечи
Тестирование «Марка»
Эта история успешно забилдилась и скомпилировалась. Запустил тест с параметрами, взятыми с потолка, просто для проверки роботоспособности 😁
Тестирование в терминале прошло успешно, на визуализации теста видно, что «Марк» работает по заданным параметрам.
По результатам, конечно, в минус, но не в этом суть. Теперь, когда первая версия работает, надо добавить закрытие сделок.
Эволюция в «Марк 2»
Итак, первый марк залит на гитхаб, пусть и просто для упорядоченности действий. Перейду к следующей версии, поскольку прошлая работает корректно, но теперь требуется внести значимые изменения.
Итак, в прошлый раз у меня возникла проблема с закрытием сделок, поэтому я просто пропустил этот момент (нам же открывать надо, а не закрывать).
Все дело в том, что блок открытия в визуальном редакторе есть, а для закрытия надо передать ордера, где бы их взять? Пришлось читать документацию по платформе.
Решение — надо просмотреть все открытые позиции, записать их в отдельный лист, а потом прочесть его блоком вивера транзакций и стандартной командой грохнуть все открытые сделки.
Скопировал «Марка» ставил блок закрытия до открытия новой сделки:
А. Если час текущего бара совпадает с часом закрытия (global: int close_hour)
Б. Перебираем все открытые позиции и запоминаем их
В. Закрываем все открытые позиции
Итого, Марк 2 работает, тесты проходит корректно. Марк 2 на гитхаб.
Итоги дня
Первый робот «mark_op_bar» был успешно восстановлен (переписан) и доработан до новой версии, которая умеет не только открывать, но и закрывать позиции.
Целью на следующий день является тестирование Марка 2 с разными параметрами, оптимизация.
Примечание: перечитал этот день и понял, что такой блог будет понятен только мне, буду писать подробнее.