Найти тему
Трейдинг и Роботы

#2 Марк: Исправление и доработка

Оглавление

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

Вот чем у меня «candle 12» и «candle 26» отличаются? И где тогда 11 первых свечей, и 24 между ними?
Вот чем у меня «candle 12» и «candle 26» отличаются? И где тогда 11 первых свечей, и 24 между ними?

Как я вообще сделал этого робота, почему он работает, и, самое важное, что значат все эти «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 с разными параметрами, оптимизация.

Примечание: перечитал этот день и понял, что такой блог будет понятен только мне, буду писать подробнее.