Как сохранить значение в качестве условия после ввода в стратегию?

#pine-script

#pine-скрипт

Вопрос:

У меня возникли проблемы со следующим:

Я ввожу стратегию, которая закрывается после закрытия < ema. Ради лучшего выхода я хотел бы закрыть его при закрытии> ema, но минимум (любого данного бара после входа) ниже, чем ema (low < ema).

Я не могу понять, как выполнить момент «любой заданный бар после ввода». Я предполагаю, что сценарий должен каким-то образом сохранять значение предыдущего бара, если true, но затем возникает проблема со сценарием, когда стратегия фактически запущена. Будем признательны за любую помощь!

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

Михаил

Я попытался указать, когда условие ввода включено, с помощью strategy.position_avg_price > 0, добавив к нему желаемые условия:

     h = nz(strategy.position_avg_price) > 0 and not 
    crossunder(close,ema(close,length)) and                         
    crossunder(low,ema(close,length)) ? 1 : 0 
    rightborder = barstate.islast // treat the last bar (most recent bar) 
    as the right edge of the lookback window range
    // if examining the last bar (newest bar, rightborder is true)
    // set variable "val" to the previous value of series variable "h"
    // else set to na so nothing is plotted
    val = rightborder ? h[1] : na
  

Но безуспешно…

     scalp = b and c and d and e and f and g  ? 1 : 0 // scalp is main 
    variable, if 1 the strategy is entered//
    if (scalp)
    strategy.entry("Short", strategy.short, when = scalp) // entry of 
    strategy
    if (crossunder(close,ema(close,length))) // usual close of strategy
    strategy.close("Short")
    if (not crossunder(close,ema(close,length)) and 
    crossunder(low,ema(close,length))) // attempt for a better exit!
    strategy.close("Short")    
  

После работы над предложением Микки:

 ///Entry 
if entry_on == 0 and scalp
 strategy.entry("Short", strategy.short) 
 entry_on := 1

///Desired exit 
if entry_on == 1 and crossunder(close,ema(close,length)) 
 strategy.close("Short") 
 entry_on := 0

/// Risk mitigation - 1 - Additional risk mitigation (when close > ema but 
low < ema of any given candle after entry -> exit at breakeven) 

if entry_on == 1 and close > ema(close, length) and low < ema(close, length) 
 entry_on := 2 

if entry_on == 2 and crossover(close,strategy.position_avg_price) 
 strategy.close("Short") 
 entry_on := 0

/// Risk mitigation - 2 - exit 15 bars after entry if not desired exit or 
risk mitigation - 1 

if entry_on == 1 and scalp[15] 
 strategy.close("Short") 
 entry_on := 0
  

Ответ №1:

Попробуйте что-то вроде этого:

 entry_on = 0.0
entry_on := entry_on[1] //this will carry entry_on result from last candle
if entry_on == 0 and close > ema(close, length)
    xx enter your open position code
    entry_on := 1

if entry_on == 1
    if close < ema(close, length) or low < ema(close, length)
    xx enter your close position code
    entry_on := 0
  

Комментарии:

1. Большое спасибо. Ваше предложение определенно помогло. Однако, по какой-то причине, несмотря на то, что код начинается со стратегии, а не со скрипта, когда я добавляю его на диаграмму, стратегия не запускается, и на вкладке pine есть странная последняя строка «скрипт добавлен на диаграмму» (поскольку в коде нет функции построения графика, ничего не отображается). Есть идеи, почему? Не могли бы вы кратко взглянуть на код, который я закончил делать после прочтения вашего поста, и сказать мне, имеет ли это смысл? Мне пришлось внести несколько корректировок, и, возможно, я где-то что-то пропустил

2. еще раз большое спасибо. Скорректированный код находится в нижней части вопроса.

3. Обнаружил, что ‘скрипт, добавленный в диаграмму’ отображается даже для сценариев стратегии, поэтому проигнорируйте мой комментарий. Но где-то код неверен, поскольку сделки не запускаются