Подскажите - как добавить условия наступления событий

 

Добрый день!

Хочу написать советник, который будет автоматически находить "коридоры цен" и затем заключать сделки на пробой коридора.

Есть 2 варианта формирования коридора - это Х-Л-Х-Л-С и Л-Х-Л-Х-С (Х - хай; Л - лоу, С - середина между хай и лоу).

Т.е. технически это должно выглядеть так (для примера возьмем сценарий Х-Л-Х-Л):

1) Формирование Х-1: Советник видит формирование хай (макс. бара -1 и бара +1 ниже макс. бара 0)

2) Формирование Л-1: Советник ждет 10 мин. и после этого ищет формирование точки лоу (мин. бара -1 и бара +1 выше мин. бара 0)

3) Формирование Х-2: Советник ждет 10 мин. и ищет повторение ценой старого хай (макс. бара -1 и бара +1 ниже макс. бара 0, но в границах Х-1 (граница формируется как цена Х-1 +- заданный коридор отклонения цены)

4) Формирование Л-2: Советник ждет 10 мин. и ищет повторения ценой старого лоу (по принципу в п.3)

5) Формирование С: Советник ждет, пока цена дойдет до середины между хай и лоу, и выставляет пробойные ордеры.


ПРОБЛЕМА: не могу придумать, как прописать сценарий "советник установил точку 1, советник ждет 10 мин., после этого ищет установления точки 2". На настоящий момент он у меня определяет сразу все 5 точек одномоментно, в результате он "находит" коридоры в 2-3 п., что не подходит.

Вариант с прописанием функции Sleep не подходит, поскольку я его тестирую в тестировщике стратегий, и, я так понимаю, в этом случае он нормально работать не будет.

Сейчас у меня формула прописана следующим образом (файл в приложении), но она не работает. Не могли бы Вы подсказать, как стоит прописать алгоритм, указанный выше? Заранее большое спасибо!

 

З.Ы. Советника своего первого пишу, поэтому вопрос может быть нубским. Все форумы уже облазил, перепробовал около 10 вариантов, пока все без толку. Вполне вероятно, что формулу вообще заново надо переписывать :-) 

Файлы:
 
Запомни время в момент формирования Х-1 и перед определением формирования Л-1 поставь условие if(TimeCurrent() - запомненное_время > 10*60)
 

можно проверять количество баров, на нужном периоде, и при появлении нового делать расчеты:

if (barsM5 != iBars(NULL,PERIOD_M5))
   {
   barsM5=iBars(NULL,PERIOD_M5);
   ...
   }
Причина обращения: