文章 "通用智能交易系统:事件模型和交易策略原型(第二章)" - 页 4 12345 新评论 Гога 2016.07.05 09:40 #31 Andrey Khatimlianskii: 至少要分析一下价格。也许你根本不需要入场。 是的,有这样一种机制。如果不是在交易订单 中,那应该在哪里建立呢?如何将这种机制正规化,什么样的剧烈波动才是关键? Andrey Khatimlianskii 2016.07.05 12:41 #32 Гога: 是的,有这样一种机制。如果不在贸易订单 中建立,那么应该在哪里建立?如何将这种机制正规化,什么样的剧烈运动应被视为关键?这就是问题所在!这就是为什么引擎中没有内置这种机制。对于一种策略来说,20 个点的滑点并不重要,无论如何都应该进场;而对于另一种策略来说,2 个点的滑点打破了所有的统计数据,你就不应该进场。那么通用交易引擎应该如何处理这两种策略呢?对,返回重新报价,让交易逻辑做出决定。或者添加自定义功能。更准确地说,是对所有情况的设置 ) Amy Liu 2017.01.06 12:19 #33 这是一篇非常好的文章。我学到了很多东西。贡献良多,谢谢。 Amy Liu 2017.01.06 12:28 #34 Alain Verleyen:在第 1241 版中,代码编译得很好,因此我试着进行回溯测试。它没有进行任何交易。经过深入研究,我发现这是由于填充模式造成的。我使用的经纪商/符号允许的模式是 ORDER_FILLING_IOC。您的 TradeCustom 类默认将填充模式设置为ORDER_FILLING_FOK。我很困惑,如何才能为 Agent.mq5 EA 更改这种填充模式以进行交易?我可以搜索,但会花很多时间。这就是这类工具的问题所在,它与 Metaquotes 的 MQL5 向导 EA 非常相似,对于不了解类的所有细节的人来说几乎无法使用。一旦遇到作者没有提供的问题,要修复或修改/添加就会变得非常麻烦。我看不出你的解决方案与 Metaquotes(向导)的解决方案有什么真正的区别。无论如何,祝贺您所做的大量工作。这是一项伟大的编程工作。 MetaEditor5 include 文件夹中有一些类。如果有人能深入解释一下专家文件夹的类,那将会非常有帮助,因为它们看起来非常复杂。人们喜欢在正式基类的基础上编写标准的 EA,而不是总是重新创建轮子....。无论如何,这篇文章对不重新创建轮子有很大帮助。 Alain Verleyen 2017.01.06 14:24 #35 Amy Liu: MetaEditor5 include 文件夹中有一些类。如果有人能深入解释一下 Expert 文件夹中的类,那将会非常有帮助,因为它们看起来非常复杂。人们喜欢在正式基类的基础上编写标准的 EA,而不是总是重新创建轮....。无论如何,这篇文章对不重复创建轮子有很大帮助。 我同意这一点。问题在于框架中存在 bug。在使用一个框架之前,我们要么决定深入学习它,要么确保它得到了作者的良好支持。 Amy Liu 2017.01.06 15:15 #36 Alain Verleyen: 我同意。问题在于框架中存在错误。在使用一个框架之前,我们要么决定深入学习它,要么确保它得到作者的良好支持。 这就是为什么我想学习 MetaEditor5 中的类,因为它们来自 "政府"。) Alain Verleyen 2017.01.06 20:11 #37 Amy Liu: 这就是为什么我想学习 MetaEditor5 中的类,它们来自 "政府"。) 而且还存在漏洞,得不到很好的支持 :-D Metin Kostekci 2018.02.11 14:47 #38 谢谢。 zemo 2018.11.29 14:26 #39 瓦西里先生 非常漂亮的代码......对我很有用... 在 mt5 news builds (1952) 中,我们在编译器中得到了一条 "消息"、 bool CBarDetector::IsNewBar(void) { datetime time[]; if(CopyTime(m_symbol, m_timeframe, 0, 1, time) < 1)return false; if(time[0] == m_last_time)return false; return (m_last_time = time[0]); //<=============HERE } //+------------------------------------------------------------------+///////////MESSAGE in THE METAEDITOR compiler/////////////// expression not boolean NewBarDetector.mqh 87 24 正确的应该是这样吗?//+------------------------------------------------------------------+ //| 如果给定的符号和时间框架中存在"......",则返回 true。 //| 一个新栏。| //+------------------------------------------------------------------+ bool CBarDetector::IsNewBar(void) { datetime time[]; if(CopyTime(m_symbol, m_timeframe, 0, 1, time) < 1)return (false); if(time[0] == m_last_time)return (false); return (m_last_time == time[0]); } //+------------------------------------------------------------------+ Shephard Mukachi 2018.12.13 03:50 #40 你好,瓦西里、 请原谅我在您写完这篇文章之后才提出问题。我现在只是在仔细阅读文章,寻找框架的替代方案。我觉得有些地方很奇怪,很可能是我的误解。 关于 "新建刻度线 "和 "新建条形图 "事件处理程序。您循环查看添加的刻度线列表,然后建立事件结构,将其传递给 Init 和 Support 事件处理程序,例如下面的新刻度线事件: //+------------------------------------------------------------------+ //| 检测多仪器新刻度的到来。 //+------------------------------------------------------------------+ void CStrategy::NewTickDetect(void) { if(m_ticks_detectors.Total()==0) AddTickEvent(ExpertSymbol()); for(int i=0; i<m_ticks_detectors.Total(); i++) { CTickDetector *tick=m_ticks_detectors.At(i); if(tick.IsNewTick()) { m_event.period=PERIOD_CURRENT; m_event.type=MARKET_EVENT_TICK; m_event.symbol=tick.Symbol(); CallSupport(m_event); CallInit(m_event); } } } 在你的一个示例中,例如下面的移动平均线剪辑; bool CMovingAverage::IsTrackEvents(const MarketEvent &event) { //--- 我们只处理在工作符号和时间框架上打开新条形图的情况 if(event.type != MARKET_EVENT_BAR_OPEN)return false; if(event.period != Timeframe())return false; if(event.symbol != ExpertSymbol())return false; return true; } 这个 IsTrackEvents函数 似乎抹杀了上述 NewTickDetect 函数的作用!因此,基于 NewTickDetect 中检查多个符号的能力,上述移动平均线示例应能在多个工具上进行交易,但 IsTrackEvents 只允许在策略时间框架和符号(符号是这里的关键)上进行交易。这是否意味着,由于策略只能对其符号进行交易,因此不需要真正使用 NewTickDetect 循环?实际上,"新刻度检测 "应该只检查接收到的刻度是否属于策略符号,而不进行循环。这实际上类似于为每个感兴趣的符号设置一个策略对象,而 CStragyList 会对其进行循环? 希望我说的有道理,也希望您能为我解释清楚。 我喜欢你的工作。我从您的文章中学到了很多,非常感谢。 谨致问候、 谢普 12345 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
至少要分析一下价格。也许你根本不需要入场。
是的,有这样一种机制。如果不在贸易订单 中建立,那么应该在哪里建立?如何将这种机制正规化,什么样的剧烈运动应被视为关键?
这就是问题所在!这就是为什么引擎中没有内置这种机制。
对于一种策略来说,20 个点的滑点并不重要,无论如何都应该进场;而对于另一种策略来说,2 个点的滑点打破了所有的统计数据,你就不应该进场。
那么通用交易引擎应该如何处理这两种策略呢?对,返回重新报价,让交易逻辑做出决定。
或者添加自定义功能。更准确地说,是对所有情况的设置 )
在第 1241 版中,代码编译得很好,因此我试着进行回溯测试。它没有进行任何交易。
经过深入研究,我发现这是由于填充模式造成的。我使用的经纪商/符号允许的模式是 ORDER_FILLING_IOC。您的 TradeCustom 类默认将填充模式设置为ORDER_FILLING_FOK。我很困惑,如何才能为 Agent.mq5 EA 更改这种填充模式以进行交易?我可以搜索,但会花很多时间。
这就是这类工具的问题所在,它与 Metaquotes 的 MQL5 向导 EA 非常相似,对于不了解类的所有细节的人来说几乎无法使用。一旦遇到作者没有提供的问题,要修复或修改/添加就会变得非常麻烦。我看不出你的解决方案与 Metaquotes(向导)的解决方案有什么真正的区别。
无论如何,祝贺您所做的大量工作。这是一项伟大的编程工作。
MetaEditor5 include 文件夹中有一些类。如果有人能深入解释一下 Expert 文件夹中的类,那将会非常有帮助,因为它们看起来非常复杂。人们喜欢在正式基类的基础上编写标准的 EA,而不是总是重新创建轮....。无论如何,这篇文章对不重复创建轮子有很大帮助。
我同意。问题在于框架中存在错误。在使用一个框架之前,我们要么决定深入学习它,要么确保它得到作者的良好支持。
这就是为什么我想学习 MetaEditor5 中的类,它们来自 "政府"。)
瓦西里先生
非常漂亮的代码......对我很有用...
在 mt5 news builds (1952) 中,我们在编译器中得到了一条 "消息"、
//+------------------------------------------------------------------+
expression not boolean NewBarDetector.mqh 87 24
正确的应该是这样吗?
你好,瓦西里、
请原谅我在您写完这篇文章之后才提出问题。我现在只是在仔细阅读文章,寻找框架的替代方案。我觉得有些地方很奇怪,很可能是我的误解。
关于 "新建刻度线 "和 "新建条形图 "事件处理程序。您循环查看添加的刻度线列表,然后建立事件结构,将其传递给 Init 和 Support 事件处理程序,例如下面的新刻度线事件:
在你的一个示例中,例如下面的移动平均线剪辑;
这个 IsTrackEvents函数 似乎抹杀了上述 NewTickDetect 函数的作用!因此,基于 NewTickDetect 中检查多个符号的能力,上述移动平均线示例应能在多个工具上进行交易,但 IsTrackEvents 只允许在策略时间框架和符号(符号是这里的关键)上进行交易。这是否意味着,由于策略只能对其符号进行交易,因此不需要真正使用 NewTickDetect 循环?实际上,"新刻度检测 "应该只检查接收到的刻度是否属于策略符号,而不进行循环。这实际上类似于为每个感兴趣的符号设置一个策略对象,而 CStragyList 会对其进行循环?
希望我说的有道理,也希望您能为我解释清楚。
我喜欢你的工作。我从您的文章中学到了很多,非常感谢。
谨致问候、
谢普