Добрый день.
Сегодня мы начнем создавать скрипт для тестирования стратегии в TSLab
Скрипт будет стоить канал в зависимости от максимумов и минимумов, и на определенных уровнях этого канала выставлять лимитные заявки на покупку.
О скрипте стратегии: в канале генерируется 3 сигнала на покупку на разных уровнях и выставляются тейки и стоп-лосс.
Для сигнала 1 тейк равен 4 ATR (в среднем 4 дня)
Для сигнала 2 тейк равен 5 ATR (в среднем 5 дней)
Для сигнала 3 тейк равен 10 ATR (в среднем 10 дней)
Пример сделок данного скрипта:
Итоговый скрипт:
Константы мы пока не будем добавлять, их можно будет добавить при желании позже (но можно и добавить - они есть на некоторых скринах, но в вычислениях пока не используются, оставим на потом).
Итоговый график доходности:
Итак, будем стоить его с нуля....
Добавляем блоки и соединяем их между собой.
Блоки добавляются через поиск и перетягиванием мышкой на область скрипта.
Блоки соединяются между собой нажатием мышки на входе или выходе блока и перетягиванием мыши до другого блока. Если все делаете верно, блоки автоматически соединяются линией.
1. Добавляем блок Торгуемый инструмент. Далее в блоке выбирается торгуемый инструмент (например акция или фьючерс)
2. Добавляем Относительная комиссия. И соединяем его с Блоком торгуемый инструмент.
3. Добавляем Панель графика. И соединяем его с блоком Торгуемый инструмент.
4. Далее находим блок Максимум и блок Минимум. Перетягиваем их на область скрипта и соединяем с блоком Торгуемый инструмент. Блок максимум и минимум на выходе будут выдавать значение максимума и минимума свечи.
5. Далее добавляем блок закрытие. Блок закрытие на выходе будут выдавать значение закрытия свечи. Соединяем его с блоком Торгуемый инструмент.
Теперь у нас есть:
- Источник где выбирается торгуемый инструмент
- Относительная комиссия в % от оборота
- Максимум, Минимум, Закрытие свечи для построения скрипта
6. Добавляем блоки Максимум За и Минимум За.
Блок Максимум соединяем с блоком Максимум За.
Блок Минимум соединяем с блоком Минимум За.
Блок Максимум за, выдает самый большой максимум свечи за указанное количество свечей.
Блок Минимум за выдает, выдает наименьший минимум свечи за указанное количество свечей.
7. Добавляем блок индикатор ATR. Он будет считать средний диапазон свечи за указанное количество свечей. В данном примере считается средний диапазон за 20 свечей. Это значение мы будем использовать например для выставления тейк-профита от точки входа. Соединяем блок ATR с блоком Торгуемый инструмент.
8. Далее добавляем блок Формула. Блок формула соединяем с блоком Максимум За.
Можно добавить сразу несколько блоков, чтобы потом их соединять с нужными блоками. Добавляем сразу 10 блоков формула. Каждый блок будет называться Формула, Формула1, Формула2, Формула3 и так далее.
Для информации. При добавлении Блоков они автоматически получают название, но его можно переименовать, например чтобы понимать что данный блок делает.
9. После того, как мы добавили 10 блоков Формула, мы перетягиваем мышкой блок Формула1 под блок Формула, и блок Формула 2 под блок Формула1. Блоки Формула1 и Формула2 соединяем с блоком Максимум За.
Таким образом, максимальное значение из 480 свечей (это значение можно поменять в любой момент) будет попадать в блоки: Формула1, Формула2 и Формула3.
Далее блоки: Формула1, Формула2 и Формула3 будем соединять с другими блоками.
В блоках: Формула1, Формула2 и Формула3 мы будем писать простые команды на языке C#
Подробнее о знаках и символах написано тут
10. Далее постараюсь подробно описать какие блоки нужно соединять и как они делают расчет и формируют сигнал.
а) Блок с названием Формула6 , является формулой, поэтому в нем пишем название блоков и символ, в данном случае из Блока называемого МаксимуЗа вычитаем блок МинимумЗа . Формула для вставки: МаксимуЗа-МинимумЗа
Вычисляемое значение будет передаваться в блок называемый Формула8
По сути это динамичный канал за 480 максимумов и 40 минимумов
б) Далее в блоке Формула8 полученное значение умножается на 0,6
Что является 60% значением ширины канала. Данное значение передается в блок называемый Формула
в) Далее в блоке Формула производится вычисление. Формула для вставки: МаксимуЗа-Формула8 . Эта формула вычисляет цену для лимитной заявки.
Т.е из МаксимуЗа вычитается Формула8 и получается что лимитную заявку выставляем на уровне 40% от МинимумЗа
Это 60% коррекция по Фибо к восходящей волне
11. Далее добавляем блоки для открытия позиции
а) Открытие позиции лимитной ценой
- Соединяем блок с блоком Источник
- Соединяем блок с блоком Формула. Блок Формула задает цену выставления лимитной заявки
- Соединяем блок с блоком Логическая формула (у меня название блока ЛогичесФормула) .
Блок ЛогичесФормула имеет формулу сравнения Минимум[-10]<Минимум
Это значит что он сравнивает минимум 10-й свечи назад с минимумом текущей свечи.
Т.е условно когда цена доходит до нашей лимитной заявки, дополнительно сравнивается, чтобы минимум текущей свечи был больше, чем минимум 10-й свечи назад. Чтобы не покупать на сильно падающем рынке. Т.е после падения, рынок растет 10 дней, прежде чем происходит покупка. Если же на 10-й день после падения , минимум обновляется, то покупка не происходит.
12. Далее добавляем блоки для закрытия позиции и соединяем их между собой как на рисунке
а) ЦенаВхода - блок запоминает цену входа в позицию
б) Закрытие позиции лимитной ценой (на рисунке блок называется ЗакрПозиЛимиЦено2) - блок выставляет лимитную цену закрытия позиции
в) Закрытие позиции по рынку (на рисунке блок называется ЗакрПозиПоРынк) - блок закрывает позицию по рынку
г) Формула (на рисунке блок называется Формула3) - В блоке формула: ЦенаВхода+ATR+ATR+ATR+ATR
Блок осуществляет вычисление цены для выставления лимитной заявки на продажу, так называемый тейк.
Данное количество ATR можно потом поменять на константу, например формула: Константа3*ATR+ЦенаВхода
Это может быть полезно при тестировании стратегии и улучшении ее показателей.
д) Логическая формула (на рисунке блок называется ЛогичесФормула1) - МинимумЗа[-1]>МинимумЗа
Как только обновляется минимум в канале, срабатывает логическое условие и выставляется заявка закрытия позиции по рынку.
Итоговая схема по которой происходит вход №1 и закрытие позиции по тейку либо по стопу будет выглядеть так.
Связи распишу подробнее:
По итогу будем искать варианты улучшения данной системы.
Продолжение будет в следующей статье.
Последние улучшения и доработки
Если Вам понравился материал, Вы можете поддержать меня поставив лайк или Донатом нажав кнопку поддержать внизу данной статьи.