初学者的问题 MQL5 MT5 MetaTrader 5 - 页 205

 
torblin:
大家好,看来这个帖子不是给新手提问的,哦,天哪,请问用dp200什么顾问会有效果?
任何一个人实际上都是如此。
 

亲爱的先生们,我要求对 "第一号尝试 "有一个经验丰富的眼睛。主题是:我通过 "穿越 "用MQL5编写的分形指标 和azzx_larry-2.0指标获得了一个代码,其本质是在搜索极值时排除所谓的 "内部条"(附后)。编译时,我们得到了四个错误,都是在借自azx写在 "4 "中的那部分代码。在解释 "错误 "时出现了问题。

1.为什么建议将for语句(在代码中的位置--下划线)放在Global中。('for' - 表达式在全局范围内是不允许的)。


2.为什么编译器认为High[bar]和Low[bar](代码中也有下划线)是未声明的,而在代码的上面几行有High[i]和Low[i],它不认为是错误的。

('高'-未宣布的标识符,'低'-未宣布的标识符)。


3.limit也是如此--为什么编译器认为它是未声明的。('limit'-未声明的标识符)。

PS:部分代码(分形指标)来自mql5文档,部分代码来自azzx_larry2.0指标,来自mql4代码库,作者azzx


//+------------------------------------------------------------------+
//|                                                     azzx 2.0.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
#property  indicator_type1   DRAW_ARROW
#property  indicator_type2   DRAW_ARROW
#property  indicator_color1  White
#property  indicator_color2  White
#property  indicator_label1  "azzx Up"
#property  indicator_label2  "azzx Down"
//---- indicator buffers
double max[];
double min[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//---- indicator buffers mapping
   SetIndexBuffer(0,max,INDICATOR_DATA);
   SetIndexBuffer(1,min,INDICATOR_DATA);
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_ARROW,108);
   PlotIndexSetInteger(1,PLOT_ARROW,108);
//---- arrow shifts when drawing
   PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,0);
   PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,0);
//---- sets drawing line empty value--
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- initialization done
  }
//+------------------------------------------------------------------+
//|  Accelerator/Decelerator Oscillator                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,const int prev_calculated,
                const datetime &Time[],
                const double &Open[],
                const double &High[],
                const double &Low[],
                const double &Close[],
                const long &TickVolume[],
                const long &Volume[],
                const int &Spread[])
  {
   int i,limit;
//---
   if(rates_total<3)
      return(0);
//---
   if(prev_calculated<3)
     {
      limit=1;
      //--- clean up arrays
      ArrayInitialize(max,EMPTY_VALUE);
      ArrayInitialize(min,EMPTY_VALUE);
     }
   else limit=rates_total-1;

   for(i=limit;i<rates_total-1 && !IsStopped();i++)
     {
      //---- Up azzx
      if(High[i]>High[i+1] && High[i]>=High[i-1])
         max[i]=High[i];
      else max[i]=EMPTY_VALUE;

      //---- Low azzx
      if(Low[i]<Low[i+1] && Low[i]<=Low[i-1])
         min[i]=Low[i];
      else min[i]=EMPTY_VALUE;
     }
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }

//+------------------------------------------------------------------+

  // Поиск краткосрочных экстремумов.
  for(i=limit-2;i>1;i--) 
   {
    l = left_bar(i);
    r = right_bar(i);
    
    if((l>0) && (r>0)) 
      {
      if(((Low[l]>=Low[i]) && (Low[r]>Low[i])) ||
         ((Low[l]>Low[i]) && (Low[r]>Low[i]))) 
      {
        min[i] =1;
      }
    }
 
    if((l>0) && (r>0)) 
      {
      if(((High[l]<= High[i]) && (High[r]<High[i])) ||
         ((High[l]<High[i]) && (High[r]<High[i]))) 
      {
        max[i] =1;
      }
    }

  // Отметка экстремумов.
  ArrayInitialize(buf_st_min,0);
  ArrayInitialize(buf_st_max,0);

  
  for(i=limit-1;i>0;i--) 
  {
    switch(min[i]) 
    {
      case 1 : buf_st_min[i]=Low[i]; break;
    }
 
    switch(max[i]) 
    {
      case 1 : buf_st_max[i]=High[i]; break;
    }
  }
  
  return(0);
}
 
// Проверка, что заданный бар - внутренний.
bool is_internal(int bar) 
{
  return((High[bar] < High[bar + 1]) && 
         (Low [bar] > Low [bar + 1]));
}
 
// Возвращает бар слева от заданного бара или -1.
int left_bar(int bar) 
    {
  int i;
  
  for(i=bar+1;i<limit-2;i++) 
{
    if(is_internal(i)==false) 
{
      return(i);
    }
  }
  
  return(-1);
}
 
// Возвращает бар справа от заданного бара или -1.
int right_bar(int bar) {
  int i;
  
  for(i=bar-1;i>0;i--) 
{
    if(is_internal(i)==false) 
{
      return(i);
    }
  }
  
  return(-1);
}
//+------------------------------------------------------------------+
//| Indicator deinitialization function                              |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- почистим график при удалении индикатора
   Comment("");
  }
我认为代码上面有High[i]和Low[i]几行,他认为这不是错误。3.同样关于极限--为什么编译器认为它是未声明的
 

Reshetov:
А робот случаем не из Маркета?
только один.  что там продается - ужас. хотя наверное все они такие
 
beginner_mql:

在代码中存在High[i]和Low[i],它不会被算作错误。3.limit也是如此--为什么编译器认为它是未声明的?

你这里有一个提前关闭的大括号。

   return(rates_total);
  }

//+------------------------------------------------------------------+

  // Поиск краткосрочных экстремумов.
  for(i=limit-2;i>1;i--) 

或者有几行被遗漏了,因为它们没有被声明。

    l = left_bar(i);
    r = right_bar(i);
 
vicmos:

你这里有一个提前关闭的大括号。

或者因为没有公布,所以少了几行

谢谢你的参与。括号被移到了代码的末尾,编译时出现了16个错误--需要努力解决。

 
大家好,你能告诉使用G. Stanilevich的ITrade Chaos软件产品的论坛用户吗?我非常喜欢它,但有一些事情我不明白。如果你不介意,谁在使用或曾经使用过这个产品,请通过Skype与我联系。我的skype是Furkat1962,提前感谢。真诚的Furkat
 
torblin:
我不认为这个帖子是为初学者准备的,所以你为什么不告诉我在哪里可以问一个拥有200dpa的新手,顾问会做什么?
你不想明白,外汇不是免费的交易,但它和其他交易的工作是一样的,只是当你投入工作的时候,回报率会更高!这就是为什么你的工作是免费的。
 
我已经从EA中添加了一个指标到图表中,现在如何给这个指标着色?该指标使用3条线,我想让它们都有3种不同的颜色和厚度。
 
YAndrey:
我已经从EA中添加了一个指标到图表中,现在如何给这个指标着色?该指标使用3条线,我想让它们都有3种不同的颜色和厚度。
你可以在显示器上使用毡尖笔)。
 
zfs:
你可以在显示器上使用毡尖笔)。
是的,你可以这样做。但我不愿意这样做。而且我想听听聪明人的意见;)。我已经找到了一个办法,创建了一个自定义指标,其输入参数为每行的颜色形式,但我怎样才能使其更简单?因此,再次提出一个问题。我正在我的专家顾问中创建一个iBands指标。我把它附在图表上。我想用不同的颜色来画它的3条线。这有可能吗?