MetaTrader

 

Можно или нет установить несколько советников в один торговый терминал (на один счет), но на разные валютные пары? соответственно чтобы они корректно работали.  При моем опыте получалась что, торговый поток (IsTradeAllowed()) занят одним из советников другие просто не могут открыть позицию.

 
voviko:

Можно или нет установить несколько советников в один торговый терминал (на один счет), но на разные валютные пары?

Да
 
Server Muradasilov:
Да
При моем опыте получалась что, торговый поток занят (IsTradeAllowed) одним из советников другие просто не могут открыть позицию.
 
voviko:
При моем опыте получалась что, торговый поток занят (IsTradeAllowed) одним из советников другие просто не могут открыть позицию.
Что делают когда есть очередь? Занимают её. Если поток занят, подождите пока освободится. Или переходите на МТ5, там проблем с очередью не должно быть.
 
Aleksey:
Что делают когда есть очередь? Занимают её. Если поток занят, подождите пока освободится. Или переходите на МТ5, там проблем с очередью не должно быть.

С помощью какой функции? (Если поток занят, подождите пока освободится)

Пробовал так:

int start()
  {
   if(!IsTradeAllowed())
      Print("торговый поток занят,жду");
// бесконечный цикл
   while(true)
      if(IsTradeAllowed())
        {
         break;
        }
 
voviko:

С помощью какой функции? (Если поток занят, подождите пока освободится)

Пробовал так:

Это слишком жёстко. А в таком варианте возможно требуется что-то типа RefreshRates внутри цикла +sleep. Сто лет уже как с МТ4 слез, не помню точно, в общем обновлять окружение.

Самым правильным будет уход на следующий тик, т.е. return вместо Print и проверка условий на следующем тике. К тому же, это освободит поток.

Да вроде на четвёрке тоже добавляли количество одновременных запросов в потоке.

 
IsTradeAllowed к потоку не имеет никакого отношения. IsTradeContextBusy
 

В МТ4 можно одновременно до 16 сделок проводить (12 одновременно из разных экспертов), так что trade context busy получить очень сложно.

В МТ5 гораздо больше сделок, особенно с учетом асинхронного режима.

 
Фьючерсные объемы для МТ:
IsTradeAllowed к потоку не имеет никакого отношения. IsTradeContextBusy

Блин, попутал. Вопрос сбил с толку ))

Я так понимаю автор имел ввиду IsTradeContextBusy

 
Aleksey:

Блин, попутал. Вопрос сбил с толку ))

Я так понимаю автор имел ввиду IsTradeContextBusy


Справочник MQL4


IsTradeAllowed

Возвращает информацию о возможности торговли при помощи экспертов.

bool  IsTradeAllowed();

Вторая форма вызова возвращает информацию о возможности торговли для заданного символа в указанное время.

bool  IsTradeAllowed(
  const string symbol       // символ
  datetime     tested_time  // время
   );

Параметры

symbol

[in]  Символ.

tested_time

[in]  Время.

Возвращаемое значение

Возвращает true, если эксперту разрешено торговать и поток для выполнения торговых операций свободен, иначе возвращает false.


IsTradeContextBusy

Возвращает информацию о состоянии потока выполнения торговых операций.

bool  IsTradeContextBusy();

Возвращаемое значение

Возвращает true, если поток для выполнения торговых операций занят, иначе возвращает false.

Пример:

 

 if(IsTradeContextBusy()) Print("Торговый поток занят. Подождите");
 
voviko:

Возвращает true, если эксперту разрешено торговать и поток для выполнения торговых операций свободен, иначе возвращает false.

в обоих случаях надо выходить, точней, отложить торговую операции на следующий тик
Причина обращения: