Я пытаюсь выяснить, как написать индикатор, который был бы действительным, только если условие выполнено, а затем, если другое условие выполнено после (в пределах ограничения по времени), а другое - после этого второго. Это связано с анализом изменения тренда с 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")