您可以通过特殊适配器 使用其他标准类。不过,困难在于这些类是为 MetaTrader 5 设计的,与平台有关,而 CStrategy 引擎则与平台无关。细心的读者可能已经注意到,CStrategy 引擎故意将所有内容都包裹在 OOP 层中。
现在我们有一项超级任务--将 CStrategy 移植到 MetaTrader 4。然后,在该引擎帮助下编写的策略将同时在两个平台上编译和运行。
附注:事实上,该引擎并不使用标准的 CTrade 交易类,而是使用某种 CTradeControl 开仓,它与 CTrade 非常相似,甚至继承自 CTrade,但并非 CTrade。未来,将有助于将其移植到 MT4 上,这将使 CStrategy 真正独立于平台。
您还可以通过特殊适配器 使用其他标准类。不过,困难在于这些类是为 MetaTrader 5 设计的,与平台有关,而 CStrategy 引擎则与平台无关。细心的读者可能已经注意到,CStrategy 引擎故意将所有内容都包裹在 OOP 层中,而且是有意为之。
现在我们有一项超级任务--将 CStrategy 移植到 MetaTrader 4。然后,在该引擎帮助下编写的策略将同时在两个平台上编译和运行。
附注:事实上,该引擎并不使用标准的 CTrade 交易类,而是使用某种 CTradeControl 开仓,它与 CTrade 非常相似,甚至继承自 CTrade,但并非 CTrade。未来,将有助于将其移植到 MT4 上,使 CStrategy 真正独立于平台。
您说未来将如何更新?你们会定期发布新版本的库吗?您如何确定今天的代码不会发生变化,否则您下载新版本后,当前开发中的某些内容就会脱落。
您可以通过特殊的适配器 使用其他标准类。
如果能读到这样一个适配器的例子,一定会很有趣。
附注:事实上,该引擎并不使用标准的 CTrade 交易类,而是使用某种 CTradeControl 开仓,它与 CTrade 非常相似,甚至继承自 CTrade,但并非 CTrade。将来,将它移植到 MT4 上会有所帮助,这将使 CStrategy 真正独立于平台。
是的,我在 CTradeCustom 中看到了类似 CTrade 的方法,但仍然使用标准库:
#include <Trade\OrderInfo.mqh>
#include <Trade\HistoryOrderInfo.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\DealInfo.mqh>
你说将来会更新,但如何更新?你们会定期发布新版本的库吗?你怎么能保证今天的代码不会发生变化,或者你下载了一个新版本,但当前的开发却出现了问题。
很遗憾,我们无法保证。如果有必要进行修改,以显著提高引擎的简洁性、可靠性和基础架构,那么至少在形成代码库的最初阶段会进行这样的修改。
不过,您不必过于担心这些潜在的改动,因为首先,如果要进行改动,也很可能是在引擎的内部结构中进行,用户不会感觉到这些改动。其次,所提供的算法经过了多年实践和其他平台的检验。它们确实有效。到目前为止,我还没有发明过更好的算法,而且我也尝试过很多:基于有限自动机的模型和其他模板,比如 Wealth-Lab 提供的模板。
至于新版本--我们拭目以待。还有一些方面尚未涉及(平台独立性和挂单 工作)。我会寻找力量来完成引擎,然后会有一个新的扩展版本,并以文章的形式为这些功能提供相应的文档。
至于平台独立性,这个概念当然很有趣,但在实践中谁又真正需要它呢。 在我看来,每个人早就做出了自己的选择。MT5 主要适合在证券交易所工作的人。MT4 则非常适合外汇和差价合约。通常,从事外汇交易的人不从事股票市场,反之亦然。谁需要编写一个策略并在两个平台上实施?只有机器人卖家。但这只是我个人的看法,也许我错了。
作为一个只在 MT5 平台上工作的人,我对扩展 CTradeControl 的功能很感兴趣。例如,只通过限价订单开仓,并使用有趣的方法,例如,考虑到当前的波动性和堆栈中的供应/需求。
在实践中,许多人必须同时使用两个平台。例如,他们在 MT4 上使用自己的数据进行测试,而在 MT5 上进行交易(在 MT5 拥有自己的数据源之前,这种情况不会改变)。在这里,两个平台同时使用相同的算法非常重要。否则可能会出现令人不快的意外。
对于供应商和自由职业者来说,同时为两个平台编写程序也非常方便,不用担心臭名昭著的不兼容性问题。顺便说一句,把他们贬低到幕后是错误的。自由职业者需要编写大量代码,而且非常忙碌。他们没有时间开发不同的概念和引擎。因此,给他们提供一个工具并对其进行清晰的描述非常重要。对于很多人来说,即使是那些不熟悉编程的人,这也会让他们的生活轻松很多,并有助于更清晰地制定 TOR(在引擎规则中)。
在实践中,许多人不得不同时使用两个平台。例如,他们在 MT4 上用自己的数据进行测试,在 MT5 上进行交易(在 MT5 拥有自己的数据源之前,这种情况不会改变)。在这里,两个平台同时使用相同的算法非常重要。否则可能会出现令人不快的意外。
对于供应商和自由职业者来说,同时为两个平台编写程序也非常方便,不用担心臭名昭著的不兼容性问题。顺便说一句,把他们贬低到幕后是错误的。自由职业者需要编写大量代码,而且非常忙碌。他们没有时间开发不同的概念和引擎。因此,给他们提供一个工具并对其进行清晰的描述非常重要。对很多人来说,即使不熟悉编程,这也会让他们的生活变得更轻松,并有助于更清晰地制定 TOR(在引擎规则中)。
感谢您的文章,这是个好主意!我们期待着您的继续。
我想您很快就会编写额外的 shell 类,将 Cstrategy 移植到 mt4,像Trade.Buy(MM.GetLotFixed(),ExpertSymbol(), "")这样 简单的一行就可以在两个平台上同样编译;
这样简单的代码就能在两个平台上编译。
但到目前为止,通用智能交易系统只有在编译阶段才与平台无关?
1) 能否在 mt4 测试版和 mt5 真实/模拟账户中实现相同的建仓?请使用您的 mt4 数据,当然还有您的引擎。测试账户和真实账户的OHLC可能不同,因此指标读数也会不同,进而影响交易的可用性。
2) 您还需要考虑平台之间订单和交易概念的差异。例如,这里需要排除在 mt4 中按照 mt5 的逻辑开立多方向头寸的可能性。
你们将如何解决这两个问题?或者最终用户可以自己解决)?
谢谢
2) 我们还需要考虑平台之间订单和交易概念的分歧。也就是说,有必要排除在 mt4 中建立多方向头寸的可能性,坚持 mt5 的逻辑。
那么 Expert Advisor 如何以同样的方式重复这一逻辑?例如,在 mt5中以 0.2 手开立 买入头寸,在发出卖出 0.2 手的指令后,头寸应被关闭。在这种情况下,在 mt4 中会有 2 个多方向仓位,而在 mt5 中不会再有未结仓位。
在 MT5 中,EA 只需管理一个仓位。而在 MT4 中,EA 将依次接收多个仓位。如果在 MT5 中执行转换操作而不检查当前仓位(有卖出仓位时买入,有买入仓位时卖出),仓位将被关闭,在下一次调用时,EA 将不再调用仓位维护模块。
自上而下的兼容性也很明显:为 MT5 编写的 Expert Advisor 只在一个方向上交易一个仓位,在 MT4 中也能正常运行。在 MT4 中同时交易多个仓位的智能交易系统无法在 MT5 中实现相同的逻辑。但如果只单向交易一个仓位,在 MT5 中应该不会有问题。
新文章 通用EA:自定义策略和辅助交易类(第三章)已发布:
在本文中,我们将继续分析CStrategy交易引擎的算法。这系列文章的第三篇包含如何使用这种方法开发特定的交易策略样例的详细分析。需特别关注辅助算法— 智能交易日志系统以及使用索引方式(Close[1],Open[0]等)访问数据。
在第一篇文章通用智能交易系统:交易策略的模式中,我们已经详细考虑了策略的交易模式以及需被重载的主要方法。现在,是做练习的时候了。
每一个使用CStrategy引擎创建的EA必须重载用于设置EA属性和行为的虚拟方法。我们将以三列表的形式列出所有需重载的方法。狩猎包含虚拟方法的名称,第二列是需要追踪的事件或执行的行为。第三列包含使用方法的目标描述。下面就是表格:
表 1. 虚拟方法和它们的用途
作者:Vasiliy Sokolov