Подскажите пожалуйста

 
Хочу сделать чтобы советник торговал строго в 16:00. Но когда пишу 
if(TimeToStr(TimeCurrent(),TIME_SECONDS) == "16:00:00")


То он выполняет скрипт по 4 раза..
в чем проблема ?
 
Возможно проблема в том, что в 16:00:00 тестер выдает 4 тика: open, high, low и close, на каждом из которых выполняется ваш скрипт.
 
А как можно сказать советнику чтобы определять максимум и минимум ровно один раз и ровно в 16 00?
 
sasha1995:
А как можно сказать советнику чтобы определять максимум и минимум ровно один раз и ровно в 16 00?

Ввести переменную, типа bool, которой после первого выполнения присвоить значение, не позволяющее выполнять действие второй раз.

Конкретнее только с куском кода.

 

Воть )

if(TimeToStr(TimeCurrent(),TIME_SECONDS) == "16:00:00"){

   double max = High[iHighest(NULL,PERIOD_H1,MODE_HIGH,3,0)] + 100 * Point;

   double min = Low[iLowest(NULL,PERIOD_H1,MODE_LOW,3,0)] - 100 * Point;

   Print("Время = ",TimeToStr(TimeCurrent(),TIME_SECONDS),"Максимум = ", max," Минимум = ",min);

   OrderSend(Symbol(),OP_BUYSTOP,0.01,max,3,min,max + 500 * Point,"Bigdog 500пп. Дата " + TimeCurrent(),123,0,Green);

   OrderSend(Symbol(),OP_SELLSTOP,0.01,min,3,max,min - 500 * Point,"Bigdog 500пп, Дата" + TimeCurrent(),123,0,Black);

   OrderSend(Symbol(),OP_BUYSTOP,0.01,max,3,min,max + 1000 * Point,"Bigdog 1000пп. Дата " + TimeCurrent(),123,0,Green);

   OrderSend(Symbol(),OP_SELLSTOP,0.01,min,3,max,min - 1000 * Point,"Bigdog 1000пп, Дата" + TimeCurrent(),123,0,Black);

}

 

Ну, во-первых за один тик возможно исполнение только одной команды OrderSend()

Далее:  

bool hvatit=false;

if(TimeToStr(TimeCurrent(),TIME_SECONDS) == "16:00:00" && !hvatit )
{

   double max = High[iHighest(NULL,PERIOD_H1,MODE_HIGH,3,0)] + 100 * Point;

   double min = Low[iLowest(NULL,PERIOD_H1,MODE_LOW,3,0)] - 100 * Point;

   Print("Время = ",TimeToStr(TimeCurrent(),TIME_SECONDS),"Максимум = ", max," Минимум = ",min);

   OrderSend(Symbol(),OP_BUYSTOP,0.01,max,3,min,max + 500 * Point,"Bigdog 500пп. Дата " + TimeCurrent(),123,0,Green);

   OrderSend(Symbol(),OP_SELLSTOP,0.01,min,3,max,min - 500 * Point,"Bigdog 500пп, Дата" + TimeCurrent(),123,0,Black);

   OrderSend(Symbol(),OP_BUYSTOP,0.01,max,3,min,max + 1000 * Point,"Bigdog 1000пп. Дата " + TimeCurrent(),123,0,Green);

   OrderSend(Symbol(),OP_SELLSTOP,0.01,min,3,max,min - 1000 * Point,"Bigdog 1000пп, Дата" + TimeCurrent(),123,0,Black);

//-------------- запрещаем выполнение во второй и последующие разы ------------------------
hvatit=true;
//-----------------------------------------------------------------------------------------

}
 
sasha1995:
Хочу сделать чтобы советник торговал строго в 16:00. Но когда пишу 
if(TimeToStr(TimeCurrent(),TIME_SECONDS) == "16:00:00")


То он выполняет скрипт по 4 раза..
в чем проблема ?

Возможно вам надо смотреть не на текущее время, а на время открытия бара (чтобы оно равнялось 16:00).
А после этого блокировать торговлю на этом же баре какой-нибудь переменной, которая будет впоследствии обнуляться,
а процесс будет повторен на след. день, и т.д.
 
Спасибо всё пошло ))
 
sasha1995:
Хочу сделать чтобы советник торговал строго в 16:00. Но когда пишу 
if(TimeToStr(TimeCurrent(),TIME_SECONDS) == "16:00:00")


То он выполняет скрипт по 4 раза..
в чем проблема ?


Да просто в Ваши 16:00:00 до 16:00:01 Вполне могут уложиться даже не четыре а гораздо больше тиков.
 
Sepulca:


Да просто в Ваши 16:00:00 до 16:00:01 Вполне могут уложиться даже не четыре а гораздо больше тиков.

Сколько, например?
 

А эта ветка зачем ? прошу не отвечать в спам-темах

https://www.mql5.com/ru/forum/142582/page32

Причина обращения: