ROBO_Trading

Кодинг PineScript. Часть 2.

Обучение
BITSTAMP:BTCUSD   Биткоин
Продолжим от простого к сложному, теперь в скрипте уже 12 строк и больше команд. Кстати, правильно это называть не командами, а различными там операторами, литералами, функциями, но этим пусть матёрые погромисты занимаются, а у нас всё будет называться "командами" для простоты.

Кстати, хинт

Если какая-то команда в коде непонятна, то можно нажать "CTRL" на клавиатуре и кликнуть по команде - сразу появится вописание что к чему на русском языке. Там изложение такое, что явно не на людей рассчитано, но понять можно.

Индусский код

Быть хорошими программистами нам нафиг не надо, мы не за этим сюда пришли. То есть "правильный красивый код" - это не то что нам надо, мы не собираемся устраиваться на работу программистами, поэтому нам не важно насколько наш код правильный и соответствует канонам, нам достаточно что оно работает и показывает то что мы хотели увидеть и всё. Поэтому некоторые неписанные правила правильного программирования мы будем нарушать.

В прошлом примере у нас был "Индусский код", то есть нечто, что рассчитывалось 2 или более раза, хотя по правильному надо бы сделать чтобы всё рассчитывалось только 1 раз, если такое возможно. Там у на SMA высчитывалась 2 раза, а в примере скрипта из второго урока я это убрал. Но пойдем по порядку.

Задачка

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

Строка 2. Пирамидинг

В строке 2 добавилось объявление пирамидинга, но стоит 0. Там можете ставить, скажем, пять, и тогда скрипт при запуске будет с выбранными пирамидингом на 5 заявок. А остальное как было, без нового.

Строка 4. Переменная

Специально пропустил пока строку 3. В строке 4 мы объявляем переменную, она называется "sma1". Причем название мы придумываем какое угодно сами. Можно было назвать "line1", например. Но в ниже эта переменная используется в других строках. То есть SMA рассчитывается только 1 раз, а потом используется, а не рассчитывает повторно. Так мы избегаем "Индусский код".

Строка 3. Другой таймфрейм

Командой security можно брать данные с другой пары и с другого таймфрейма. Тут мы будем брать с той же самой пары, которая открыта на графике, но с другого таймфрейма - с недельного, это указывается как "W" (обязательно верхний регистр, то есть большими буквами, а то с нижним не поймет).

В скобках первое значение tickerid означает что будет использоваться та же самая пара, которая открыта у нас на графике. Проще говоря, tickerid это "встроенная переменная", которую объявили не Вы, но Вы можете её использовать. Это не единственная встроенная переменная, их много. Например, есть переменная close - цена закрытия текущей свечи, или переменная period - текущий выбранный на графике таймфрейм. Кстати, переменную period тоже можно использовать в скобках команды security, например, чтобы смотреть другую пару, но с таким же таймфреймом.

Далее указано W, что означает смотреть недельный таймфрейм. Туда же можно поставить другие значения, типа:

D - день (обязательно большая буква)
240 - 4 часа (240 минут)
30 - полчала
и так далее

Третье значение это другая команда. То есть мы так рассчитываем SMA, на той же паре, но на другом таймфрейме, на недельном.

Строка 5-6. Рисовалка

Команда plot просто рисует на графике нужную нам линию. Так удобнее и нагляднее. Эти 2 строки рисуют на графике обе SMA, с текущего таймфрейма и с недельного таймфрейма. Кстати говоря, чтобы рисовалось именно поверх графика, а не под ним, нужно чтобы во второй строке было указано overley = true.

Строка 7. Двойное условие

Тут мы снова создаем новую переменную и называем её up. В результате расчета переменная up будет означать либо true (если условия выполняются), либо false (если не выполняются). Тут третьего точно не дано.

Но условия у нас теперь уже два. И они оба обязательные. Потому что используется оператор and. То есть наша переменная up будет истинной только если окажутся верными оба условия, а одного недостаточно.

Первое условие: цена закрытия свечи выше sma1 (то есть выше SMA с недельного таймфрейма)
Второе условия: цена закрытия свечи выше sma2 (то есть выше SMA с текущего таймфрейма)

Обратите внимание, в обоих случаях используется цена закрытия свечи close с ТЕКУЩЕГО таймфрейма. То есть цена close с недельного не используется. А то тут легко ошибиться.

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

Строка 8. Или-или

Кроме оператора and есть еще оператор or. Тут мы объявляем еще одну новую переменную sell, и она тоже будет либо истиной (true) либо ложью (false). Но для того чтобы она стала истиной, достаточно выполнения одного из двух условий, не обязательно обоих. Потому что тут or.

Строка 12. Закрыть всё

Пропускаю строки 9-10-11, так как там ничего нового (после первого урока).

В прошлый раз мы кривовато закрывали наш лонг. А именно, открывали шорт с нулевым капиталом. Напомню, что нам надо чтобы работало, а то что кривовато нас не волнует, так как мы на работу программистами устраиваться не планируем. Мы хотим ничего не делать, смотреть на график и получать денег. А они пусть работают :)

Это команда означает просто закрыть все позиции. И длинные, и короткие, вообще все.

Перевод

Строка 1. Версия языка третья.
Строка 2. Это стратегия, а не индикатор. Называется она "Coding lesson 2". Будет поверх графика. Учёт вести будет в процентах капитала. Сделки на 100% капитала. Пирамидинг нам не надо.
Строка 3. sma1 будет означать простую скользящую среднюю на 7 свечек с недельного таймфрейма по ценам закрытия свечи, с той же пары
Строка 4. sma2 будет означать простую скользящую среднюю на 7 свечек с выбранного юзером на графике таймфрейма по ценам закрытия свечи
Строка 5. Нарисовать sma1
Строка 6. Нарисовать sma2
Строка 7. up будет верной переменной если цена закрытия свечи выше чем sma1 и выше чем sma2, обо условия обязательные
Строка 8. sell будет верной переменной если цена закрытия свечи ниже чем sma1 или ниже чем sma2, достаточно одного условия из двух
Строка 9. Если переменная up верна, то...
Строка 10. Открыть длинную позицию на всю котлету
Строка 11. Если переменная sell верна, то...
Строка 12. Закрыть вообще все позиции

Результаты

Стала ли стратегия лучше по сравнению с предыдущем вариантом? Смотря что считать "лучше". Я бы сказал стратегия стала надежнее. Теперь больше % верных прогнозов: было 37,55%, стало 41,94%. Теперь меньше максимальная просадка: было 45%, стало 25%. Улучшился косвенный показатель эффективности торговой стратегии профит-фактор: было 2,3, стало 3,5.

Но возникает вопрос: а почему всё лучше, а прибыль меньше тогда? А потому что повысив наши требования к надежности сигналов это привело к тому что самих сигналов стало меньше. В количестве: было 229 сделок, стало 155 сделок. То есть в новой стратегии сделок меньше, поэтому меньше прибыль, зато сами сделки точнее, из-за чего меньше нервов и просадка. Так что что лучше тут сами решают, смотря что Вам надо. Не удивительно что сигналы стали лучше, а сделки реже, ведь в прошлый раз мы использовали только одну SMA, а теперь требуем чтобы цена была выше двух разных SMA, так что всё логично и ожидаемо.

Мульти-таймфреймовый подход можно использовать не только для скользящих средних, а вообще для всего.

Связанные идеи

Отказ от ответственности

Все виды контента, которые вы можете увидеть на TradingView, не являются финансовыми, инвестиционными, торговыми или любыми другими рекомендациями. Мы не предоставляем советы по покупке и продаже активов. Подробнее — в Условиях использования TradingView.