Скачать MetaTrader 5

133?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Зарегистрируйся, чтобы опубликовать статью и получить 200 USD
evnt
208
evnt 2016.03.23 08:09 

Здравствуйте. У меня конструкции такого типа  по некоторым инструментам иногда начинают выдавать ошибку: 133 Trade is disabled, хотя MarketInfo(TName,MODE_TRADEALLOWED)==true. Т.е. true не соответствует действительности. Другие инструменты данного счета продолжают нормально открываться/закрываться. 

   if(MarketInfo(TName,MODE_TRADEALLOWED))
   {
      GetLastError();
      n=OrderSend(TName,opType,V,Price,slip,0,0,IntegerToString(DsT[i][j]));
      if(n==-1)
      {
         err=GetLastError();
         Comment("Error = "+IntegerToString(err));
      }         
   }
Можно ли еще как-то определить, что трейдинг разрешен/ не разрешен кроме как через MODE_TRADEALLOWED?

Спасибо 

Tecuciztecatl
70
Tecuciztecatl 2016.03.23 10:18  

я перед работой с рынком проверяю так (если вернет не ноль значит торговля запрещена):

/// Ждём разрешения торговать


int Error=0;
string symb=Symbol();

void TradeAllowed()
{


if(!AccountInfoInteger(ACCOUNT_TRADE_EXPERT)) 
   {Print("Automated trading is forbidden at the trade server side");Error=133;return;}
if(!AccountInfoInteger(ACCOUNT_TRADE_ALLOWED)) 
   {Print("Trading is forbidden!");Error=64;return;}
if (!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))  
   {Print("Check if automated trading is allowed in the terminal settings!");Error=4109;return;}
if(!IsTradeAllowed(symb,TimeLocal()))
   {Error=132; Print("Trading on the symbol "+symb+" is forbidden!");return;}

while(IsTradeContextBusy())
   {
   if(IsStopped()) {Error=4;Print("Forced shutdown ");break;}
   Print("Trading is occupied. Wait.");
   Sleep(1000);
   RefreshRates(); 
   }  
}
evnt
208
evnt 2016.03.23 11:27  
Tecuciztecatl:

я перед работой с рынком проверяю так (если вернет не ноль значит торговля запрещена):

 Нет, не то. Считайте ноль вернет. Советник мультивалютный, по некоторым валютам торговля может быть и закрыта. Это нормально, Но почему по ним MODE_TRADEALLOWED== true?

Tecuciztecatl
70
Tecuciztecatl 2016.03.23 12:12  

Переменная symb отвечает за проверку конкретного инструмента, инициализируйте ее перед вызовом функции, для проверки нужного символа.

evnt: Но почему по ним MODE_TRADEALLOWED== true?

Может быть выходной день, а вы делаете проверку по времени последней котировки — будет true. Для этого ставим  TimeLocal (см. выше)

Поток может быть занят другим советником, для этого проверяем IsTradeContextBusy (см. выше). 

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

evnt
208
evnt 2016.03.23 12:56  
Tecuciztecatl:

Переменная symb отвечает за проверку конкретного инструмента, инициализируйте ее перед вызовом функции, для проверки нужного символа.

Может быть выходной день, а вы делаете проверку по времени последней котировки — будет true. Для этого ставим  TimeLocal (см. выше)

Поток может быть занят другим советником, для этого проверяем IsTradeContextBusy (см. выше). 

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

 

23.03. Повторю вопрос. Мультивалютный советник не в выходной день торгует прямо сейчас, автоматически, НЕ вручную, торгует один, другие советники поток не занимают, совершает сделки по разным инструментам, каждый инициируется перед сделкой, все торгуются, кроме одного инструмента, который показывает ошибку 133 хотя его MODE_TRADEALLOWED== true означает, что торговля разрешена. В другой день, возможно, будет торговать. Код типа Вашего передаст 0

Как определить, что трейдинг разрешен/ не разрешен кроме как через MODE_TRADEALLOWED?

evnt
208
evnt 2016.03.24 06:59  
evnt:23.03. Повторю вопрос. Мультивалютный советник не в выходной день торгует прямо сейчас, автоматически, НЕ вручную, торгует один, другие советники поток не занимают, совершает сделки по разным инструментам, каждый инициируется перед сделкой, все торгуются, кроме одного инструмента, который показывает ошибку 133 хотя его MODE_TRADEALLOWED== true означает, что торговля разрешена. В другой день, возможно, будет торговать. Код типа Вашего передаст 0

Как определить, что трейдинг разрешен/ не разрешен кроме как через MODE_TRADEALLOWED?

24.03. А  сегодня у другого брокера в той же ситуации возникает ошибка 166 Off quotes при  MODE_TRADEALLOWED==true. Затем торговля пошла. Как, не получая ошибку, заранее узнать, что торговли нет?
Ihor Herasko
8895
Ihor Herasko 2016.03.24 08:04  
evnt:

Как определить, что трейдинг разрешен/ не разрешен кроме как через MODE_TRADEALLOWED?

24.03. А  сегодня у другого брокера в той же ситуации возникает ошибка 166 Off quotes при  MODE_TRADEALLOWED==true. Затем торговля пошла. Как, не получая ошибку, заранее узнать, что торговли нет?
Выше ведь уже указали, чем пользоваться - IsTradeAllowed, передавая в нее интересующее время.  А 166-ая ошибка - это совершенно другая опера. Заранее о ней узнать невозможно. 
Tecuciztecatl
70
Tecuciztecatl 2016.03.24 14:53  
evnt:

Как определить, что трейдинг разрешен/ не разрешен кроме как через MODE_TRADEALLOWED?

24.03. А  сегодня у другого брокера в той же ситуации возникает ошибка 166 Off quotes при  MODE_TRADEALLOWED==true. Затем торговля пошла. Как, не получая ошибку, заранее узнать, что торговли нет?

Off quotes нужно ловить во время установки/модификации ордера, примерно так (на базе вашего кода):

ResetLastError();

err=0;
TradeAllowed(); if (err>0) return; /// Ждём разрешения торговать

n=-1;
while (n<0)
   {
      n=OrderSend(TName,opType,V,Price,slip,0,0,IntegerToString(DsT[i][j]));
      if (n>0) {break;}
      
      if (IsStopped()) {break;}

      err=GetLastError();
         if (err==136)
            {
            Comment("Off quotes. Waiting..");
            Sleep(1000);
            RefreshRates();
           }         
   }
evnt
208
evnt 2016.03.24 15:46  

Scriptong:
Выше ведь уже указали, чем пользоваться - IsTradeAllowed, передавая в нее интересующее время.  А 166-ая ошибка - это совершенно другая опера. Заранее о ней узнать невозможно.

Еще раз поясню, IsTradeAllowed возвращает true:

               if
               (
                  (TName!="")
                  &&
                  MarketInfo(TName,MODE_TRADEALLOWED)
                  &&
                  IsTradeAllowed(TName,TimeCurrent())
               )
               {OrderSend(...)}

После Ордер сэнд возвращается 133

Ihor Herasko
8895
Ihor Herasko 2016.03.25 07:22  
evnt:
Чуток внимательнее - не TimeCurrent(), а TimeLocal() с поправкой на серверное время. Ведь TimeCurrent() не обновляется в выходные.
evnt
208
evnt 2016.03.25 07:53  
Scriptong:
Чуток внимательнее - не TimeCurrent(), а TimeLocal() с поправкой на серверное время. Ведь TimeCurrent() не обновляется в выходные.

ИМХО, сегодня, не выходной. Также, с локальным временем сегодня та же 133-ю ошибка шла (см. в коде). Конечно, цепляет довольно экзотические пары, например, сегодня  CadSgd. Из-за временного  лага между Канадой и Сингапуром все возможно. Но я ведь потому и проверяю перед тем как претендента на сделку отфильтровать, а потом сделку совершить. 

 

               if
               (
                  (TName!="")
                  &&
                  MarketInfo(TName,MODE_TRADEALLOWED)
                  &&
                  IsTradeAllowed(TName,TimeCurrent())
                  &&
                  IsTradeAllowed(TName,TimeLocal())
               )
               {OrderSend(...)}
/ /12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий