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

 
Alex Pirate :
안녕하세요! 무엇을 확인해야 하나요??? 수정 및 열기에 대한 경고를 제공합니다 ... 값을 반환하고 확인해야 합니다 ... 어떻게 ??? EA는 무작위로 주문을 엽니다... (((
 extern string MMM          = "MMM" ;
extern double Lot          = 0.1 ;
extern int     TakeProfit   = 50 ;
extern int     StopLoss     = 20 ;
extern int     Slippage     = 3 ;
extern int     Magic        = 888 ;
// Moving Average 1
extern string Indi_MA1        = "MA1" ;
extern int     MA1_Period   = 22 ;
extern int     MA1_Shift    = 0 ;
extern int     MA1_Method   = 0 ;
extern int     MA1_Price    = 0 ;
// Moving Average 2
extern string Indi_MA2        = "MA2" ;
extern int     MA2_Period   = 55 ;
extern int     MA2_Shift    = 0 ;
extern int     MA2_Method   = 0 ;
extern int     MA2_Price    = 0 ;
//+------------------------------------------------------------------+
double MA1,MA2,SL,TP;
int ticket;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
     if ( Digits == 3 || Digits == 5 )
    {
      TakeProfit = TakeProfit * 10 ;
      StopLoss = StopLoss     * 10 ;
      Slippage = Slippage     * 10 ;
    }
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
 return ( 0 );
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick () 
 {           
    MA1 = iMA ( Symbol (), 0 ,MA1_Period,MA1_Shift,MA1_Method,MA1_Price, 0 );
    MA2 = iMA ( Symbol (), 0 ,MA2_Period,MA2_Shift,MA2_Method,MA2_Price, 0 );
    
     if ( Ask >= MA1 && MA1 >= MA2 && CountBuy() == 0 )
    {
       SL = NormalizeDouble ( Ask - StopLoss   * Point , Digits );
       TP = NormalizeDouble ( Ask + TakeProfit * Point , Digits );
       ticket = OrderSend ( Symbol (), OP_BUY ,Lot, Ask ,Slippage, 0 , 0 , "" ,Magic, 0 ,Green);
       if (ticket > 0 )
       { 
         if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ) == true )
             if ( ! OrderModify (ticket, OrderOpenPrice (),SL,TP, 0 ) )   return ;

       }      
        
     if ( Bid <= MA1 && MA1 <= MA2 && CountSell() == 0 ) 
    
       SL = NormalizeDouble ( Bid + StopLoss   * Point , Digits );
       TP = NormalizeDouble ( Bid - TakeProfit * Point , Digits );
       ticket = OrderSend ( Symbol (), OP_SELL ,Lot, Bid ,Slippage, 0 , 0 , "" ,Magic, 0 ,Red);
       if (ticket > 0 )
       { 
         if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ) == true )
             if ( !OrderModify (ticket, OrderOpenPrice (),SL,TP, 0 ) ) return ;

       }                
    }
 }
//+------------------------------------------------------------------+
int CountBuy()
{
   int count = 0 ; 
   for ( int trade = OrdersTotal () - 1 ; trade >= 0 ; trade--)
   {
       if ( ! OrderSelect (trade, SELECT_BY_POS , MODE_TRADES ) ) continue ;
       if ( OrderSymbol () == Symbol () && OrderMagicNumber () ==  Magic)
      {
         if ( OrderType () == OP_BUY )
        count++; 
      } 
   }
   return (count);
}
//+------------------------------------------------------------------+
int CountSell()
{
   int count = 0 ;
   for ( int trade = OrdersTotal () - 1 ; trade >= 0 ; trade--)
   {
       if ( ! OrderSelect (trade, SELECT_BY_POS , MODE_TRADES ) ) continue ;
       if ( OrderSymbol () == Symbol () && OrderMagicNumber () ==  Magic) 
      {
         if ( OrderType () == OP_SELL )
        count++; 
      }
   }
   return (count);
}
//+------------------------------------------------------------------+
 
Konstantin Nikitin :

감사해요!!! 나는 노력할 것이다

 
오류가 사라졌습니다... 하지만 어떤 이유로 주문을 열고 모든 것을 업그레이드하지 않습니다. 내가 어디서 망했어...
 
Alex Pirate :
오류가 사라졌습니다... 하지만 어떤 이유로 주문을 열고 모든 것을 업그레이드하지 않습니다. 내가 어디서 망했어...

코드를 이해하지 못했습니다. 따라서 전문가는 귀하의 것이며 카드는 귀하의 손에 있습니다.

 
Konstantin Nikitin :

코드를 이해하지 못했습니다. 따라서 전문가는 귀하의 것이며 카드는 귀하의 손에 있습니다.

이해 .. 어쨌든 감사합니다

 
Maxim Kuznetsov :

이것은 전역 터미널 변수를 통해 수행할 수 있습니다. 표시기의 소스 코드가 있고 편집할 수 있는 경우에 한합니다.

즉, 지시자는 extern이 아니라 GlobalVariableGet()을 호출 하여 매개변수를 수신하여 계산을 수행합니다. 그리고 그에 따라 어드바이저는 GlobalVariableSet을 통해 이 변수를 변경할 것입니다.

감사합니다, Maxim. 적어도 이제 어디서부터 시작해야 할지 알았습니다.
 
부모 클래스의 가상 메서드를 호출하는 방법은 무엇입니까?
 
극한값의 값을 알 수 있는 지그재그 표시기가 있는데 극값에서 미래(다음날)로 추세선을 그려야 하는데 좌표도 모르고 어떻게 두 번째 지점과 첫 번째 지점의 시간 값은?
 
Vladimir Pastushak :
부모 클래스의 가상 메서드를 호출하는 방법은 무엇입니까?

가상 메서드는 설명만 있기 때문에 가상이고 각 클래스에 본문이 별도로 작성됩니다.

작업이 단순히 부모 클래스에서 메서드를 호출하는 것인 경우(즉, 메서드에 이미 본문이 있음) 상속을 통해 해당 메서드를 일반 메서드로 사용할 수 있습니다. 소스를 살펴봐야 합니다.

 
Igor Makanu :

가상 메서드는 설명만 있기 때문에 가상이고 각 클래스에 본문이 별도로 작성됩니다.

작업이 단순히 부모 클래스에서 메서드를 호출하는 것인 경우(즉, 메서드에 이미 본문이 있음) 상속을 통해 해당 메서드를 일반 메서드로 사용할 수 있습니다. 소스를 살펴봐야 합니다.

덕분에. 부모 클래스 메서드를 호출할 수 없습니다.

내가 기억하는 한 이것은 parent :: 메소드를 통해 수행됩니다.