Pinescript - 3 уровня подтвержденных условий с промежутком времени между? - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь выяснить, как написать индикатор, который был бы действительным, только если условие выполнено, а затем, если другое условие выполнено после (в пределах ограничения по времени), а другое - после этого второго. Это связано с анализом изменения тренда с 2-мя подтверждениями:

  • Появляется условие 1 -> Тест 1 в норме, перейти в режим ожидания 2 -> Тест NOK, дождаться появления условия
  • Появляется условие 2 И условие 1 было в порядке в течение 5 тактов появления условия 2 -> Тест 2 в норме, перейти к ожиданию условия 3 -> Тест NOK, дождаться появления условия в течение 5 тактов. Если нет, вернитесь в состояние ожидания 1
  • Появляется условие 3 И условие 2 было в порядке в течение 5 тактов появления условия 3 -> Тест 3 в порядке, зеленый свет для размещения заказа по рыночной цене -> Тест NOK, ожидание чтобы условие появилось в течение 5 баров. Если нет, вернитесь к условию ожидания 2 или, если таймфрейм тоже превышен, вернитесь к условию ожидания 1

Как бы вы написали структуру кода? Нужно ли использовать вложенный if / for? Возможно ли это с помощью соснового скрипта?

Спасибо

РЕДАКТИРОВАТЬ: я объединяю 2 скрипа, которые вы предоставили, но я не понимаю, почему мои логи barssince / bar_index c не работают ?

(CondB OK, если индекс бара находится между барами condA и condA + 5)

//@version=4
//@author=LucF, for PineCoders
study("AB or BA", "", true)

// ————— Trigger conditions.
WMA1  = wma(close, 20)
WMA2 = wma(close, 50)
WMA3  = wma(close, 100)
WMA4  = wma(close, 200)

condATrigger = crossover(WMA1,WMA3)
condBTrigger = crossover(WMA2,WMA3)

condA = false
condB = false

var LastCondWasA = false

if condATrigger and not LastCondWasA
    condA := true
    LastCondWasA := true
else
    if condBTrigger and LastCondWasA and (barssince(condA) < bar_index) and (bar_index <= barssince(condA) + 5)
        condB := true
        LastCondWasA := false
    else
        condB := false

plotchar(condA, "condA", "▲", location.belowbar, color.lime, 30, size = size.tiny, text = "A")
plotchar(condB, "condB", "▼", location.abovebar, color.red, 30, size = size.tiny, text = "B")

...