попробуй так:
пере стартом эксперта в ините вычисли время старта в секундах от текущего бара.
TimeCurrent() - Time[0]
получишь количество секунд
далее высчитай сколько в баре секунд Period()*60
Period()*60-(TimeCurrent() - Time[0])
количество секунд до конца бара - 3 секунды
в ините поставь
EventSetTimer (полученный результат);
потом уже в старте вычитывай тоже самое и ставь таймер на полученное значение.
Мысли в слух.
попробуй так:
пере стартом эксперта в ините вычисли время старта в секундах от текущего бара.
получишь количество секунд
далее высчитай сколько в баре секунд Period()*60
количество секунд до конца бара - 3 секунды
в ините поставь
EventSetTimer (полученный результат);
потом уже в старте вычитывай тоже самое и ставь таймер на полученное значение.
Мысли в слух.
Спасибо.
Тоесть идея в том чтобы каждую секунду проверять когда останется 3 секунды до конца?
Тогда может в инит
EventSetTimer(1)
А в онтаймер
if(TimeCurrent()==Time[0]+(Time[0]-Time[1]-3))
Я думал что разработчики придумали этот онтаймер как раз для таких случаев как у меня. Ошибся.
Спасибо.
Тоесть идея в том чтобы каждую секунду проверять когда останется 3 секунды до конца?
Тогда может в инит
EventSetTimer(1)
А в онтаймер
if(TimeCurrent()==Time[0]+(Time[0]-Time[1]-3))
Я думал что разработчики придумали этот онтаймер как раз для таких случаев как у меня. Ошибся.
да нет таймер тоже классная штука, теперь не надо циклить эксперта в некоторых случаях.
Можно как то сделать чтобы определённое событие происходило например за 3 секунды до окончания бара?
Надо просто определить наступление бара не в Time[0] а в Time[1]+Period()-3
void OnTick() { if(NewBar()) // делаем всё что надо }//******************************************************************| bool NewBar() { static datetime lastbar = 0; datetime curbar = Time[1]+Period()-3; if(lastbar != curbar) { lastbar = curbar; return (true); } else return(false); }//******************************************************************|
Я думаю что 3 секунды это было взято от фонаря, на самом деле побольше и следовательно должно сработать пусть даже на 1-2 секунды позже.
А вот конкретно 3 секунды, наблюдались такие моменты когда не-было котировок 3 и более секунд? Я не интересовался и не наблюдал за этим.
Можно как то сделать чтобы определённое событие происходило например за 3 секунды до окончания бара?
Нельзя.
Можно как то сделать чтобы определённое событие происходило например за 3 секунды до окончания бара?
в теории Вам никто не мешает, вызывать событие в XX:XX:57 это близко к тому что Вы задумали
Нельзя.
можно
Вообщем для меня единственное решение. Поскольку TimeCurrent всё ровно зависит от тиков, то пришлось привязывать к часам на ПК. Проверять каждую секунду или наступила 3 секунда от конца бара.
extern int seconds_to_end_bar = 3; int local_timeHours_shift; int local_timeMinutes_shift; int local_timeSeconds_shift; ////////////// void init() { local_timeHours_shift=TimeHour(TimeLocal())-TimeHour(TimeCurrent()); local_timeMinutes_shift=TimeMinute(TimeLocal())-TimeMinute(TimeCurrent()); local_timeSeconds_shift=TimeSeconds(TimeLocal())-TimeSeconds(TimeCurrent()); EventSetTimer(1); } ////////////// void OnTimer () { if(TimeLocal()-local_timeHours_shift*3600-local_timeMinutes_shift*60-local_timeSeconds_shift==Time[0]+(Period()*60-seconds_to_end_bar)) Close_all(); }

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Можно как то сделать чтобы определённое событие происходило например за 3 секунды до окончания бара?