MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1680

 
MakarFX # :

Teşekkürler Makar, tutturmaya çalışacağım ve göreceğim. Sadece bir soru, SATIŞ emirleri ne olacak?

 
EVGENII SHELIPOV # :

Teşekkürler Makar, tutturmaya çalışacağım ve göreceğim. Sadece bir soru, SATIŞ emirleri ne olacak?

Semyon Semyonoviç...
   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 # :
Semyon Semyonoviç...

Makar, onu tek bir işleve sığdırmak neden bu kadar zor? Yoksa anlamadığım bir şey mi var?

 
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;
}
== ile değiştirirseniz yardımcı olmaz. Her iki durumda da akış oraya girmez (bir baskı ile kontrol edilir)
 
Nerd Trader # :
Orada, tefsirde, sihirbazın diziye yazılmak üzere gönderildiği, bu yanıltıcı olmasın, sihirbaz geri dönerken, yazılır.

Genel mantığı tam olarak anlamadım, işlevleri ayırmaya çalışıyorum

   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, onu tek bir işleve sığdırmak neden bu kadar zor? Yoksa anlamadığım bir şey mi var?

   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, küçüğüm gibi tamamen yanımdasın.

Teşekkürler Makar, işlevi biraz değiştirdim, batırdım, her şey çalışıyor

 
MakarFX # :

Genel mantığı tam olarak anlamadım, işlevleri ayırmaya çalışıyorum

Şimdi GetMagic, bekleyen bir emir gönderirken benzersiz bir sihir oluşturmalı ve onu imbikle iade etmelidir, hepsi bu. Sürümünüzde yalnızca bir döngü vardır ve siparişler bittiğinde, başka şekilde yürütülür ve magic == OrderMagicNumber() her zaman doğru olur. Aksine, sihire ihtiyacım var != OrderMagicNumber() doğru olmadığında, sihir benzersizdir ve kendisi ilk for(;;) içinde artırılır .
 
Nerd Trader # :

Kişisel kontrol edin.

 
Tünaydın! Böyle bir sorunla karşılaştım, yani danışman bekleyen bir emir açtı , ancak terminal bunu takip etmiyor ve bu emir işlem geçmişinde yok. Söylesene, böyle bir sorunla karşılaşan var mı?