Программисты MQL4 посоветуйте пожалйста...

 
Делаю советник...Мне нужно открыть сделку ровно например в 9 утра на открытие свечи (М30). где реализовывать эту функцию сравнеия времени ? ведь функция Start() срабатывает каждый ТИК, но тик бывает с задержкой больше секунды, а значит и время нужное может не сработать, если его высчитывать в теле Start()...если мне нужно открыть сделку в 9.00.00. Или может можно реализовать открытие сделки без функции Start()?
 
А смысл? Неужели 1 тик может ТАК критично повлиять на ТС?!
 
maximvip:
Делаю советник...Мне нужно открыть сделку ровно например в 9 утра на открытие свечи (М30). где реализовывать эту функцию сравнеия времени ? ведь функция Start() срабатывает каждый ТИК, но тик бывает с задержкой больше секунды, а значит и время нужное может не сработать, если его высчитывать в теле Start()...если мне нужно открыть сделку в 9.00.00. Или может можно реализовать открытие сделки без функции Start()?

Да есть варианты, но опять же в 9:00:00 вы только пошлете приказ на открытие сделки, а когда она откроется в 9:00:15 или 9:01 ? Смысл городить такой огород с этой точностью? Трейдинг это отнюдь не математика
 
в целом мне надо открыть сделку чем точнее тем лучше...но видимо я чего то не понимаю и так как задержка в тиках может быть больше секунды, я дал диапозон в 5 секунд...то есть если от 9.00.00 до 9.00.05 был тик, то срабатывает Start() и открывается сделка...НО если за эти 5 сек будет больше одного тика то столько же сделок и откроется...а функция Sleep на тестере не работает почему то....и открывает на тестере он по 5 сделок....а мне бы одну...Может надо проверку делать на отрытые ордера но ордера то открываются не сразу а запросов за это время молжет послаться много.
 
extern double Th=09;
extern double Tm=0;
extern double Ts=0;
extern double Ts2=5;
//--------------------------------------------------------------- 2 --


int start()
{
int Ch=Hour();
double Cm =Minute();
double Cc = Seconds();

if (Ch==Th && Cm==Tm && Cc>=Ts && Cc<=Ts2)
{

Executor();
Sleep(500000);
}
return;
}
 
в функции Executor(); прописаны критерии открытия ордеров
 

Я бы сделел так:

extern double Th=9; 

int D;
//--------------------------------------------------------------- 2 --


int start() 
{
if (OrdersTotal()==0)
{if (D!=Day())
 {if (Hour()==Th)
  {Executor(); 
   D=Day();
  }
 }
}
return; 
} 
 
вооо if (OrdersTotal()==0) вот этой то строчки и не хватало...Спасибо большое.. Выручил.
 
maximvip:
вооо if (OrdersTotal()==0) вот этой то строчки и не хватало...Спасибо большое.. Выручил.
На секунды и минуты тебе тоже нет смысла проверять - 9 часов наступает с первой секундой. :)
 
Cmu4:
На секунды и минуты тебе тоже нет смысла проверять - 9 часов наступает с первой секундой. :)

Да, если в 9:00:00 будет тик.
Причина обращения: