Как правильно работать в MT5 с OrderSend - страница 12

 
prostotrader:

Отвечая на вопрос темы "Как правильно работать в MT5 с OrderSend"

Есть простой ответ

Пока рзработчики не исправят недочёт, то

ulong pre_ticket; //Предварительный тикет
ulong order_ticket; //Тикет ордера
//---
if(OrderSend(request,result))
  {
    if(result.retcode==TRADE_RETCODE_DONE)
    {
      pre_ticket=result.order;
    }  
  }
//----------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
{
   switch(trans.type)
   {
     case TRADE_TRANSACTION_ORDER_UPDATE:
       if((pre_ticket>0) && (trans.order==pre_ticket))
       {
         switch(trans.order_state)
         {
           case ORDER_STATE_PLACED:
             order_ticket = pre_ticket;
           break;
         }
       }
     break;
   }
}

 

А когда исправят, то 

ulong order_ticket; //Тикет ордера
//---
if(OrderSend(request,result))
  {
    if(result.retcode==TRADE_RETCODE_DONE)
    {
      order_ticket=result.order;
    }  
  }


 

что-то у меня общее впечатление, что 5-ка сырая-сырая...
 
Maxim Kuznetsov:
что-то у меня общее впечатление, что 5-ка сырая-сырая...

Никто не застрахован от ошибок.

Другое дело, что ошибки очень долго исправляются. 

 
prostotrader:

Отвечая на вопрос темы "Как правильно работать в MT5 с OrderSend"

Есть простой ответ

Пока рзработчики не исправят недочёт, то

ulong pre_ticket; //Предварительный тикет
ulong order_ticket; //Тикет ордера
//---
if(OrderSend(request,result))
  {
    if(result.retcode==TRADE_RETCODE_DONE)
    {
      pre_ticket=result.order;
    }  
  }
//----------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
{
   switch(trans.type)
   {
     case TRADE_TRANSACTION_ORDER_UPDATE:
       if((pre_ticket>0) && (trans.order==pre_ticket))
       {
         switch(trans.order_state)
         {
           case ORDER_STATE_PLACED:
             order_ticket = pre_ticket;
           break;
         }
       }
     break;
   }
}

А если пачка OrderSend?

А когда исправят, то 

Не исправят. Это фишка.
 
fxsaber:

А если пачка OrderSend?


Кто возьмёт билетов ПАЧКУ, тот получит ВОДОКАЧКУ!
 

Для любителей ПАЧЕК

ulong pre_ticket = 0; //Претикет ордера
ulong order_ticket_1 = 0; //Тикет ордера
ulong order_ticket_2 = 0; //Тикет ордера
ulong order_ticket_3 = 0; //Тикет ордера
ulong order_ticket_4 = 0; //Тикет ордера
ulong order_ticket_5 = 0; //Тикет ордера
uint num_order = 0;
//---
if(OrderSend(request,result))
  {
    if(result.retcode==TRADE_RETCODE_DONE)
    {
      pre_ticket=result.order;
      num_order++;
    }  
  }
//----------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
{
   switch(trans.type)
   {
     case TRADE_TRANSACTION_ORDER_UPDATE:
       if((pre_ticket>0) && (trans.order==pre_ticket))
       {
         switch(trans.order_state)
         {
           case ORDER_STATE_PLACED:
             switch(num_order)
             {
               case 1:
                 order_ticket_1 = pre_ticket;
                 pre_ticket = 0;
               break;
               case 2:
                 order_ticket_2 = pre_ticket;
                 pre_ticket = 0;
               break;
               case 3:
                 order_ticket_3 = pre_ticket;
                 pre_ticket = 0;
               break;
               case 4:
                 order_ticket_4 = pre_ticket;
                 pre_ticket = 0;
               break;
               case 5:
                 order_ticket_5 = pre_ticket;
                 pre_ticket = 0;
               break;
             }
           break;
         }
       }
     break;
   }
}
void OnTick()
{
  if(pre_ticket == 0)
  {
    OrderSend();////////
  }
}


 

 

Или так

ulong pre_ticket = 0; //Претикет ордера
ulong order_ticket_1 = 0; //Тикет ордера
ulong order_ticket_2 = 0; //Тикет ордера
ulong order_ticket_3 = 0; //Тикет ордера
ulong order_ticket_4 = 0; //Тикет ордера
ulong order_ticket_5 = 0; //Тикет ордера
uint num_order = 0;
//---
if(OrderSend(request,result))
  {
    if(result.retcode==TRADE_RETCODE_DONE)
    {
      pre_ticket=result.order;
      num_order++;
    }  
  }
//----------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
{
   switch(trans.type)
   {
     case TRADE_TRANSACTION_ORDER_UPDATE:
       if((pre_ticket>0) && (trans.order==pre_ticket))
       {
         switch(trans.order_state)
         {
           case ORDER_STATE_PLACED:
             switch(num_order)
             {
               case 1:
                 order_ticket_1 = pre_ticket;
                 pre_ticket = 0;
                 OrderSend();
               break;
               case 2:
                 order_ticket_2 = pre_ticket;
                 pre_ticket = 0;
                 OrderSend();
               break;
               case 3:
                 order_ticket_3 = pre_ticket;
                 pre_ticket = 0;

                 OrderSend(); 

               break;
               case 4:
                 order_ticket_4 = pre_ticket;
                 pre_ticket = 0;
                 OrderSend();
               break;
               case 5:
                 order_ticket_5 = pre_ticket;
                 pre_ticket = 0;
               break;
             }
           break;
         }
       }
     break;
   }
}


 

 
fxsaber:

Не исправят. Это фишка.

Жаль, что разработчики никак не комментируют ситуацию с OrderSend()

"Фишка" ли это или поправят?... 

 
fxsaber:

Не исправят. Это фишка.

В СД ответили, что со следующего билда OrderSend() будет работать как надо :)
 
prostotrader:
В СД ответили, что со следующего билда OrderSend() будет работать как надо :)
Весело у них там

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Как правильно работать в MT5 с OrderSend

Renat Fatkhullin, 2016.10.10 22:44

Абсолютно синхронная.

Это означает, что функция ждет ответа в полный круг на свой запрос. И получает ответ "да, исполнено". Максимально быстро.

Вы совершенно не понимаете окружения и путаете понятия. Вы пытаетсь приплюсовать к понятию OrderSend процесс "должен достать из историисделок или открытых позиций полностью оформленную структуру сделки или позиции".

 

Тем не менее мне ответили, что я ниписал выше.

Может быть Вы не очень убедительно написали или не так привели доводы о недочёте функции.