文章 "在 EA 交易代码中实现指标的计算" - 页 4 1234 新评论 Dmitriy Gizlyk 2022.09.05 14:48 #31 Aleksey Vyazmikin #: 我不太明白文章中的问题,类指标是否具有防止缺失条形图的功能?例如,连接中断了 5 个条形图,然后加载了历史数据,那么该类指标将只重新填充缓冲区中的最后一个值,还是进行全面重新计算? 如果查看标准指标类,更新数据时会使用 CopyBuffer 函数。也就是说,它会从终端历史记录中填充整个缓冲区,而不是其中的一部分。 bool CIndicatorBuffer::Refresh(const int handle,const int num) { //--- 检查 if(handle==INVALID_HANDLE) { SetUserError(ERR_USER_INVALID_HANDLE); return(false); } //--- m_data_total=CopyBuffer(handle,num,-m_offset,m_size,m_data); //--- return(m_data_total>0); } Aleksey Vyazmikin 2022.09.05 14:53 #32 Dmitriy Gizlyk #:在标准指标类中,更新数据时会使用 CopyBuffer 函数。也就是说,它会从终端历史记录中填充整个缓冲区,而不是其中的一部分。 那么在每个新的条形图中都要重新计算整个历史数据吗? 这样成本是不是太高了?为什么不确定上次计算的日期,然后复制这段时间的数据呢? Dmitriy Gizlyk 2022.09.05 16:18 #33 Aleksey Vyazmikin #:在每一个新的条形图上重新计算整个故事?这样成本是不是太高了?为什么不确定上次计算的日期,然后复制这个特定时间段的数据呢? 在文章中,指标是通过 "计算 "方法计算的。在这里,我们首先确定上次重新计算的条数,然后才重新计算剩余部分。 cur_date - 当前时间; m_last_calculate - 最后一次重新计算的时间。 bool CMA::Calculate(void) { datetime cur_date=(datetime)SeriesInfoInteger(m_Symbol,m_Timeframe,SERIES_LASTBAR_DATE); if(m_last_calculate==cur_date && ArraySize(m_source_data)==m_history_len) return true; //--- if(!LoadHistory()) return false; //--- int shift=Bars(m_Symbol,m_Timeframe,m_last_calculate,cur_date)-1; Aleksey Vyazmikin 2022.09.05 22:35 #34 Dmitriy Gizlyk #: 在文章中,指标是用计算方法计算的。在这里,我们首先确定上次重新计算的条数,然后才重新计算剩余部分。 cur_date - 当前时间; m_last_calculate - 最后一次重新计算的时间。 感谢您的说明! Mehrdad Sarrafi 2024.04.28 10:54 #35 非常感谢 非常好的概念,但是如果我想写一个具有多个价格(高价、低价、收盘价、开盘价)的价格行动指标,根据高低差计算指标值,就会遇到只有一个数据数组(CIndicator 类中的 m_source_data)的问题,是否有办法解决这个问题,或者您是否建议修改 CIndicator 类,使 m_source_data 成为一个数组(mqlRates 或 CArrayBuffer,......)? Dmitriy Gizlyk 2024.04.28 14:48 #36 Mehrdad Sarrafi 计算指标值,就会遇到只有一个数据数组(CIndicator 类中的 m_source_data)的问题,是否有办法解决这个问题,或者您是否建议修改 CIndicator 类,使 m_source_data 成为一个数组(mqlRates 或 CArrayBuffer,......)? 是的,您可以修改 CIndicator,将 m_source_data 创建为 MqlRates 数组。我推荐使用 MqlRates,因为使用其他方式时,您需要执行一些操作来同步不同数组中的数据。 1234 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我不太明白文章中的问题,类指标是否具有防止缺失条形图的功能?例如,连接中断了 5 个条形图,然后加载了历史数据,那么该类指标将只重新填充缓冲区中的最后一个值,还是进行全面重新计算?
如果查看标准指标类,更新数据时会使用 CopyBuffer 函数。也就是说,它会从终端历史记录中填充整个缓冲区,而不是其中的一部分。
在标准指标类中,更新数据时会使用 CopyBuffer 函数。也就是说,它会从终端历史记录中填充整个缓冲区,而不是其中的一部分。
那么在每个新的条形图中都要重新计算整个历史数据吗?
这样成本是不是太高了?为什么不确定上次计算的日期,然后复制这段时间的数据呢?
在每一个新的条形图上重新计算整个故事?
这样成本是不是太高了?为什么不确定上次计算的日期,然后复制这个特定时间段的数据呢?
在文章中,指标是通过 "计算 "方法计算的。在这里,我们首先确定上次重新计算的条数,然后才重新计算剩余部分。
在文章中,指标是用计算方法计算的。在这里,我们首先确定上次重新计算的条数,然后才重新计算剩余部分。
感谢您的说明!
非常感谢
非常好的概念,但是如果我想写一个具有多个价格(高价、低价、收盘价、开盘价)的价格行动指标,根据高低差计算指标值,就会遇到只有一个数据数组(CIndicator 类中的 m_source_data)的问题,是否有办法解决这个问题,或者您是否建议修改 CIndicator 类,使 m_source_data 成为一个数组(mqlRates 或 CArrayBuffer,......)?
是的,您可以修改 CIndicator,将 m_source_data 创建为 MqlRates 数组。我推荐使用 MqlRates,因为使用其他方式时,您需要执行一些操作来同步不同数组中的数据。