新人对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改变这个变量。

谢谢,马克西姆,至少现在我知道该从哪里开始。
 
如何调用一个父类的虚拟方法?
 
有一个人字形指标显示了一个极值的价格值,我需要从极值到未来(第二天)画一条趋势线,在不知道第二个点的坐标和第一个点的时间值的情况下,我怎样才能做到呢?
 
Vladimir Pastushak:
如何调用父类的虚拟方法?

一个虚拟方法之所以是虚拟方法,是因为它只有一个描述,而主体是分别写在每个类中的。

不过,如果你的任务只是从父类中调用一个方法(即方法已经有了主体),那么通过继承,它(该方法)将可以作为一个普通的方法使用--见源代码

 
Igor Makanu:

一个虚拟方法之所以是虚拟方法,是因为它只有一个描述,而主体是分别写在每个类中的。

不过,如果你的任务只是从父类中调用一个方法(即方法已经有了主体),那么通过继承,它(该方法)将可以作为一个普通的方法使用--源代码应该可以看到

谢谢你。我不能让一个父类方法被调用。

在我的记忆中,它是通过父母::方法完成的。

原因: