文章 "ZigZag(之字折线)的力量(第一部分)。 开发指标基类" - 页 7 123456789 新评论 Anatoli Kazharski 2019.02.03 20:37 #61 Sergey Voytsekhovsky:下载新存档,尝试编译 TestZZ_03.mq5结果还是一样。出错,两次引用同一个函数,但参数不同。显示CZigZagModule::GetZigZagData() 方法的代码,其中应传递缓冲区编号。 Sergey Voytsekhovsky 2019.02.03 20:38 #62 TestZZZ_03 和 TestZZZ_04 没有出现在加载的 EA 中,因此 TestZZ_04 也没有被编译。 Sergey Voytsekhovsky 2019.02.03 20:39 #63 Anatoli Kazharski:显示CZigZagModule::GetZigZagData() 方法的代码,其中需要传递缓冲区编号。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;//-- 填充最大值数组,直到复制到所需的数量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++;}} Discussion of article "The ZigZag(之字折线)的力量(第一部分)。 开发指标基类 [解决]当从不同工作时间段的指标中调用/创建指标时,指标不能正确实例化。 Anatoli Kazharski 2019.02.03 20:39 #64 Sergey Voytsekhovsky: TestZZ_03 和 TestZZ_04 没有出现在上传的智能交易系统中,因此 TestZZ_04 也没有编译。那就试着找出它们不出现的原因。我再次查看了存档。所有测试都在这里。 Sergey Voytsekhovsky 2019.02.03 20:41 #65 Anatoli Kazharski:显示需要传递缓冲区编号的CZigZagModule::GetZigZagData() 方法的代码。void CZigZagModule::GetZigZagData(const int handle,int buffer_num_highs,int buffer_num_lows、const string symbol,const ENUM_TIMEFRAMESperiod、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,2,0,times_total,m_zz_highs_temp);int lows_total =::CopyBuffer(handle,3,0,times_total,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);} Discussion of article "The 新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 文章 "如何采用 MQL5 创建用于 Anatoli Kazharski 2019.02.03 20:41 #66 Sergey Voytsekhovsky:...正确插入代码: //--- 这是错误的方法。这是有参数列表的方法: //+------------------------------------------------------------------+ //|| 从传递的句柄中获取 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) Sergey Voytsekhovsky 2019.02.03 20:42 #67 这两种方法都写在一个内联文件中。 第一页 217. 第二页 258 Anatoli Kazharski 2019.02.03 20:43 #68 Sergey Voytsekhovsky:...你没有替换文件。全部删除。然后从最后一个压缩包重新下载:https://www.mql5.com/ru/forum/299970/page6#comment_10495849 Обсуждение статьи "ZigZag всему голова (Часть I). Разработка базового класса индикатора" 2019.02.03www.mql5.com Опубликована статья ZigZag всему голова (Часть I). Разработка базового класса индикатора: Автор: Anatoli Kazharski... Sergey Voytsekhovsky 2019.02.03 21:05 #69 .... 还是我删得太多了? Sergey Voytsekhovsky 2019.02.03 21:11 #70 如果我从电脑上删除 MT5 并安装新的 MT5,我需要下载什么?旧存档和新存档?还是只下载一个新的?我对存档完全不明白。旧的存档有 1 和 2 选项,但不正确。新的什么也没放,应该能正常工作,但显然不够。请原谅我不懂文件,但我找不到 MT5 中哪些文件负责什么的正常解释或说明。 123456789 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
下载新存档,尝试编译 TestZZ_03.mq5
结果还是一样。出错,两次引用同一个函数,但参数不同。
显示CZigZagModule::GetZigZagData() 方法的代码,其中应传递缓冲区编号。
显示CZigZagModule::GetZigZagData() 方法的代码,其中需要传递缓冲区编号。
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;
//-- 填充最大值数组,直到复制到所需的数量
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++;
}
}
TestZZ_03 和 TestZZ_04 没有出现在上传的智能交易系统中,因此 TestZZ_04 也没有编译。
那就试着找出它们不出现的原因。我再次查看了存档。所有测试都在这里。
显示需要传递缓冲区编号的CZigZagModule::GetZigZagData() 方法的代码。
void CZigZagModule::GetZigZagData(const int handle,int buffer_num_highs,int buffer_num_lows、
const string symbol,const ENUM_TIMEFRAMESperiod、
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,2,0,times_total,m_zz_highs_temp);
int lows_total =::CopyBuffer(handle,3,0,times_total,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);
}
...
正确插入代码:
//---
这是错误的方法。这是有参数列表的方法:
这两种方法都写在一个内联文件中。
第一页 217.
第二页 258
...
你没有替换文件。全部删除。然后从最后一个压缩包重新下载:https://www.mql5.com/ru/forum/299970/page6#comment_10495849