К разработчикам. ФОРТС переконнект к другому серверу

 

Добрый день!

Билд терминала 1157, реальный счёт.

Сегодня, после клиринга, произошел сбой (продолжался несколько минут: 19:11:02.265 - 19:19:10.853 ):

2015.07.23 18:45:30.070 Forts_trader (GOLD-9.15,M1)     Сейчас 2015.07.23 18:45, если есть необходимость, можно закрыть терминал.
2015.07.23 19:11:02.265 Forts_trader (URKA-9.15,H1)     CheckOrders: Sell ордер установлен. Билет = 15981250
2015.07.23 19:11:02.265 Forts_trader (RTKM-9.15,H1)     CheckOrders: Sell ордер установлен. Билет = 15981249
2015.07.23 19:11:02.265 Forts_trader (GMKR-9.15,H1)     CheckOrders: Sell ордер установлен. Билет = 15981252
2015.07.23 19:11:02.265 Forts_trader (BR-10.15,H1)      CheckOrders: Sell ордер не удалён! Билет = 15980897
2015.07.23 19:11:02.265 Forts_trader (UCHF-9.15,H1)     CheckOrders: Sell ордер не удалён! Билет = 15980987
2015.07.23 19:11:02.265 Forts_trader (UJPY-9.15,H1)     CheckOrders: Buy ордер не удалён! Билет = 15981037
2015.07.23 19:11:02.265 Forts_trader (UJPY-9.15,H1)     CheckOrders: Sell ордер не удалён! Билет = 15981039
2015.07.23 19:11:02.270 Forts_trader (TATN-9.15,H1)     CheckOrders: Sell ордер установлен. Билет = 15981251
2015.07.23 19:11:02.270 Forts_trader (SNGR-9.15,H1)     CheckOrders: Buy ордер не удалён! Билет = 15980862
2015.07.23 19:11:03.073 Forts_trader (GMKR-9.15,H1)     Remove: Ордер не отослан! Неправильный запрос
2015.07.23 19:11:03.279 Forts_trader (RTS-12.15,H1)     CheckOrders: Sell ордер установлен. Билет = 15981255
2015.07.23 19:11:20.527 Forts_trader (TATN-9.15,H1)     CheckOrders: Buy ордер установлен. Билет = 15981429
2015.07.23 19:11:21.507 Forts_trader (TATN-9.15,H1)     Remove: Ордер не отослан! Неправильный запрос
2015.07.23 19:11:21.507 Forts_trader (TATN-9.15,H1)     Remove: Ордер не отослан! Неправильный запрос
2015.07.23 19:11:22.010 Forts_trader (TATN-9.15,H1)     Remove: Ордер не отослан! Неправильный запрос
2015.07.23 19:11:22.010 Forts_trader (TATN-9.15,H1)     Remove: Ордер не отослан! Неправильный запрос
2015.07.23 19:11:22.547 Forts_trader (URKA-9.15,H1)     CheckOrders: Sell ордер не удалён! Билет = 15981250
2015.07.23 19:11:22.547 Forts_trader (RTKM-9.15,H1)     CheckOrders: Sell ордер не удалён! Билет = 15981249
2015.07.23 19:11:22.547 Forts_trader (GMKR-9.15,H1)     CheckOrders: Sell ордер не удалён! Билет = 15981252
2015.07.23 19:11:22.549 Forts_trader (UCHF-9.15,H1)     CheckOrders: Sell ордер не удалён! Билет = 15981403
2015.07.23 19:11:22.549 Forts_trader (BR-10.15,H1)      CheckOrders: Sell ордер не удалён! Билет = 15981386
2015.07.23 19:11:25.030 Forts_trader (GMKR-9.15,H1)     Remove: Ордер не отослан! Неправильный запрос
2015.07.23 19:11:25.030 Forts_trader (RTKM-9.15,H1)     Remove: Ордер не отослан! Неправильный запрос
2015.07.23 19:11:25.044 Forts_trader (BR-10.15,H1)      Remove: Ордер не отослан! Неправильный запрос
2015.07.23 19:11:25.044 Forts_trader (BR-10.15,H1)      Remove: Ордер не отослан! Неправильный запрос
2015.07.23 19:11:25.044 Forts_trader (GMKR-9.15,H1)     Remove: Ордер не отослан! Неправильный запрос
2015.07.23 19:11:25.044 Forts_trader (RTKM-9.15,H1)     Remove: Ордер не отослан! Неправильный запрос
2015.07.23 19:11:25.044 Forts_trader (TATN-9.15,H1)     Remove: Ордер не отослан! Неправильный запрос
2015.07.23 19:11:25.044 Forts_trader (URKA-9.15,H1)     Remove: Ордер не отослан! Неправильный запрос

Функция CheckOrders() срабатывает, если нет события TradeTransaction (https://www.mql5.com/ru/blogs/post/557544)

Реализация функции Remove():

//+------------------------------------------------------------------+
// Remove order                                                      |
//+------------------------------------------------------------------+
void COrder::Remove()
{
  if ( ticket > 0 )
  {
    if ( OrderSelect( ticket ) )
    {
      mem_magic = ulong( OrderGetInteger( ORDER_MAGIC ) );
      mem_tick = GetTickCount();
      req_id = 0;
      MqlTradeRequest request = {0};
      MqlTradeResult  result  = {0};
            
      request.action = TRADE_ACTION_REMOVE;
      request.order = ticket;
          
      if ( OrderSendAsync( request, result ) )
      {
        if ( result.retcode == TRADE_RETCODE_PLACED )
        { 
          req_id = result.request_id;
//---          
          switch( order_status )
          {
            case BUY_ORDER:  state = ORD_BUY_DO_CANCEL;
                             break;
                
            case SELL_ORDER: state = ORD_SELL_DO_CANCEL;
                             break;           
          } 
          SetTransCount( true );
        }
        else
        {
          mem_magic = 0;
          mem_tick = 0;
          CheckError( result.retcode, "Remove: Результат удаления ордера не верен!", order_status );
        }  
      }
      else
      {
        mem_magic = 0;
        mem_tick = 0;
        CheckError( result.retcode, "Remove: Ордер не отослан!", order_status );
      }
    }
    else
    {
      ticket = 0;
      modify_count = 0;
    }
  }
  else
  {
    modify_count = 0;
  }
}

 

 Вопросы:

1. Почему, при наличии активного ордера ( if ( OrderSelect( ticket ) ) ), не был отослан запрос на его удаление( Неправильный запрос )?

( подобный сбой ранее не наблюдался в течении года работы эксперта, как и не изменялась функция Remove() ) 

2. Планируете ли Вы дать возможность программно подключиться к другому серверу?

Отслеживание ордера, после команды OrderSendAsync
Отслеживание ордера, после команды OrderSendAsync
  • 2015.04.29
  • Михаил
  • www.mql5.com
Отслеживание ордера, после команды OrderSendAsync Михаил | 23 апреля, 2015 В статье рассказывается принцип отслеживания ордера после команды OrderSendAsync, если нет события...
 

Уважаемые разработчики!

Если Вам затруднительно ответить на 1-ый вопрос, то пожалуйста,

в любом случае, ответьте на второй.

 

Уважаемые разработчики!

Не слишком ли частые стали сбои?

Раньше ОДНОГО события TradeTransaction не было 1 раз в два месяца, а сейчас

сами видите сколько (с учётом четверга)..... 

2015.07.29 10:00:24.229 Forts_trader (GBPU-9.15,H1)     CheckOrders: Sell ордер установлен. Билет = 17136673
2015.07.29 10:00:21.654 Forts_trader (GBPU-9.15,H1)     CheckOrders: Попытка 2 получить билет Sell ордера!
2015.07.29 10:00:20.641 Forts_trader (GBPU-9.15,H1)     CheckOrders: Попытка 1 получить билет Sell ордера!
2015.07.29 10:00:20.640 Forts_trader (GBPU-9.15,H1)     CheckOrders: Buy ордер установлен. Билет = 17136671
 

1. Логи будут более читаемы если помимо словесного описания добавить код ошибки.

2. Судя по всему проблемы в подключении шлюза на стороне брокера - брокера уведомим и будем разбираться.

 
MQ Alexander:

1. Логи будут более читаемы если помимо словесного описания добавить код ошибки.

2. Судя по всему проблемы в подключении шлюза на стороне брокера - брокера уведомим и будем разбираться.

"Неправильный запрос" - это:

10013

TRADE_RETCODE_INVALID

Неправильный запрос

 

В функции CheckError() вчера добавил номер билета (для большей информативности).

Стало:

default:    Print( err_msg, " Билет = ", a_ticket, " ", GetRetCode( ret_code ) );  

 Было:

 default:    Print( err_msg, " ", GetRetCode( ret_code ) ); 


//+------------------------------------------------------------------+
// Expert Check Error function                                       |
//+------------------------------------------------------------------+
void CheckError( const uint ret_code, const string err_msg, const ENUM_ORD_STATUS ord_status, const ulong a_ticket )
{
  switch( ret_code )
  {
    case 10017:
    case 10018:
    case 10019:
    case 10021:
//    case 10024:
    case 10026:
    case 10027: StopTrading( err_msg + " " + GetRetCode( ret_code ), a_ticket );
                break;
                
    case 10015: switch( ord_status )
                {
                  case BUY_ORDER:  BuyOrder.EasyRemove(); 
                                   break;
                                  
                  case SELL_ORDER: SellOrder.EasyRemove();
                                   break;                
                } 
                StopTrading( err_msg + " " + GetRetCode( ret_code ), a_ticket );
                break;              
                
    default:    Print( err_msg, " Билет = ", a_ticket, " ", GetRetCode( ret_code ) );  
                break;            
  }
}

 

//+------------------------------------------------------------------+
//| Expert Get retcode function                                      |
//+------------------------------------------------------------------+
string GetRetCode( const uint code )
{
  string retcode;
  
  switch( code )
  {
    case 10004: retcode = "Реквота";
         break;
    case 10006: retcode = "Запрос отвергнут";
         break;
    case 10007: retcode = "Запрос отменен трейдером";
         break;
    case 10008: retcode = "Ордер размещен";
         break;
    case 10009: retcode = "Заявка выполнена";
         break;
    case 10010: retcode = "Заявка выполнена частично";
         break;
    case 10011: retcode = "Ошибка обработки запроса";
         break;
    case 10012: retcode = "Запрос отменен по истечению времени";
         break;
    case 10013: retcode = "Неправильный запрос";
         break;
    case 10014: retcode = "Неправильный объем в запросе";
         break;
    case 10015: retcode = "Неправильная цена в запросе";
         break;
    case 10016: retcode = "Неправильные стопы в запросе";
         break;
    case 10017: retcode = "Торговля запрещена";
         break;
    case 10018: retcode = "Рынок закрыт";
         break;
    case 10019: retcode = "Нет достаточных денежных средств для выполнения запроса";
         break;
    case 10020: retcode = "Цены изменились";
         break;
    case 10021: retcode = "Отсутствуют котировки для обработки запроса";
         break;
    case 10022: retcode = "Неверная дата истечения ордера в запросе";
         break;
    case 10023: retcode = "Состояние ордера изменилось";
         break;
    case 10024: retcode = "Слишком частые запросы";
         break;
    case 10025: retcode = "В запросе нет изменений";
         break;
    case 10026: retcode = "Автотрейдинг запрещен сервером";
         break;
    case 10027: retcode = "Автотрейдинг запрещен клиентским терминалом";
         break;
    case 10028: retcode = "Запрос заблокирован для обработки";
         break;
    case 10029: retcode = "Ордер или позиция заморожены";
         break;
    case 10030: retcode = "Указан неподдерживаемый тип исполнения ордера по остатку";
         break;
    case 10031: retcode = "Нет соединения с торговым сервером";
         break;
    case 10032: retcode = "Операция разрешена только для реальных счетов";
         break;
    case 10033: retcode = "Достигнут лимит на количество отложенных ордеров";
         break;
    case 10034: retcode = "Достигнут лимит на объем ордеров и позиций для данного символа";
         break;
    case 10035: retcode = "Неверный или запрещённый тип ордера";
         break;
    case 10036: retcode = "Позиция с указанным POSITION_IDENTIFIER уже закрыта";
         break;
    default: retcode = "Нет кода возврата.";  
         break; 
  }
  return( retcode );
}
 

Господа разработчики!

Теперь сбои каждый день будут?

2015.08.05 13:30:01.700 Forts_trader (URKA-9.15,H1)     CheckOrders: Попытка 1 получить билет Sell ордера!
2015.08.05 13:30:02.715 Forts_trader (URKA-9.15,H1)     CheckOrders: Попытка 2 получить билет Sell ордера!
2015.08.05 13:30:03.728 Forts_trader (URKA-9.15,H1)     CheckOrders: Попытка 3 получить билет Sell ордера!
2015.08.05 13:30:05.757 Forts_trader (URKA-9.15,H1)     CheckOrders: Sell ордер установлен. Билет = 18366307
2015.08.05 13:30:10.841 Forts_trader (URKA-9.15,H1)     CheckOrders: Sell ордер не удалён! Билет = 18366307
2015.08.05 13:32:21.679 Forts_trader (SNGR-9.15,H1)     CheckOrders: Попытка 1 получить билет Sell ордера!
2015.08.05 13:32:23.707 Forts_trader (SNGR-9.15,H1)     CheckOrders: Sell ордер установлен. Билет = 18366510
2015.08.05 13:45:02.603 Forts_trader (MIX-9.15,M1)      OnTradeTransaction: Фунция FastBuySell выполнена.
2015.08.05 13:45:02.603 Forts_trader (MIX-9.15,M1)      OnTradeTransaction: Сделка совершена Main ордер. Билет = 18367035
2015.08.05 13:45:02.638 Forts_trader (MIX-9.15,M1)      OnTradeTransaction: Сделка совершена Main ордер. Билет = 18367036
2015.08.05 13:45:09.599 Forts_trader (MIX-9.15,M1)      OnTradeTransaction: Фунция FastBuySell выполнена.
2015.08.05 13:45:09.599 Forts_trader (MIX-9.15,M1)      OnTradeTransaction: Сделка совершена Main ордер. Билет = 18367042
2015.08.05 13:45:09.626 Forts_trader (MIX-9.15,M1)      OnTradeTransaction: Сделка совершена Main ордер. Билет = 18367043
2015.08.05 14:00:30.452 Forts_trader (SBRF-9.15,M1)     Сейчас 2015.08.05 14:00, если есть необходимость, можно закрыть терминал.
2015.08.05 15:14:58.820 Forts_trader (PLT-9.15,H1)      CheckOrders: Sell ордер не удалён! Билет = 18370045
2015.08.05 15:14:58.821 Forts_trader (UCHF-9.15,H1)     CheckOrders: Sell ордер модифицирован. Билет = 18367699
2015.08.05 15:14:58.821 Forts_trader (UJPY-9.15,H1)     CheckOrders: Попытка 1 получить билет Buy ордера!
2015.08.05 15:14:58.824 Forts_trader (AUDU-9.15,H1)     CheckOrders: Попытка 1 получить билет Buy ордера!
2015.08.05 15:14:59.835 Forts_trader (UJPY-9.15,H1)     CheckOrders: Попытка 2 получить билет Buy ордера!
2015.08.05 15:14:59.836 Forts_trader (AUDU-9.15,H1)     CheckOrders: Попытка 2 получить билет Buy ордера!
2015.08.05 15:15:01.862 Forts_trader (UJPY-9.15,H1)     CheckOrders: Buy ордер установлен. Билет = 18370075
2015.08.05 15:15:01.862 Forts_trader (GBPU-9.15,H1)     CheckOrders: Buy ордер модифицирован. Билет = 18370040
2015.08.05 15:15:02.961 Forts_trader (UJPY-9.15,H1)     CheckOrders: Buy ордер модифицирован. Билет = 18370075
2015.08.05 15:15:02.961 Forts_trader (AUDU-9.15,H1)     CheckOrders: Buy ордер не удалён! Билет = 18370076
2015.08.05 15:15:02.962 Forts_trader (UJPY-9.15,H1)     CheckOrders: Попытка 1 получить билет Sell ордера!
2015.08.05 15:15:05.405 Forts_trader (UJPY-9.15,H1)     CheckOrders: Sell ордер установлен. Билет = 18370112
2015.08.05 15:42:08.999 Forts_trader (UJPY-9.15,H1)     Исчерпан лимит установки ордеров Sell по инструменту!
2015.08.05 15:51:54.757 Forts_trader (GBPU-9.15,H1)     Исчерпан лимит установки ордеров Sell по инструменту!
2015.08.05 16:13:28.503 Forts_trader (PLT-9.15,H1)      Исчерпан лимит установки ордеров Sell по инструменту!
2015.08.05 16:38:04.958 Forts_trader (BR-10.15,H1)      CheckOrders: Sell ордер не удалён! Билет = 18374746
2015.08.05 17:47:24.441 Forts_trader (URKA-9.15,H1)     CheckOrders: Buy ордер модифицирован. Билет = 18379569

 Было же ВСЁ нормально! 

 

Сегодня опять:

2015.08.06 10:00:11.701 Forts_trader (MIX-9.15,M1)      CheckOrders: Sell ордер установлен. Билет = 18394383
2015.08.06 10:00:11.701 Forts_trader (LKOH-9.15,H1)     CheckOrders: Buy ордер установлен. Билет = 18394382
2015.08.06 10:00:11.701 Forts_trader (GAZR-9.15,M1)     CheckOrders: Buy ордер установлен. Билет = 18394381
2015.08.06 10:00:11.701 Forts_trader (LKOH-9.15,H1)     CheckOrders: Попытка 1 получить билет Sell ордера!
2015.08.06 10:00:11.711 Forts_trader (SNGP-9.15,H1)     CheckOrders: Попытка 1 получить билет Buy ордера!
2015.08.06 10:00:11.711 Forts_trader (SNGP-9.15,H1)     CheckOrders: Попытка 1 получить билет Sell ордера!
2015.08.06 10:00:12.730 Forts_trader (LKOH-9.15,H1)     CheckOrders: Попытка 2 получить билет Sell ордера!
2015.08.06 10:00:12.732 Forts_trader (MGNT-9.15,H1)     CheckOrders: Buy ордер установлен. Билет = 18394385
2015.08.06 10:00:12.732 Forts_trader (ROSN-9.15,H1)     CheckOrders: Sell ордер установлен. Билет = 18394384
2015.08.06 10:00:12.732 Forts_trader (SNGP-9.15,H1)     CheckOrders: Попытка 2 получить билет Buy ордера!
2015.08.06 10:00:12.732 Forts_trader (SNGP-9.15,H1)     CheckOrders: Попытка 2 получить билет Sell ордера!
2015.08.06 10:00:14.758 Forts_trader (MIX-9.15,M1)      CheckOrders: Sell ордер модифицирован. Билет = 18394383
2015.08.06 10:00:14.758 Forts_trader (LKOH-9.15,H1)     CheckOrders: Sell ордер установлен. Билет = 18394386
2015.08.06 10:00:14.758 Forts_trader (ED-9.15,M1)       CheckOrders: Попытка 1 получить билет Sell ордера!
2015.08.06 10:00:14.760 Forts_trader (MGNT-9.15,H1)     CheckOrders: Buy ордер модифицирован. Билет = 18394385
2015.08.06 10:00:14.760 Forts_trader (ROSN-9.15,H1)     CheckOrders: Buy ордер модифицирован. Билет = 18394380
2015.08.06 10:00:14.760 Forts_trader (SNGP-9.15,H1)     CheckOrders: Buy ордер установлен. Билет = 18394387
2015.08.06 10:00:14.760 Forts_trader (SNGP-9.15,H1)     CheckOrders: Sell ордер установлен. Билет = 18394388
2015.08.06 10:00:15.260 Forts_trader (SNGR-9.15,H1)     CheckOrders: Попытка 1 получить билет Buy ордера!
2015.08.06 10:00:15.260 Forts_trader (SNGR-9.15,H1)     CheckOrders: Попытка 1 получить билет Sell ордера!
2015.08.06 10:00:17.609 Forts_trader (ED-9.15,M1)       CheckOrders: Sell ордер установлен. Билет = 18394399
2015.08.06 10:00:17.609 Forts_trader (SNGR-9.15,H1)     CheckOrders: Buy ордер установлен. Билет = 18394411
2015.08.06 10:00:17.609 Forts_trader (SNGR-9.15,H1)     CheckOrders: Sell ордер установлен. Билет = 18394412
 
Михаил:

Господа разработчики!

Теперь сбои каждый день будут?

 Было же ВСЁ нормально! 

Пожалуйста, чётко формулируйте проблему в каждом конкретном случае, что не приходилось догадываться - внутренней логики вашего эксперта, и его принципов журналирования

не знает никто кроме вас.

Это касается обоих фрагментов журнала за 5 и за 6 августа.

Также желательно прикладывать фрагмент основного лога терминала за соответствующее время, для того чтобы видеть что в реальности делал терминал.

 
MQ Alexander:
Пожалуйста, чётко формулируйте проблему в каждом конкретном случае, что не приходилось догадываться - внутренней логики вашего эксперта, и его принципов журналирования

не знает никто кроме вас.

Это касается обоих фрагментов журнала за 5 и за 6 августа.

Странно, а я думал, что выложенный мною код как раз и показывает принципы журналирования.

ЧЁТКО: Во всех случаях нет события TradeTransaction!

А когда его нет, то срабатывает функция CheckOrders() (  https://www.mql5.com/ru/blogs/post/557544 )

 

P/S Интересная особенность!

Каждый раз, когда появляется (выявляется) новая ошибка, сотрудники MQ начинают говорить,

что не чётко сформулирована проблема. Потом недостаточно данных, потом не можем воспроизвести,

потом (много времени) обсуждаем, потом ВСЕГДА - один и тот же результат:

1. Признание наличия ошибки

2. Обещание исправить (многие до сих пор исправляются.....) 

 

Очень печально всё это - я уже устал работать у Вас тестером ПО на реальном счёте

Загляните Огромные задержки, при исполнении приказов

Ошибки, MetaTrader 5 MQL5, Открыта, Начата: 2015.08.06 13:09, #1276321

я думаю, что эти ошибки взаимосвязаны.

Отслеживание ордера, после команды OrderSendAsync
Отслеживание ордера, после команды OrderSendAsync
  • 2015.04.29
  • Михаил
  • www.mql5.com
Отслеживание ордера, после команды OrderSendAsync Михаил | 23 апреля, 2015 В статье рассказывается принцип отслеживания ордера после команды OrderSendAsync, если нет события...
 
Михаил:

Очень печально всё это - я уже устал работать у Вас тестером ПО на реальном счёте. 

 Не плохо было чтобы Вы поработали в команде  https://www.metaquotes.net/ru/company/vacancies - возможно, много бы косяков устранили) 

А сейчас сезон отпусков - разработчики  на расслабоне, а Ренат, возможно,  где- нибудь в Ницце на пляжу коктейль потягивает - и ему по ) 

Вакансии / MetaQuotes Software Corp.
  • www.metaquotes.net
Вакансии компании MetaQuotes Software Corp. Кто нужен компании, кем можно поработать и что это даст?
 
интересно, если ордер ушел и потерялся, даже если мы отслеживаем ордера через таймауты, то может ли быть такая ситуация что ордер появится на сервере после? просто не совсем знаю как работают , обмен клиента  и сервера метатрейдера, шлюзы и прочее... так как  TradeTransaction не гарантированно, можно ли через какой то таймаут гарантировать что оно(TradeTransaction) сто пудово не произойдет?
Причина обращения: