文章 "跨平台的EA交易: 信号" - 页 3 123 新评论 Enrico Lambino 2018.04.02 08:23 #21 Karl Klang:你好,恩里科、我现在找到了一种处理计算功能的方法,其中包括滞后功能,当 MA 和 TEMA 指标交叉时,该功能似乎可以起作用。但是,我在订单管理器中遇到了一个问题。在优化过程中,当我运行策略测试器进行一些循环时,就会出现这个问题。最初的循环运行正常,但循环几次后,每根蜡烛线都会下单。这里运行正常:但在这里,订单管理器开始下多个订单:当我调试 COrderManager 的以下代码部分时,语句 orders_total = OrdersTotal(); 工作时变为 1,但失败时变为 0,这导致 if 条件 m_max_order>orders_total 始终评估为 true。希望您能帮助解决这个问题。最诚挚的问候/ 卡尔你好,卡尔、 我以前从未遇到过这个问题。OrdersTotal() 方法只是计算活动订单对象的数量。如果编码策略有问题,就必须纠正。如果没有,那么一定是在如何管理(创建/销毁)和/或如何计算 COrder 实例方面出了问题。一旦发现这个问题,我会立即通知你。 Karl Klang 2018.04.02 11:34 #22 你好,恩里科、 谷歌搜索 mt5 OrdersTotal() 问题,发现其他人也有同样的问题。例如策略测试器,也许能重现同样的问题。专家集也已上传,因此您可以使用与我相同的输入运行策略测试器。 致以最诚挚的问候/ 卡尔 How to use the OrdersTotal() correctly? 2010.09.09www.mql5.com I tried many times to check OrdersTotal(), but I found it did not work... 附加的文件: expert_trail_tema1.mq5 1 kb expert_trail_tema1b.mqh 15 kb expert_trail_tema1b.set 5 kb Enrico Lambino 2018.04.02 16:30 #23 Karl Klang:你好,恩里科、谷歌搜索 mt5 OrdersTotal() 问题,发现其他人也有同样的问题。例如策略测试器,也许能重现同样的问题。专家集也已上传,因此您可以使用与我相同的输入运行策略测试器。最诚挚的问候/ 卡尔感谢您提供的文件,卡尔。我遇到了你描述的问题。 在主包含文件中,将以下内容(OnInit): file.Open(savefile,FILE_READ); if(!experts.Load(file.Handle())) return(INIT_FAILED); file.Close();改为 #ifdef __MQL5__ if (!(MQLInfoInteger(MQL_TESTER) || MQLInfoInteger(MQL_OPTIMIZATION))) #else if (!(IsTesting() || IsOptimization())) #endif { file.Open(savefile,FILE_READ); if(!experts.Load(file.Handle())) return(INIT_FAILED); file.Close(); } 和 this (OnDeinit): file.Open(savefile,FILE_WRITE); experts.OnDeinit(reason,file.Handle()); file.Close(); 改为 this: #ifdef __MQL5__ if (!(MQLInfoInteger(MQL_TESTER) || MQLInfoInteger(MQL_OPTIMIZATION))) #else if (!(IsTesting() || IsOptimization())) #endif { file.Open(savefile,FILE_WRITE); experts.OnDeinit(reason,file.Handle()); file.Close(); } 由于某种原因,以前会话中保存的数据会被重新加载到以后的会话中。这就是为什么只有在初始回溯测试后才会出现问题,有时还会出现内存泄漏。根据我的测试,这个问题似乎只存在于净额结算模式,而不存在于 MT4 或 MT5 对冲模式。但如果您继续遇到这个问题,请告诉我。上述代码可防止在回溯测试和优化过程中加载和保存数据(我在写最后一篇文章时忽略了这一点)。 Enrico Lambino 2018.04.02 16:40 #24 另外,关于 MT5 中的 OrdersTotal(),它只计算挂单(不等同于 MT4 的 OrdersTotal)。TradeOpen 中订单管理器的代码使用了类的 OrdersTotal() 方法: bool COrderManager::TradeOpen(const string symbol,ENUM_ORDER_TYPE type,double price,bool in_points=true) { bool ret=false; double lotsize=0.0; int trades_total =TradesTotal(); int orders_total = OrdersTotal(); 中的代码使用了 OrdersTotal() 方法,该方法只是 COrders 方法(同名)的封装。COrders 扩展了 CArrayObj,因此它并没有真正使用 MT5 本地OrdersTotal() 函数。上述方法也等同于使用: int orders_total = this.OrdersTotal(); 另一方面,如果我们使用 int orders_total = ::OrdersTotal(); 则会明确调用 MT5 本地函数。您可能已经对此有所了解,但为了以防万一,还是要为遇到类似问题的其他人提供帮助。 Karl Klang 2018.04.02 20:43 #25 谢谢你,恩里科。问题消失了。 /卡尔 fxsaber 2018.04.03 06:26 #26 Enrico Lambino: #ifdef __MQL5__ if (!(MQLInfoInteger(MQL_TESTER) || MQLInfoInteger(MQL_OPTIMIZATION))) // MQL4 代码,而不仅仅是 MQL5。 #else if (!(IsTesting() || IsOptimization())) #endif MQLInfoInteger(MQL_TESTER) || MQLInfoInteger(MQL_OPTIMIZATION) == MQLInfoInteger(MQL_TESTER) Enrico Lambino 2018.04.03 11:20 #27 fxsaber: 我明白了。是的,你说得对。 Karl Klang 2019.08.07 09:24 #28 你好,恩里科、 在 Github 的 iceron/MQLx 中,有关于 m_new_signal 和 m_new_signal_close 的更改通知。 m_signal_new 可以通过 void CSignalsBase::NewSignal(const bool value) 方法更改,但没有可用的方法来更改 m_new_signal_close。 请详细说明 m_new_signal 和 m_new_signal_close 的用法。 if(m_invert) { CSignal::SignalInvert(m_signal_open); CSignal::SignalInvert(m_signal_close); } if(m_new_signal) { if(m_signal_open==m_signal_open_last) m_signal_open = CMD_NEUTRAL; } if(m_new_signal_close) { if(m_signal_close==m_signal_close_last) m_signal_close = CMD_NEUTRAL; } 致以最诚挚的问候 卡尔 iceron - Overview github.com Sign up for your own profile on GitHub, the best place to host code, manage projects, and build software alongside 36 million developers. Sign up smatt2008 2020.08.01 04:35 #29 这些方法是否适用于您的 MT5Bridge? BahramPrv 2020.08.30 04:31 #30 各位大师,你们好! 我在理解以下属于 SignalAC 类的 Mql 信号代码中的 "蜡烛计数"(第一、第二、第三 = idx,idx++,......)时遇到了严重问题。 有没有人可以帮助我在向下移动 代码时穿透 idx 数字? 在此先表示感谢。 //+------------------------------------------------------------------+ //| "投票 "认为价格会增长。| //+------------------------------------------------------------------+ int CSignalAC::LongCondition(void) { int result=0; int idx =StartIndex(); //--- if the first analyzed bar is "red", don't "vote" for buying if(DiffAC(idx++)<0.0) return(result); //----第一个分析柱为 "绿色"(指标不反对买入) if(IS_PATTERN_USAGE(0)) result=m_pattern_0; //--- 如果第二个分析柱为 "红色",则不具备买入条件 if(DiffAC(idx)<0.0) return(result); //--- 第二根分析柱为 "绿色"(可能满足买入条件) //--- 如果分析的第二个条形图小于零,我们需要分析第三个条形图 if(AC(idx++)<0.0) { //--- 如果第三个分析柱为 "红色",则不具备买入条件 if(DiffAC(idx++)<0.0) return(result); } //--- 购买有条件 if(IS_PATTERN_USAGE(1)) result=m_pattern_1; //--- 如果之前分析的条形图为 "红色",则买入条件刚刚满足 if(IS_PATTERN_USAGE(2) && DiffAC(idx)<0.0) result=m_pattern_2; //--- 返回结果 return(result); } 123 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你好,恩里科、
我现在找到了一种处理计算功能的方法,其中包括滞后功能,当 MA 和 TEMA 指标交叉时,该功能似乎可以起作用。
但是,我在订单管理器中遇到了一个问题。在优化过程中,当我运行策略测试器进行一些循环时,就会出现这个问题。最初的循环运行正常,但循环几次后,每根蜡烛线都会下单。
这里运行正常:
但在这里,订单管理器开始下多个订单:
当我调试 COrderManager 的以下代码部分时,语句 orders_total = OrdersTotal(); 工作时变为 1,但失败时变为 0,这导致 if 条件 m_max_order>orders_total 始终评估为 true。
希望您能帮助解决这个问题。
最诚挚的问候/
卡尔
你好,卡尔、
我以前从未遇到过这个问题。OrdersTotal() 方法只是计算活动订单对象的数量。如果编码策略有问题,就必须纠正。如果没有,那么一定是在如何管理(创建/销毁)和/或如何计算 COrder 实例方面出了问题。一旦发现这个问题,我会立即通知你。
你好,恩里科、
谷歌搜索 mt5 OrdersTotal() 问题,发现其他人也有同样的问题。例如策略测试器,也许能重现同样的问题。专家集也已上传,因此您可以使用与我相同的输入运行策略测试器。
致以最诚挚的问候/
卡尔
你好,恩里科、
谷歌搜索 mt5 OrdersTotal() 问题,发现其他人也有同样的问题。例如策略测试器,也许能重现同样的问题。专家集也已上传,因此您可以使用与我相同的输入运行策略测试器。
最诚挚的问候/
卡尔
感谢您提供的文件,卡尔。我遇到了你描述的问题。
在主包含文件中,将以下内容(OnInit):
改为
和 this (OnDeinit):
改为 this:
由于某种原因,以前会话中保存的数据会被重新加载到以后的会话中。这就是为什么只有在初始回溯测试后才会出现问题,有时还会出现内存泄漏。根据我的测试,这个问题似乎只存在于净额结算模式,而不存在于 MT4 或 MT5 对冲模式。但如果您继续遇到这个问题,请告诉我。上述代码可防止在回溯测试和优化过程中加载和保存数据(我在写最后一篇文章时忽略了这一点)。
另外,关于 MT5 中的 OrdersTotal(),它只计算挂单(不等同于 MT4 的 OrdersTotal)。TradeOpen 中订单管理器的代码使用了类的 OrdersTotal() 方法:
中的代码使用了 OrdersTotal() 方法,该方法只是 COrders 方法(同名)的封装。COrders 扩展了 CArrayObj,因此它并没有真正使用 MT5 本地OrdersTotal() 函数。上述方法也等同于使用:
另一方面,如果我们使用
则会明确调用 MT5 本地函数。您可能已经对此有所了解,但为了以防万一,还是要为遇到类似问题的其他人提供帮助。
谢谢你,恩里科。问题消失了。
/卡尔
你好,恩里科、
在 Github 的 iceron/MQLx 中,有关于 m_new_signal 和 m_new_signal_close 的更改通知。
m_signal_new 可以通过 void CSignalsBase::NewSignal(const bool value) 方法更改,但没有可用的方法来更改 m_new_signal_close。
请详细说明 m_new_signal 和 m_new_signal_close 的用法。
致以最诚挚的问候
卡尔
这些方法是否适用于您的 MT5Bridge?
各位大师,你们好!
我在理解以下属于 SignalAC 类的 Mql 信号代码中的 "蜡烛计数"(第一、第二、第三 = idx,idx++,......)时遇到了严重问题。
有没有人可以帮助我在向下移动 代码时穿透 idx 数字?
在此先表示感谢。