MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1680

 
MakarFX # :

Makar 감사합니다. 고정하고 보겠습니다. 질문입니다. SELL 주문은 어떻습니까?

 
EVGENII SHELIPOV # :

Makar 감사합니다. 고정하고 보겠습니다. 질문입니다. SELL 주문은 어떻습니까?

세미온 세미노비치...
   double GetBuyOrderSwap()
     {
       double order_swap = 0 ;
       for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
        {
         if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
           {
             if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
              {
               if (OrderType() == OP_BUY)
                 {
                  order_swap += OrderSwap();
                 }
              }
           }
        }
       return (order_swap);
     }
   double GetSellOrderSwap()
     {
       double order_swap = 0 ;
       for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
        {
         if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
           {
             if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
              {
               if (OrderType() == OP_SELL)
                 {
                  order_swap += OrderSwap();
                 }
              }
           }
        }
       return (order_swap);
     }
 
MakarFX # :
세미온 세미노비치...

Makar, 하나의 기능으로 압축하는 것이 왜 그렇게 까다롭습니까? 아니면 내가 이해하지 못하는 것이 있습니까?

 
int GetMagic(Order &order)
{
   int magic = 0 ;
  
   if (order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP)
     if ( OrdersTotal () >= 1 )
       for (;;){
        magic++;
         for ( int i = OrdersTotal (); i > 0 ; i --)
           if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES) != false )
             if (magic != OrderMagicNumber())
               return magic;
            
      }
     else if ( OrdersTotal () == 0 )
       return (magic + 1 );
   return magic;
}
==로 바꾸면 도움이되지 않습니다. 두 경우 모두 스트림이 거기에 들어가지 않습니다(인쇄물로 확인됨).
 
Nerd Trader # :
거기, 해설에서 마술사는 쓰기 위해 배열로 보내지는데, 이것이 오해의 소지가 없도록 하고 마술사는 retorn에 의해 돌아오는 동안 쓰여집니다.

나는 일반적인 논리를 잘 이해하지 못하고 기능을 분리하려고합니다.

   if (order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP)
   int order_magic = GetMagic(order);

   if (order.is_init == true )
  {
     int order_send = OrderSend ( Symbol (), order.cmd, 0.01 , order.open_price, 10 , 
    order.sl_price, order.tp_price, "" , order_magic , 0 , order.arrow_color);

     if (order_send == - 1 ){
       Print (order.error_text, " | " , GetLastError (), " db_last.third " ,db_last.third,
         " | db_last.size_open_to_low " ,db_last.size_open_to_low, " | order.sl_price: " ,
        order.sl_price, " | order.cmd " ,order.cmd);
       ResetLastError ();
       return ;
    }
  }
   //+---
   int GetMagic(Order &order)
   {
     int magic = 0 ;
     for ( int i = OrdersTotal (); i > 0 ; i --)
      {
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
         {
           if (magic == OrderMagicNumber()) magic+= 1 ;
           else magic= 0 ;
         }
      }
     return (magic);
   }
 
EVGENII SHELIPOV # :

Makar, 하나의 기능으로 압축하는 것이 왜 그렇게 까다롭습니까? 아니면 내가 이해하지 못하는 것이 있습니까?

   double GetOrderSwap( int ot=- 1 ) // 0-Buy; 1-Sell
     {
       double order_swap = 0 ;
       for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
        {
         if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
           {
             if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
              {
               if (OrderType()==ot||ot< 0 )
                 {
                  order_swap += OrderSwap();
                 }
              }
           }
        }
       return (order_swap);
     }
 
MakarFX # :

Makar, 당신은 어린 아이와 같이 완전히 나와 함께 있습니다.

Makar 감사합니다. 기능을 약간 변경하고 망쳤습니다. 모든 것이 작동합니다.

 
MakarFX # :

나는 일반적인 논리를 잘 이해하지 못하고 기능을 분리하려고합니다.

이제 GetMagic은 보류 주문을 보낼 때 고유한 마법을 생성하고 레토르트로 반환해야 합니다. 그게 전부입니다. 귀하의 버전에는 하나의 주기만 있으며 주문이 다 떨어지면 else는 어쨌든 실행되고 magic == OrderMagicNumber() 는 항상 true입니다. 반대로, 나는 true가 아닐 때 magic != OrderMagicNumber()가 필요합니다. 그러면 마술은 고유하고 첫 번째 for(;;)에서 자체적으로 증가합니다 .
 
Nerd Trader # :

개인정보를 확인하세요.

 
안녕하세요! 나는 그러한 문제가 발생했습니다. 즉, 고문 이 보류 중인 주문 을 열었지만 터미널은 이를 추적하지 않으며 이 주문은 거래 내역에 없습니다. 아무도 그런 문제를 겪을 수 있습니까?