В клиентском терминале MetaTrader 4 в отличии от MetaTrader 3 нет жесткого ограничения на паузу между торговыми операциями, совершаемых советниками. Поэтому теоретически можно совершать хоть десятки сделок в секунду. Тем не менее чрезмерное злоупотребление этим приведет к тому, что Ваш счет будет заблокирован для торговли.
Это произойдет или потому, что сервер подумает, что такое количество запросов в секунду может осуществлять только злоумышленник, который ставит перед собой лишь цель "завалить" торговый сервер. Или потому, что сотнями запросами в минуту Вы разъярите дилера - сотрудника дилингового центра, которому приходится обрабатывать Ваши запросы.
Считается правилом хорошего тона не совершать торговые операции чаще, чем 1 раз в 5-10 секунд. Конечно, в любом правиле могут быть исключения и иногда Вам крайне необходимо совершить операции с меньшим временным лагом, но старайтесь этой возможностью не злоупотреблять.
Старайтесь выдерживать паузу минимум в 5 секунд. В этом Вам поможет моя функция WaitBeforeTransaction()
//+--------------------------------------------------------------------------------------------------+ //| Фунцкия WaitBeforeTransaction выдерживает паузу Secs секунд | //| между торговыми операциями эксперта (по умолчанию 5 секунд) | //| | //| Возвращает: | //| 1 - если пауза выдержена без ошибок | //| 0 - если эксперт был остановлен | //| -1 - если произошла какая-то ошибка | //+-------------------------------------------------------------------------------------------------+ int WaitBeforeTransaction(int Secs = 5) { // если режим тестирования, то ждать необязательно if (IsTesting()) return(1); // если глобальная переменная LastTradeTime не существует, // то создать ее if (!GlobalVariableCheck("LastTradeTime")) { // Если произошла какя-то ошибка при вызове функции // GlobalVariableCheck(), выйдем с ошибкой if (GetLastError()!=0) { Print("WaitBeforeTransaction(): ошибка ",GetLastError(), " при проверке глобальной переменной LastTradeTime"); return(-1); } // глобальная переменная не существует, создадим ее if (GlobalVariableSet("LastTradeTime", 1)==0) { // произошла ошибка при создании глобальной переменной Print("WaitBeforeTransaction(): ошибка ",GetLastError(), " при создании глобальной переменной LastTradeTime"); return(-1); } // глобальная переменная успешно создана Print("WaitBeforeTransaction(): глобальная переменная ", "LastTradeTime создана"); } // получим время последней операции datetime LastTradeTime; LastTradeTime = GlobalVariableGet("LastTradeTime"); // если произошла ошибка (равна нулю), то выходим с ошибкой if (LastTradeTime==0) { Print("WaitBeforeTransaction(): ошибка ",GetLastError(), " при чтении глобальной переменной LastTradeTime"); return(-1); } // ждем Secs секунд while(true) { // если эксперт остановлен, выйдем со значением 0 if (IsStopped()) { Print("WaitBeforeTransaction(): эксперт остановлен. Выходим..."); return(0); } // если прошло меньше Secs секунд, то ждем if ((LocalTime()-LastTradeTime)
В следующих выпусках разберемся более подробно, как работает эта функция. Параллельно мы сможем изучить неизвестные нам функции.
Есть что сказать? Не стесняйтесь!
Последние статьи:
Видео по теме:
УГОЛОК АДМИНИСТРАТОРА