Сценарий Pine: нарисуйте метку, когда два условия выполняются одно за другим

#pine-script

#сценарий pine

Вопрос:

Я пытаюсь нарисовать метку, как только два условия выполняются одно за другим на нескольких столбцах.

Сначала fourK-sma пересекает fiveK-sma, а затем в следующий раз, когда oneK-sma пересекает oneD-sma, он рисует метку.

ATM скрипт отлично сохраняется, но не рисует метку, и у меня закончились идеи относительно того, как подойти к этому.

 oneK=sma(stoch(close, high, low, 11), 10)
oneD=sma(oneK, 4)
fourK=sma(stoch(close, high, low, 176), 160)
fiveK=sma(stoch(close, high, low, 352), 320)

test=bool(na)
fir=bool(na)
if (crossover(fourK,fiveK))
    test:=true
if (test==true) and crossover(oneK,oneD)
    fir:=true
    test:=false

plotshape(fir, style = shape.arrowup, location = location.belowbar, color=#ff4545, size=size.small)
  

Ответ №1:

Проблемы были:

  • Вы объявляете свои переменные без var ключевого слова, поэтому они инициализируются на каждом такте.
  • После fir того, как установлено значение true, вы никогда не сбрасываете его на false снова.

Это будет работать:

 //@version=4
study("SO 64706821", overlay=true, shorttitle="SO")

oneK  = sma(stoch(close, high, low, 11), 10)
oneD  = sma(oneK, 4)
fourK = sma(stoch(close, high, low, 176), 160)
fiveK = sma(stoch(close, high, low, 352), 320)

var bool test = na // Initializion occurs once, on first bar
bool fir = false   // Initializion occurs on every bar

if crossover(fourK,fiveK)
    test := true
    
if test and crossover(oneK,oneD)
    fir  := true
    test := false

plotshape(fir, style = shape.arrowup, location = location.belowbar, color=color.red, size=size.small)

// Background color to make it more clear where the signals occur, because there are so few.
bgcolor(fir ? color.yellow : na, transp=80)