Учебник Pine Script 4
Шрифт:
Мы прошлись по индикаторам. Давайте посмотрим на стратегии в Pine Script.
В следующем примере мы создадим стратегию пересечения скользящих средних с несколькими дополнительными параметрами. Затем мы проверим стратегию на истории в TradingView. //@version=5 strategy("My Strategy", overlay=true)
Чтобы создать стратегию, мы заменяем объявление индикатора объявлением стратегии. // Create Indicator's shortSMA = ta.sma(close, 10) longSMA = ta.sma(close, 30)
Первое, что нам нужно сделать, это создать две скользящие средние и присвоить данные переменным. rsi = ta.rsi(close, 14)
Мы
Эта стратегия будет работать на основном графике, поэтому нам не нужно использовать здесь функцию security.
Далее мы хотим указать наши условия кроссовера. К счастью, в TradingView уже есть встроенная функция для этого, поэтому нам не нужно кодировать ее вручную. // Specify crossover conditions longCondition = ta.crossover(shortSMA, longSMA) shortCondition = ta.crossunder(shortSMA, longSMA)
У нас есть два условия, первое — когда короткая SMA с периодом 10 пересекает более длинную SMA с периодом 30.
Второе условие является противоположным, поскольку мы использовали функцию crossunder, а не crossover.
Оба эти условия сохраняются в переменных. Поэтому, когда происходит пересечение (crossover или crossunder), эти переменные будут обновлены до True, что является логическим значением.
Мы можем использовать оператор if, чтобы проверить, изменилось ли условие на True, а затем выполнить сделку, если это так. if (longCondition) strategy.entry("long", strategy.long, 100, when = rsi > 50)
Встроенная strategy.entryфункция используется для входа в сделки. Вот параметры, которые передаются в функцию.
long — это идентификатор сделки. Мы не будем использовать его в этом примере. Но, если вы планируете закрыть или отменить сделку, это можно сделать с помощью этого идентификатора.
Strategy.long — это встроенная переменная, которая сообщает скрипту Pine, что мы хотим открыть длинную позицию.
100 — количество акций, которыми мы хотим торговать
when = rsi > 50 — это дополнительный параметр, который указывает скрипту pine выполнять сделку только в том случае, если RSI выше 50.
Синтаксис наших кратких записей будет очень похож на формат. if (shortCondition) strategy.entry("short", strategy.short, 100, when = rsi < 50)
Поскольку мы используем стратегию, нам не нужно ничего строить или задавать выходные данные.
Но мы все равно это сделаем. Было бы неплохо увидеть SMA на графике, чтобы мы могли подтвердить, что сделки имели место, когда они должны были быть. // Plot Moving Average's to chart plot(shortSMA) plot(longSMA, color=color.black)
Если мы сохраним и добавим на график, стратегия запустится и автоматически откроет окно тестера стратегий , в котором будут отображаться некоторые важные статистические данные.
Вот так выглядит наш экран.
По умолчанию открывается новая вкладка с обзорной статистикой по стратегии. Вы можете щелкнуть сводку по эффективности или список сделок, чтобы увидеть другую статистику.
Стратегия будет работать на таймфрейме, который отображается на вашем графике.
Вы можете легко переключаться между
различными временными рамками, используя параметры временных рамок в меню в верхней части экрана. Стратегия будет автоматически обновляться в соответствии с выбранным новым таймфреймом.Полный код: //@version=5 strategy("My Strategy", overlay=true) // Create Indicator's shortSMA = ta.sma(close, 10) longSMA = ta.sma(close, 30) rsi = ta.rsi(close, 14) // Specify crossover conditions longCondition = ta.crossover(shortSMA, longSMA) shortCondition = ta.crossunder(shortSMA, longSMA) // Execute trade if condition is True if (longCondition) strategy.entry("long", strategy.long, 100, when = rsi > 50) if (shortCondition) strategy.entry("short", strategy.short, 100, when = rsi < 50) // Plot Moving Average's to chart plot(shortSMA) plot(longSMA, color=color.black) Как установить тейк-профит и стоп-лосс?
В нашем последнем примере исполнение сделки определялось пересечением и пересечением скользящих средних.
Мы будем опираться на этот скрипт и установим конкретные стоп-лоссы и тейк-профиты. Мы можем использовать средний истинный диапазон (ATR) для расчета уровней для них.
Индикатор ATR рассчитывает среднее движение за последнее количество указанных баров. Это хороший способ учета изменений волатильности.
Мы уже объявили несколько индикаторов, добавим в список индикатор ATR. // Create Indicator's shortSMA = ta.sma(close, 10) longSMA = ta.sma(close, 30) rsi = ta.rsi(close, 14) atr = ta.atr( 14 )
В наших торговых условиях мы можем сделать необходимые расчеты для нашего стоп-лосса и тейк-профита. if (longCondition) stopLoss = low - atr * 2 takeProfit = high + atr * 2 strategy.entry("long", strategy.long, 100, when = rsi > 50) strategy.exit("exit", "long", stop=stopLoss, limit=takeProfit)
В приведенном выше коде мы рассчитали стоп-лосс, взяв минимум бара во время входа и вычтя средний истинный диапазон, умноженный на два.
Таким образом, если акции двигаются в среднем на 5 долларов за бар, мы устанавливаем тейк-профит на 10 долларов ниже минимума.
Аналогичный расчет делается для тейк-профита.
Наконец, мы указываем условие выхода, используя функцию Strategy.exit. Вот параметры, которые были переданы.
exit — это идентификатор сделки для выхода из сделки.
long — это идентификатор, который мы ранее установили при входе в сделку. Это позволит скрипту Pine узнать, из какой позиции мы пытаемся выйти.
stop=stopLoss – указываем, что уровень, содержащийся в переменной stopLoss, должен использоваться как стоп-ордер на выход из сделки.
limit=takeProfit = мы указываем, что уровень, содержащийся в переменной takeProfit, должен использоваться как лимитный ордер для выхода из сделки.
Синтаксис нашего короткого условия аналогичен, хотя некоторые вычисления немного отличаются. if (shortCondition) stopLoss = high + atr * 2 takeProfit = low - atr * 2 strategy.entry("short", strategy.short, 100, when = rsi < 50) strategy.exit("exit", "short", stop=stopLoss, limit=takeProfit)
Остальная часть скрипта остается неизменной по сравнению с предыдущим примером. Давайте запустим его и посмотрим, как сработала наша стратегия.