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

 
Rustam Bikbulatov :

보고 노력했습니다. 이미 많은 도움을 드렸지만 이해에 한계가 있습니다

따라서 주문 수가 필요하지 않고 로트의 볼륨이 필요합니까?

 //+------------------------------------------------------------------+
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 :

따라서 주문 수가 필요하지 않고 로트의 볼륨이 필요합니까?

 double fMarketOrdersOpenVolume( const ENUM_ORDER_TYPE order_type)
 
Konstantin Nikitin :

꺼져!!!!!! 나에게 무엇이 필요했어!!!!!! 전에는 이런 생각을 해본 적이 없었어요!!!!! 정말 감사합니다!!!!!

 
Konstantin Nikitin :

글쎄, 그래, 그들의 걱정에서 간과 된

 
도와주신 모든 분들께 감사드립니다!!! 그래도 대단하십니다!!!
 

그러나, 안녕하세요!

이 상황에 대해 알려주세요. TMA_Fair를 기반으로 계획대로 국경에서 열고 반대쪽 국경에서 닫지만 다른 국경에서는 닫히지 않습니다! 코드의 버그는 어디에 있습니까?

 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 :

그러나, 안녕하세요!

이 상황에 대해 알려주세요. TMA_Fair를 기반으로 계획대로 국경에서 열고 반대쪽 국경에서 닫지만 다른 국경에서는 닫히지 않습니다! 코드의 버그는 어디에 있습니까?

표시기를 주의 깊게 따라가면 10개 이상의 막대를 다시 그리는 것을 알 수 있습니다. 이것이 전체 이유입니다.

 
Alexey Viktorov :

표시기를 주의 깊게 따라가면 10개 이상의 막대를 다시 그리는 것을 알 수 있습니다. 이것이 전체 이유입니다.

에헤헤 젠장!! 계속 수정하겠습니다) 도와주셔서 감사합니다!!
 
MT-4에 피트 볼륨 발산 표시기가 있는지 알려주십시오.
 

안녕하세요! 도와주세요, 제발! 로트 수에 대한 컨트롤을 작성하려고 합니다. 내 계정이 +10% 이익이 되면 랏이 두 배로 늘어납니다. +20%이면 lot*4입니다. 계정이 감소하면 그에 따라 로트 크기도 감소합니다. 나는 Lot_New가 각각의 새로운 거래에 대해 새로운 가치를 갖도록 하는 방법을 이해하지 못합니다.

 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);
}