Скачать MetaTrader 5

133? - страница 2

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

Смотрю вы каждый год спрашиваете про 133 Trade is disabled  :))

...это такой стёб? или всё не можете поправить советник для реагирования на ошибки?

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

evnt
208
evnt  
Tecuciztecatl:

Смотрю вы каждый год спрашиваете про 133 Trade is disabled  :))

...это такой стёб? или всё не можете поправить советник для реагирования на ошибки?

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

Отвечаю по существу:

 Это не стеб, когда возникает проблема - захожу сюда, потому что здесь помогают искать и находить решения. Мои советники на ошибки реагировать умеют. Задача - не реагировать, а не допускать.

пс. Совершаю операции не по регламенту?  - Подскажите, где нарушение.

 Что меня намеренно блокирует брокер - такой мысли не допускал, потому что ни параноей ни манией величия не страдаю. Тексистекатль - это бог Луны? Крутой ник!

Tecuciztecatl
70
Tecuciztecatl  

Блокировать могут на автомате из-за частых запросов или попыток установить близко сделку или еще чего... (никакой паранойи)

Если советники реагируют на ошибки, то не вижу проблем — при разрешенной торговле, отправлять запросы раз в 1-2 секунды, пока не пропустят. Ну и брокеру написать в поддержку чтобы разъяснили что к чему.

Кстати, в моем примере есть проверка счета на блокировку автоторговли брокером.

evnt
208
evnt  
Tecuciztecatl:

Блокировать могут на автомате из-за частых запросов или попыток установить близко сделку или еще чего... (никакой паранойи)

Если советники реагируют на ошибки, то не вижу проблем — при разрешенной торговле, отправлять запросы раз в 1-2 секунды, пока не пропустят. Ну и брокеру написать в поддержку чтобы разъяснили что к чему.

Кстати, в моем примере есть проверка счета на блокировку автоторговли брокером.

 

Проблема не на всех инструментах, а только на некоторых, не постоянно, а иногда.  Ордера открываю рыночные, а НЕ отложенные, без тейкпрофит и стоплосс, то есть ничего "слишком близкого" быть не может.  В проверку вставил ВСЕ, что упоминалось в данной ветке+ еще что только придумать мог. То есть проверка, очевидно, даже избыточная, но обойти сообщение про ошибки 133 и 136 не могу. Что за хрень! :(

if(Allowance(TName))
{//пытаюсь торговать, но получаю ошибки 133, 136
...
}else
{//должен бы попасть сюда, если торговля не разрешена, НО НЕ ПОПАДАЮ!
}

//+------------------------------------------------------------------+
bool Allowance(string TN)
{
   if
   (
      (TN!="")
      &&
      MarketInfo(TN,MODE_TRADEALLOWED)
      &&
      IsTradeAllowed(TN,TimeCurrent())
      &&
      IsTradeAllowed(TN,TimeLocal())
      &&
      AccountInfoInteger(ACCOUNT_TRADE_EXPERT)
      &&
      AccountInfoInteger(ACCOUNT_TRADE_ALLOWED)
      &&
      TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)
      &&
      (MarketInfo(TN,MODE_BID)>MarketInfo(TN,MODE_POINT))
   )
   {
      return(true);
   }else
   {
      return(false);
   }
}
//+------------------------------------------------------------------+

 

Tecuciztecatl
70
Tecuciztecatl  
//должен бы попасть сюда, если торговля не разрешена, НО НЕ ПОПАДАЮ!
Вы так ничего и не сказали о частоте запросов. 
И не понятно, когда вызывается
Allowance(TName), если один раз в самом начале, то конечно не попадете. Торговля ведь еще разрешена, а вот когда начинаете грузить сервер частыми запросами он в ответ банит вас по конкретномуу инструменту. (это всё мысли вслух, алгоритма программы нету)
evnt
208
evnt  
Tecuciztecatl:
Вы так ничего и не сказали о частоте запросов. 
И не понятно, когда вызывается
Allowance(TName), если один раз в самом начале, то конечно не попадете. Торговля ведь еще разрешена, а вот когда начинаете грузить сервер частыми запросами он в ответ банит вас по конкретномуу инструменту. (это всё мысли вслух, алгоритма программы нету)

 Как это алогоритма нет и частоты запросов? Алгоритм см. в скрипте: Когда Allowance==true, то пытаюсь торговать. Функция проверки Allowance приведена. Частота запросов к Allowance:  Вызывается каждый, когда хочу открыть|закрыть ордер.  Если бы было нельзя по конкретному инструменту,  т.е, " забанили меня по конкретному инструменту", то и не сунулся бы туда, если бы Allowance показал, что нельзя. Бывает, что ордер открыт, а через несколько часов или дней закрыть нельзя из-за 133 или 136, а потому, вдруг, опять начинает торговаться.  Как видите, засунул в Аллованс даже все то, что Вы советовали, хотя это, ИМХО, к моим ошибкам отношения не имет. Итак, вопрос:

Как программно определить, что конкрентный инструмент в настоящий момент торговать можно|нельзя? Чего для этого не хватает в моей функции Allowance?

Tecuciztecatl
70
Tecuciztecatl  

Если это весь ваш код (что приведен выше), то явно не хватает сброса ошибки перед вызовом (ResetLastError) и цикла, в котором будет выполняться попытка открыть ордер и проверка ошибок 133/136.

Выше я давал примерный код обработки реквот:

ResetLastError();                      /// сброс ошибки

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

n=-1;
while (n<0)                            /// цикл отправки запроса на открытие ордера
   {
      err=0;
      if (opType==OP_BUY) {OrdColor=Green;Price=MarketInfo(symb,MODE_ASK);}      /// узнаем текущий аск или бид в зависимости от opType,
      else {OrdColor=Red;Price=MarketInfo(symb,MODE_BID);}                    

      n=OrderSend(TName,opType,V,Price,slip,0,0,IntegerToString(DsT[i][j]),magic,OrdColor);
      if (n>0) {break;}                                                          /// если открылся прерываем цикл
      
      if (IsStopped()) {break;}                                                  /// если принудительное завершение, прерываем цикл

      err=GetLastError();                                                 /// получаем текущую ошибку (так же нужно и другие коды ошибок обрабатывать)
         if (err==136)                          /// если реквота, то..
            {
            Comment("Off quotes. Waiting..");
            Sleep(1000);                       /// ..ждём секунду
            RefreshRates();                    /// ..обновляем котировки и повторяем цикл, пока не выйдем по прерыванию или исполнению
            continue;
            }         
   }
Можно задавать количество повторов, после которых перываем цикл...
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий