新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 266

 
danil77783:

Artyom 下午好。我的名字是丹尼尔。我的问题是以下问题。我已经用MQL4写了我的专家顾问,更准确地说,是根据视频教程改写的。 显然,其中有一些错误,但它不会很好地编译。

编译器将显示错误,指定行和行中的位置。请参考它们

使用SRC按钮在你的信息文本上方插入程序的文本--看,它更好了!

//+------------------------------------------------------------------+
//|                                                        test7.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+

#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

你也可以附加一个文件--那么它就会立即在MetaEditor中显示。

 
LRA:

编译器将产生错误,指出该行和该行的位置。参照他们

使用你的信息文本上方的SRC按钮插入程序的文本--看,它更好了!!!。

你也可以附上一个文件--那么在MetaEditor中就会立即看到。


对不起,我的行为不正确,我接受纠正,我向你保证:)我已经筋疲力尽了,绝对....。

//+------------------------------------------------------------------+
//|                                                        test7.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//-------------------------------------------------------------------
extern double lots            = 0.1;
extern int    TakeProfit      = 300;
extern int    StopLoss        = 50;
extern int    Magic           = 777; 
extern int    Slippage        = 3;
//-------------------------------------------------------------------
extern string TMA             = "Параметры индикатора TMA";
extern string TimeFrame       = "current time frame";
extern int    HalfLength      = 56;
extern int    Price           = PRICE_CLOSE;
extern double ATRMultiplier   = 2.0;
extern int    ATRPeriod       = 100;
extern bool   Interpolate     = true;
//-------------------------------------------------------------------
double PriceHigh, PriceLow, SL ,TP;
int ticet;


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   if (Digits == 3 || Digits == 5);
   {
       TakeProfit *=10;
       StopLoss   *=10;
       Slippage   *=10;
   }  
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
    PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);  
    PriceLow  = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);  
    
    if (CountSell() == 0 && Bid >= PriceHigh)
    {
      tik et = OrderSend(Symbol(), OP_SELL, lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red);  
      if (tiket > 0)
      {
          SL = NormalizeDouble(Bid + StopLoss*Point, Digits);
          TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);
          
          if (OrderSelect(ticet, SELECT_BY_TICKET)) 
              OrderModify(tiket, OrderOpenPrice(), SL, TP, 0);
        }
    }
  }
//--------------------------------------------------------------------------------------------
 if (CountBuy() == 0 && Ask <= PriceLow)
    {
      tiket = OrderSend(Symbol(), OP_BUY, lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue);  
      if (tiket > 0)
      {
          TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);
          SL = NormalizeDouble(Ask - StopLoss*Point, Digits);
          
          if (OrderSelect(ticet, SELECT_BY_TICKET)) 
              OrderModify(tiket, OrderOpenPrice(), SL, TP, 0);
        }
    }
//+------------------------------------------------------------------+
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);
  }

我已经标记了有错误的行,文件.....,请看一下,提前谢谢你!

 
 
danil77783:

我为不正确的行为道歉,我会改正的,我向你保证:)我已经完全累了....。

我已经标出了有错误的行数,我附上了文件.....,请大家查一查,提前感谢!

看到ticet和tiket是不同的变量就这么难吗?

没有开放的小括号,你就不能看到封闭的小括号?

 
非常感谢你的帮助!!!....修正了所有的错误,其中有一个我搞不清楚。我请求你的帮助。我哪里又搞砸了?
 
danil77783:
非常感谢你的帮助!!!....修正了所有的错误,其中有一个我搞不清楚。我请求你的帮助。我哪里又搞砸了?
你把这个块从OnTick函数的 主体中拿出来,去掉一个大括号。
 
Alekseu Fedotov:
你把这个块从OnTick函数的 主体中拿出来,去掉一个括号。

然后会少了一个括号。

所选行上方的括号必须下移,在减号之前。

}
//+------------------------------------------------------------------+
 
Alexey Viktorov:

然后会少了一个括号。

高亮线上方的括号必须在减号前下移。

哦,是的,你应该。

 

一切都是!!!....非常感谢你。编纂了它。它是有效的!

 
danil77783: 一切都是!!!....非常感谢你。编纂了它。它是有效的!

有什么好处?另外,这里的这块空的功能也可以舍弃了。试试吧...

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   
  }