Pinescript: Как проверить, возникло ли определенное состояние за последние 14 дней для каждой свечи?

#pine-script

Вопрос:

У меня есть индикатор pinescript, и я хочу построить линии, когда условия этого индикатора будут выполнены в последних 14 свечах и будут выполнены конкретные условия tsi и стохастического rsi.

Показатели условия

 if buy_goodf or buy_greatf or buy_incrediblef
    line.new(bar_index[0], low-lineheightbottom*LineLength, bar_index[0], high lineheighttop*LineLength, color=color.new(color.lime, 50), width=linewidth)


if sell_goodf or sell_greatf or sell_incrediblef
    line.new(bar_index[0], low-lineheightbottom*LineLength, bar_index[0], high lineheighttop*LineLength, color=color.new(color.red, 50), width=linewidth)
 

Так что эта часть работает хорошо, я проверил, что линии отображаются правильно.

Но теперь я хочу нарисовать синюю линию на каждой свече, где:-

  1. В последних 14 свечах была линия покупки ( то есть buy_goodf or buy_greatf or buy_incrediblef была удовлетворена.
  2. Есть tsi и stochrsi определенным образом.

Единственная проблема, с которой я сталкиваюсь, связана с первым пунктом — как проверить для каждой свечи, есть ли в ее последних 13 свечах условие покупки или нет.

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

 for i = 0 to 13
    if (buy_goodf or buy_greatf or buy_incrediblef) and tsi_value>tsi_ema and tsi_value[1]<tsi_ema[1] and k[1]<d[1] and k>d
        line.new(bar_index[0], low-lineheightbottom*LineLength, bar_index[0], high lineheighttop*LineLength, color=color.new(color.blue, 50), width=linewidth)
 

Является ли это правильным способом сделать это?

Ответ №1:

Я не уверен, что это то, что вы ищете. Но этот код проверяет, было ли пересечение EMA за последние 14 дней, и если оно есть, оно будет отображаться на свечах. Вы можете посмотреть изображение ниже.

 plot(ema(close, 20))
plot(ema(close, 50), color=color.white)

EMACrossover = crossover(ema(close, 20), ema(close, 50))

plotshape(EMACrossover, text="EMA Crossover", location=location.belowbar)

conditionOccurredDuringLookbackPeriod(condition, lookbackPeriod) =>
    bool conditionOccurred = false
    for i = 1 to lookbackPeriod
        if condition[i]
            conditionOccurred := true
    conditionOccurred

EMACrossoverOccurredDuringLast14Candles = conditionOccurredDuringLookbackPeriod(EMACrossover, 14)

plotshape(EMACrossoverOccurredDuringLast14Candles, text="True")
 

Смотрите это изображение

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

1. большое спасибо за ваш ответ, оказывается, то, что я искал, было вызвано функцией barsince() . Это решило мою проблему. 🙂