文章 "ZigZag(之字折线)的力量(第一部分)。 开发指标基类" - 页 8

 
 

第三个和第四个仍然无法编译。

 

GetZigZagData"--所有重载都不能应用于函数调用 TestZZZ_03.mq5 77 15

"Get ZigZag Data"(获取之字形数据) - 所有重载都不能应用于函数调用 test z_03.mq5 77 15

---------------------

可能是 2 个函数之一 TestZZZ_03.mq5 77 15

可能是 2 个函数之一 TestZZ_03.at MQL5 77 15

---------------------

void CZigZagModule::GetZigZagData(const int,int,int,const string,const ENUM_TIMEFRAMES,const datetime,const datetime) ZigZagModule.mqh 52 22

void CZigZagModule::GetZigZagData(const double&[],const double&[],const datetime&[]) ZigZagModule.mqh 51 22

______________

这就是说,编译器保证同一个函数是用不同的参数启动的。

 
Sergey Voytsekhovsky:

第三个和第四个仍然无法编译。

检查传输的参数。它们的数量或类型都不正确。这是调用 GetZigZagData 时的情况。

 
ZY:如果你不确定可以用不同的参数来处理一个函数,为什么还要用 C 语言编程?
 

感谢您的反馈。我还不知道如何检查参数,我正在学习编程。根据我的理解,在代码中,Expert Advisor 调用 GetZigZagData() 方法。

第一次使用参数 GetZigZagData(h_zz,l_zz,t_zz)、

第二次使用不同的参数 GetZigZagData(zz_handle_current,_Symbol,_Period,start_time_in,stop_time_in)。

包含文件中的两个选项

void CZigZagModule::GetZigZagData(const double &zz_h[],const double &zz_l[],const datetime &time[])
  {
   int h_total =::ArraySize(zz_h);
   int l_total =::ArraySize(zz_l);
   int total   =h_total+l_total;
//--- ZZ 变量清零
   ZeroZigZagData();
//--- 让我们循环查看复制的 ZZ 值
   for(int i=0; i<total; i++)
     {
      //--- 如果我们已经得到所需的 ZZ 最大值和最小值个数,则退出循环
      if(m_counter_highs==m_copy_extremums && m_counter_lows==m_copy_extremums)
         break;
      //--- 数组超限控制
      if(i>=h_total || i>=l_total)
         break;
      //-- 填充 maxima 数组,直到我们复制了所需数量的 maxima
      if(zz_h[i]>0 && m_counter_highs<m_copy_extremums)
        {
         m_zz_high[m_counter_highs]      =zz_h[i];
         m_zz_high_bar[m_counter_highs]  =i;
         m_zz_high_time[m_counter_highs] =time[i];
         //-- 增加最大值计数器
         m_counter_highs++;
        }
      //-- 填充最小值数组,直到复制到所需的数字为止
      if(zz_l[i]>0 && m_counter_lows<m_copy_extremums)
        {
         m_zz_low[m_counter_lows]      =zz_l[i];
         m_zz_low_bar[m_counter_lows]  =i;
         m_zz_low_time[m_counter_lows] =time[i];
         //--- 增加最小计数。
         m_counter_lows++;
        }
     }
//--- 确定价格变动方向
   m_direction=(m_zz_high_time[0]>m_zz_low_time[0])? 1 : -1;
  }
//+------------------------------------------------------------------+
//|| 从传递的句柄中获取 ZZ 数据
//+------------------------------------------------------------------+
void CZigZagModule::GetZigZagData(const int handle,int buffer_num_highs,int buffer_num_lows,
                                  const string symbol,const ENUM_TIMEFRAMES period,
                                  const datetime start_time,const datetime stop_time)
  {
//--- 获取初始数据
   int times_total =::CopyTime(symbol,period,start_time,stop_time,m_zz_time_temp);
   int highs_total =::CopyBuffer(handle,buffer_num_highs,start_time,stop_time,m_zz_highs_temp);
   int lows_total  =::CopyBuffer(handle,buffer_num_lows,start_time,stop_time,m_zz_lows_temp);
//--- 极值的最大数量
   int max_items =(int)::fmax((double)highs_total,(double)lows_total);
//--- 如果还不够,我们再试一次。
   if(times_total<max_items)
     {
      while(true)
        {
         ::Sleep(100);
         times_total=::CopyTime(symbol,period,start_time,stop_time,m_zz_time_temp);
         if(times_total>=max_items)
            break;
        }
     }
//--- 计数器
   int lows_counter  =0;
   int highs_counter =0;
//--- 计算最大值
   int h_total=::ArraySize(m_zz_highs_temp);
   for(int i=0; i<h_total; i++)
     {
      if(m_zz_highs_temp[i]>0)
         highs_counter++;
     }
//--- 计算最小值
   int l_total=::ArraySize(m_zz_lows_temp);
   for(int i=0; i<l_total; i++)
     {
      if(m_zz_lows_temp[i]>0)
         lows_counter++;
     }
//--- 获取极值个数
   int copy_extremums=(int)::fmin((double)highs_counter,(double)lows_counter);
   CopyExtremums(copy_extremums);
//--- 让我们循环查看复制的 ZZ 值
   GetZigZagData(m_zz_highs_temp,m_zz_lows_temp,m_zz_time_temp);
  }

一个接一个地写入。

我先是加载了旧的存档,然后又加载了新的存档,还删除了 MT5,从头开始安装了一个新的 MT5,但都无济于事,上面屏幕中的错误依然存在。

 
Алексей Тарабанов:
ZY:如果你不确定可以用不同的参数来处理一个函数,为什么还要用 C 语言编程?

我不太明白你的意思。我有很多选择,用什么编程呢?我有 MT5,用的是 MQL5,我正在试着学习它。

我认为一个函数可以用不同的参数访问,我甚至读到过这叫做重载。但我不明白如何处理它。此外,我确信这里根本不是作者的错误,很可能是我犯了错误,唯一的问题是 ????。

 
   CopyExtremums(copy_extremums);
//--- 让我们循环查看复制的 ZZ 值
   GetZigZagData(m_zz_highs_temp,m_zz_lows_temp,m_zz_time_temp);
我想就在这里。
 
谁能给我解释一下什么是重载?我不会用 C 语言编程。
 

我更改了包含文件中这些函数的名称,分别添加了数字 1 和 2。

我找到了 "智能交易系统 "中对它们的所有引用,并对其进行了编辑。旧的错误消失了,但新的错误又出现了。的确是数据类型出了问题。翻译如下

stop_time_in' - 无法转换枚举 TestZZ_03.mq5 77 78