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

 
Rustam Bikbulatov :

gördüm ve denedim. Zaten çok yardımcı oldu, ancak anlayışımın bir sınırı var

Yani sipariş sayısına değil, lot cinsinden hacme mi ihtiyacınız var?

 //+------------------------------------------------------------------+
int fMarketOrdersOpenVolume( const ENUM_ORDER_TYPE order_type)
  {
   int total= OrdersTotal ();
   double lots= 0 ;
   for ( int i=total- 1 ;i>= 0 ;i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS ))
        {
         if ( OrderType ()!=order_type) continue ;
         if ( OrderMagicNumber ()== 123 && OrderSymbol ()== Symbol ())
            lots+= OrderLots ();
        }
     }
   return lots;
  }
//+------------------------------------------------------------------+
 
Artyom Trishkin :

Yanisipariş sayısına değil, lot cinsinden hacme mi ihtiyacınız var?

 double fMarketOrdersOpenVolume( const ENUM_ORDER_TYPE order_type)
 
Konstantin Nikitin :

Siktir git!!!!!! Neye ihtiyacım vardı!!!!!! Bunu daha önce hiç düşünmemiştim!!!!! Çok teşekkürler!!!!!

 
Konstantin Nikitin :

Evet, endişelerinde gözden kaçmış

 
Bize yardım ettiğiniz için hepinize teşekkürler!!! Yine de harikasın!!!
 

Ancak merhaba!

Bana bu durumu anlatın: TMA_Fair'e istinaden planlandığı gibi sınırda açıyorum, karşı sınırda kapatıyorum ama diğer sınırda kapanmıyor! Koddaki hata nerede?

 void OnTick ()
{
  PriceHigh = iCustom ( NULL , 0 , "ExtremeTMALine st2050 v1" , TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, alertsOn, alertsMessage, alertsSound, alertsEmail, MaxBars, ShowInfo, ShowInfo_WindowNo, ShowInfo_X, ShowInfo_Y, ShowInfo_ColorLabel, ShowInfo_ColorSwing, ShowInfo_ColorUp, ShowInfo_ColorDown, 1 , 0 );
  PriceLow  = iCustom ( NULL , 0 , "ExtremeTMALine st2050 v1" , TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, alertsOn, alertsMessage, alertsSound, alertsEmail, MaxBars, ShowInfo, ShowInfo_WindowNo, ShowInfo_X, ShowInfo_Y, ShowInfo_ColorLabel, ShowInfo_ColorSwing, ShowInfo_ColorUp, ShowInfo_ColorDown, 2 , 0 );
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+  
   if (CountSell() == 0 && Bid >= PriceHigh)
  {
      ticket = OrderSend ( Symbol (), OP_SELL , Lots, Bid , Slippage, 0 , 0 , "ExtremeTMALine_Robot" , Magic, 0 , Red);
       if (ticket> 0 )
      {
       SL = NormalizeDouble ( Bid + StopLoss* Point , Digits );
       
       if ( OrderSelect (ticket, SELECT_BY_TICKET ))
           if (! OrderModify (ticket, OrderOpenPrice (), SL, 0 , 0 ))
           Print ( "Ошибка модификации ордера на продажу!!!" ); 
      } else Print ( "Ошибка открытия ордера на продажу!!!" );
        
  }
//+------------------------------------------------------------------+  
   if ( Ask <= PriceLow && CountSell() > 0 )
  {
     for ( int i = OrdersTotal ()- 1 ; i >= 0 ; i--)
    {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
      {
         if ( OrderMagicNumber () == Magic && OrderType () == OP_SELL )
             if (! OrderClose ( OrderTicket (), OrderLots (), Ask , Slippage, Black))
             Print ( "Ошибка закрытия ордера на продажу!!!" );  
      } else Print ( "Ошибка открытия ордера на продажу!!!" );
    }
  }  
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+  
  
   if (CountBuy() == 0 && Ask <= PriceLow)
  {
      ticket = OrderSend ( Symbol (), OP_BUY , Lots, Ask , Slippage, 0 , 0 , "ExtremeTMALine_Robot" , Magic, 0 , Blue);
       if (ticket> 0 )
      {
       SL = NormalizeDouble ( Ask - StopLoss* Point , Digits );
       
       if ( OrderSelect (ticket, SELECT_BY_TICKET ))
           if (! OrderModify (ticket, OrderOpenPrice (), SL, 0 , 0 ))
           Print ( "Ошибка модификации ордера на покупку!!!" );  
      } else Print ( "Ошибка открытия ордера на покупку!!!" );
        
  }
//+------------------------------------------------------------------+  
   if ( Bid >= PriceHigh && CountBuy() > 0 )
  {
     for ( int i = OrdersTotal ()- 1 ; i >= 0 ; i--)
    {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
      {
         if ( OrderMagicNumber () == Magic && OrderType () == OP_BUY )
           if (! OrderClose ( OrderTicket (), OrderLots (), Bid , Slippage, Green))
           Print ( "Ошибка закрытия ордера на покупку!!!" ); 
      } else Print ( "Ошибка открытия ордера на покупку!!!" );
    }
  }
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int CountSell()
{
 int count = 0 ;
     for ( int trade = OrdersTotal ()- 1 ; trade>= 0 ; trade--)
     {
           if ( OrderSelect (trade, SELECT_BY_POS , MODE_TRADES ))
          {
             if ( OrderSymbol () == Symbol () && OrderMagicNumber () == Magic && OrderType () == OP_SELL )
             count++;
          }
     }
     return (count);
}
//+------------------------------------------------------------------+
int CountBuy()
{
 int count = 0 ;
     for ( int trade = OrdersTotal ()- 1 ; trade>= 0 ; trade--)
     {
           if ( OrderSelect (trade, SELECT_BY_POS , MODE_TRADES ))
          {
             if ( OrderSymbol () == Symbol () && OrderMagicNumber () == Magic && OrderType () == OP_BUY )
             count++;
          }
     }
     return (count);
}
//+------------------------------------------------------------------+
 
Domovoi44 :

Ancak merhaba!

Bana bu durumu anlatın: TMA_Fair'e istinaden planlandığı gibi sınırda açıyorum, karşı sınırda kapatıyorum ama diğer sınırda kapanmıyor! Koddaki hata nerede?

Göstergeyi dikkatlice takip ederseniz, 10 veya daha fazla çubuğu yeniden çizdiğini fark edeceksiniz. Bütün sebep bu.

 
Alexey Viktorov :

Göstergeyi dikkatlice takip ederseniz, 10 veya daha fazla çubuğu yeniden çizdiğini fark edeceksiniz. Bütün sebep bu.

Ehhhh lanet olsun!! Tamir etmeye devam edeceğim) Yardımın için teşekkürler!!
 
MT-4 için bir çukur hacmi sapma göstergesi olup olmadığını söyle
 

Tünaydın! Bana yardım et lütfen! Lot sayısı için bir kontrol yazmaya çalışıyorum. Hesabım +%10 kar olursa, lot ikiye katlanır. +%20 ise, lot*4. Ve hesap azalırsa, lot büyüklüğü buna göre azalır. Her yeni işlem için Lots_New'in nasıl yeni bir değer almasını anlamıyorum.

 double Bal= AccountBalance();
double GetLots()
{
double Lots_New;
double Lots = 0.1 ;
   
   if (Bal <= AccountBalance ()+ 0.1 * AccountBalance ()){
   Lots_New=Lots* 2 ;
   }
   if (Bal >= AccountBalance ()+ 0.1 * AccountBalance ()){
   Lots_New=Lots/ 2 ;
   }
   if (Bal == AccountBalance ()){
   Lots_New=Lots;
   }

Alert ("Lot new = ",Lots_New);
return (Lots_New);
}
Neden: