Скачать MetaTrader 5

Примеры: Спать или не спать?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MetaQuotes Software Corp.
Модератор
187109
MetaQuotes Software Corp.  

New article Спать или не спать? has been published:

Предлагается альтернатива использованию функции Sleep() при реализации пауз между действиями эксперта. Рассматриваемый подход позволяет более рационально использовать машинное время.

Author: Sergey Gridnev

MQL4 Comments
16319
MQL4 Comments  
интересненько... спасибо за статью=)
Данила
3
Данила  

в индикаторах можно использовать WinAPI функцию SleepEx()

Sergey Gridnev
5288
Sergey Gridnev  
K6-rip писал(а):

в индикаторах можно использовать WinAPI функцию SleepEx()


Насколько я понимаю, Вы не сможете использовать функции WinAPI на чемпионате
MQL4 Comments
16319
MQL4 Comments  

Важно! Эксперты "Ex_Timer_OrderLimits_TrailByTime" и "Ex_Timer_OrderSend_wMinTimeLimit" расчитаны на работу только на демо счетах!

А почему на реале использовать нельзя?
Sergey Gridnev
5288
Sergey Gridnev  
tadbor:

Важно! Эксперты "Ex_Timer_OrderLimits_TrailByTime" и "Ex_Timer_OrderSend_wMinTimeLimit" расчитаны на работу только на демо счетах!

А почему на реале использовать нельзя?


Оба эти советника написаны с демонстрационной целью и не более.

Ex_Timer_OrderLimits_TrailByTime

Не предполагает наличие открытых ордеров на символе отличном от выбранного в окне с установленным советником.

Ex_Timer_OrderSend_wMinTimeLimit

Проверяет лишь отсутствие открытых ордеров, какие-либо иные условия (даже торговые) не проверяются. Если нет открытых позиций, то производится выбор направления (для четных секунд - BUY, для нечетных - SELL) и попытка открыться. В случае удачи, запускается таймер с выдержкой равной выбранному на графике периоду (т.е. для M5 выдержка составит 300 секунд, для H1 - 3600 секунд и т.д.). Пока есть открытые или отложенные ордера или не истекло время выдержки после предыдущего открытого этим советником ордера, Ex_Timer_OrderSend_wMinTimeLimit не открывает новых.

MQL4 Comments
16319
MQL4 Comments  
Contender:
tadbor:

Важно! Эксперты "Ex_Timer_OrderLimits_TrailByTime" и "Ex_Timer_OrderSend_wMinTimeLimit" расчитаны на работу только на демо счетах!

А почему на реале использовать нельзя?


Оба эти советника написаны с демонстрационной целью и не более.

Ex_Timer_OrderLimits_TrailByTime

Не предполагает наличие открытых ордеров на символе отличном от выбранного в окне с установленным советником.


Ну да- это большие проблемы.


Мне лично больше нравятся скрипты в while цикле чем советники зависимые от тиков.


А статья дельная.

Andrey Khatimlianskii
136
Andrey Khatimlianskii  

Похожая статья - Пауза между торговыми операциями.

И стоило упомянуть, что Sleep() имеет встроенную проверку на IsStopped() - иногда это может быть важно.

Andrey Khatimlianskii
136
Andrey Khatimlianskii  
tadbor:

Мне лично больше нравятся скрипты в while цикле чем советники зависимые от тиков.

Советника тоже можно зациклить ;)

MQL4 Comments
16319
MQL4 Comments  
static int _time_waiting=0;
// ...
if ( ... ) // условие, при выполнение которого требуется выдержать паузу
   _time_waiting = TimeLocal() + 10; // окончание паузы через 10 секунд от текущего локального времени
if ( TimeLocal() >= _time_waiting )
{ // программный блок, выполнение которого не произойдет ранее времени окончания паузы
   // ...
}

Для тех кто в поезде, обясните плз.

1) Где обнуление _time_waiting`a?

На каком тике исполнится условие:

      _time_waiting = TimeLocal() + 10; // окончание паузы через 10 секунд от текущего локального времени
      if ( TimeLocal() >= _time_waiting )

ведь как я понял, каждый тик, переменная _time_waiting будет на 10сек больше текущего времени.

сенк.

Andrey Khatimlianskii
136
Andrey Khatimlianskii  
iSeq:

Для тех кто в поезде, обясните плз.

1) Где обнуление _time_waiting`a?

На каком тике исполнится условие:

      _time_waiting = TimeLocal() + 10; // окончание паузы через 10 секунд от текущего локального времени
      if ( TimeLocal() >= _time_waiting )

ведь как я понял, каждый тик, переменная _time_waiting будет на 10сек больше текущего времени.

Обнуление не нужно.

Строка " _time_waiting = TimeLocal() + 10;" выполнится только внутри if ( условие, при выполнение которого требуется выдержать паузу ).

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий