ROBO_Trading

Кодинг PineScrypt. Часть 1.

Обучение
BITSTAMP:BTCUSD   Биткоин
Так как стали часто спрашивать про программирование на местном языке PineScript, то может стоит об этом писать, посмотрим. Каждый такой пост будет идти по порядку, называться "Кодинг PineScrypt. Часть 1, 2, 3" и так далее. К каждой статье один скрипт, который будет называться "Coding lesson 1, 2, 3" и так далее. Номер статьи и номер скрипта будут совпадать. Предполагается что читать надо с первого по порядку, иначе может быть непонятно.

Внизу прикреплен скрипт, его лучше открыть на отдельной вкладке, что посматривать его код пока читаете пост. К сожалению код нельзя вставить в сам пост - сам сайт не позволяет так делать. А было бы удобнее намного.

Простейшая

Показалось что разумнее всего начать с простейшего кода стратегии, то есть минимум строк кода, минимум команд, но чтобы при этом как-то работало и быть может имело смысл. У меня получилось 6 строк кода, и как я понял меньше 6 строк уже просто невозможно сделать.

Стратегия

Торгует только в лонг по простой скользящей средней (SMA)* с периодом 7 свечей с ценами закрытия свечи. То есть не реверсивная **.

* SMA - simple moving average - тупо среднее-арифметическое цен с нескольких последних свечей. Как правило берут цены закрытия свечи, хотя можно (и имеет смысл) брать для расчета другие цены свечи, а не обязательно закрытия.

** реверсивная - стратегия, которая всё время держит либо длинную позицию, либо короткую. То есть при закрытии длинной позиции сразу же открывает короткую позицию. Потом наоборот. То есть без позиции вообще не сидит.

Теперь про каждую строчку.

Строка 1. Версия языка

Просто копируйте строку и всё. 3 - означает что скрипт на третьей версии языка PineScript, которая кстати не позволяет подглядывать в будущее (перерисовываться), в отличии от второй версии, где такое возможно. Так что лучше на третьей делать, ведь на второй можно допустить ошибку, из-за которой стратегия будет казаться прибыльной, тогда как на самом деле она убыточная. Тут могу привести пример, как я сам встал на эти грабли в самом начале попыток:

Моя стратегия должна была покупать по цене на 1% дешевле центра свечи. То есть берется high свечи и low свечи, складываются и делятся на два. То есть: (high + low) / 2. Это еще часто называется "HL2-цена". То есть до меня не дошло, что вообще то цена может сходить на 1% ниже этого уровня еще до того как образуется high и low свечи. То есть на самом то деле high и low свечи нам может точно известен только тогда, когда свеча уже нарисовалось до конца (то есть если часовой таймфрейм, то надо чтобы завершился час). Но моя я этого не понимал еще и стратегия моя тоже не понимала, поэтому на бектестах она показывала огромные прибыли (за счет подглядывания в будущее, о чём я просто не знал), и большие убытки на практике. Но есть простой способ этой проблему избежать - используйте версию языка 3. Кстати, от второй она почти не отличается.

Комментарии

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

Строка 2. Индикатор или стратегия

Тут дается 2 вида скриптов на выбор, либо стратегия, либо индикатор. Третьего не дано. Причем программирование индикатора и стратегии почти ничем не отличается. Во второй строке я объявляю что это будет, стратегия или индикатор. Для индикатора пишется "Study" вместо "Strategy".

Далее в скобках первый параметр, это просто название, заключается в кавычки обязательно. Название можно писать на кириллице (русскими буквами). Все параметры должны разделяться через запятую.

После запятой второй параметр overlay, что означает поверх графика будет рисоваться или внизу графика. True - означает "истина", значит поверх. Если указать False, значит будет отдельным окном под графиком. Если вообще не указывать overlay и пропустить, тогда по умолчанию будет под графиков отдельным окном.

default_qty_type - означает стратегия будет считаться в процентах от капитала, а не в количестве

default_qty_value - означает размер лота ("сайз") в стратегии, тут 100 означает торговать на 100% капитала, то есть "на всю котлету".

Строка 3. Условие

Тут сложнее.

Команда "SMA" означает создать эту простую скользящую среднюю. В скобках тоже параметры, тоже через запятую. Первый параметр это источник цены, у меня это Close, то есть цена закрытия свечи. Второй параметр это количество свечей, у меня это 7 штук. То есть рассчитывает среднее арифметические из цен закрытия семи предыдущих свечей, включая текущую свечу.

Close - это как Вы уже поняли цена закрытия свечи.

If - означает условие "Если". В результате условия получится либо истина (true), либо ложь (false), и третьего тут точно не дано и невозможно (это называется булево значение, может быть только 2, либо ложь либо истина).

Если перевести всю третью строку на русский, то получится следующее:

"Если цена закрытия текущей свечи больше чем простая скользящая средняя по ценам закрытия свечей за последние 7 свечей" то...

Если больше то true (истина - действительно больше), если не больше, то false (ложь). Обратите внимание, что вообще то цена в редких случаях может быть равна цене SMA. То есть не больше и не меньше.

Строка 4. Открыть длинную позицию

Строка 4 будет "срабатывать" только если выполняется условие. Для этого надо отделить строку от начала одним табом (не пробелами). Это значит что строка относится к условию, которая над нею. То есть наш лонг откроется только если условие соблюдается, не лжет.

strategy.entry - означает войти в сделку. Далее снова перечисление параметров через запятую.

Первый параметр это название такой сделки, как она будет называться на графике (около стрелов) и в отчете "Список сделок" у тестера стратегии. Название можно делать любое.

Второй параметр объявляет направление сделки, длинная или короткая. Посмотрите строку 6 - там тоже самое, но объявляется шорт.

Строка 5

Тоже самое условие, то надо цену меньше чем скользящая средняя.

Строка 6

Тоже самое, но шорт тут имеет еще и третий параметр с нулём. Это количество актива, который в сделке будет, будет ноль. По логике получается что откроется шорт на 0 долларов, и закроется при этом лонг. Проще говоря: шорта не будет :) Так не совсем верно делать, но зато удобно и работает, я так часто делаю.

Перевод

Ну и перевод всего кода:

Строка 1. Это будет язык версии 3
Строка 2. Это стратегия, а не индикатор. Называется она "Coding lesson". Будет поверх графика. Учёт вести будет в процентах капитала. Сделки на 100% капитала.
Строка 3. Если цена закрытия больше скользящей средней, то...
Строка 4. Открыть длинную позицию (на всю котлету).
Строка 5. Если цена закрытия станет меньше скользящей средней, то...
Строка 6. Закрыть длинную позицию, и открыть короткую позицию с нулевым размером.

То есть строка 6 нам тут нужна не для для того чтобы шорт открыть, а чтобы лонг закрыть просто :) Вообще то есть более подходящая команда для закрытия позиции, более правильная, но я не стал её делать, чтобы не перегрузить читателя. Цель была "всё по минимуму". Так как начинать новое всегда тяжело.

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

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

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