Как заработать деньги. Проект сам себе финансист.
июнь 2011
пн вт ср чт пт сб вс
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Главная » » »

Как избежать ошибок, если несколько экспертов торгуют одновременно

Как уже говорилось в предыдущей статье, в каждый момент времени только один эксперт может торговать. Если в этот момент второй эксперт попытается совершить торговую операцию, то торговая функция вернет ошибку ERR_TRADE_CONTEXT_BUSY (146).

Что же делать, если у Вас торгует одновременно несколько экспертов?

Напишем функцию, которая возвращает:

  • 0, если торговый поток свободен;
  • 1, если работа эксперта была остановлена (см. причины ниже);
  • 2, если торговля экспертов запрещена на уровне настроек клиентского терминала.

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

Напомню возможные причины остановки эксперта:

  • Завершение работы MetaTrader 4,
  • Закрытие графика,
  • Удаление эксперта с графика,
  • Изменение инструмента или периода графика,
  • Удачная перекомпиляции программы в MetaEditor,
  • Изменение параметров эксперта,
  • Переключение на другой счет.

Исходный код функции, которая решает поставленную задачу:

 //+-------------------------------------------------------------------+ //| Функция WaitUntilTradingIsAllowed возвращает:| 
//| 0 - если торговый поток свободен | 
//| 1 - если работа эксперта была остановлена | 
//| 2 - если торговля экспертов запрещена на | 
//| уровне настроекклиентского терминала | //+-------------------------------------------------------------------+ int WaitUntilTradingIsAllowed() 
{ 
// Если торговля разрешена, то вернем 0 и выйдем if (IsTradeAllowed()) return(0);
// В цикле проверяем, как изменилась ситуация while (!IsStopped()) 
{ 
// Если торговля экспертов запрещена на уровне настроек 
// клиентского терминала, то выйдем и вернем 2 if (!IsExpertEnabled()) return(2);
// Если торговый поток освободился, то обновим данные 
// о текущих курсах и вернем 0 if (!IsTradeContextBusy()) { RefreshRates(); return(0); }
// Если дошли до момента, то ситуация не изменилась // Поэтому делаем паузу в 0.1 секунду Sleep(100); }
// Т. к. вышли из цикла, то работа эксперта была остановлена // Вернем 1 return(1); }

Практически все в этом коде должно быть ясно, за исключением нескольких функций, о которых будет рассказано в следующей статье. Также в следующей статье будет рассказано о примере использования функции WaitUntilTradingIsAllowed().



Автор статьи: Андрей Ведихин

Хомячковый рай. Уйти и потеряться:

Комментарии к этой заметке больше не принимаются.




Есть что сказать? Не стесняйтесь!






Последние статьи:

Выгодные «исламские счета» для трейдеров Форекс Выгодные «исламские счета» для трейдеров Форекс Таким образом, вне зависимости от стиля работы стоит использовать «исламские счета» и сотрудничать с компаниями, которые не берут с трейдеров swap-комиссии. ..
2014-09-29
Стоит ли покупать чужие торговые сигналы и прогнозы? Стоит ли покупать чужие торговые сигналы и прогнозы? И все же основным нашим советом станет отказ от покупки торговых сигналов и прогнозов. Куда лучше научиться анализировать валютный рынок и думать всегда только своей головой. ..
2015-02-12

Видео по теме:




В мире больших денег

  • Самые богатые люди
    планеты. Ежегодные рейтинги FORBS. Истории успеха признаных финансовых гуру
  • Самые дорогие вещи:
    Часы, автомобили, ноутбуки стоимотью в десятки и сотни тысяч долларов. Рубрика "Чтоб я так жил"
  • Денежные прогнозы
    Что покупать и что продавать? Периодические прогнозы цен на иностранные валюты, акции крупнейших компаний и драгоценные металлы

ВКонтакте с деньгами

УГОЛОК АДМИНИСТРАТОРА