文章 "通用智能交易系统:事件模型和交易策略原型(第二章)" - 页 2 12345 新评论 Alain Verleyen 2016.03.21 19:47 #11 您好、我试着编译您的代码(Agent.mq5),结果出现以下错误。编译 1274编译器内部错误 Agent.mq5 1 1在 Dictionary.mqh 的第 388 行还有一个小错字/| Returns previous object. The current object becomes previous| Alain Verleyen 2016.03.21 20:29 #12 在第 1241 版中,代码编译得很好,因此我试着进行回溯测试。它没有进行任何交易。经过深入研究 ,我发现这是由于填充模式造成的。我使用的经纪商/符号允许的模式是 ORDER_FILLING_IOC。您的 TradeCustom 类默认将填充模式设置为ORDER_FILLING_FOK。我很困惑,如何才能为 Agent.mq5 EA 更改这种填充模式以进行交易?我可以搜索,但会花很多时间。这就是这类工具的问题所在,它与 Metaquotes 的 MQL5 向导 EA 非常相似,对于不了解类的所有细节的人来说几乎无法使用。一旦遇到作者没有提供的问题,要修复或修改/添加就会变得非常麻烦。我看不出你的解决方案与 Metaquotes(向导)的解决方案有什么真正的区别。无论如何,祝贺您所做的大量工作。这是一项伟大的编程工作。 Гога 2016.06.30 23:44 #13 瓦西里,作为 "OOP 在交易中的应用指南",你的作品信息量很大,也很有用,但作为 "工作中的交易引擎",你的作品就很差了。特别是在 "管理功能 "的多样性方面。如今,MT5 在易用性和交易者忠诚度方面已接近 MT4(增加了对冲交易)。多年来,MT4 在免费访问方面积累了相当丰富的管理功能:* 部分平仓(我指的是交易引擎对这一过程的控制);* 各种 STOP 计算;* 动态 STOP;* 虚拟 STOP;* 专业 MM(这是指对策略间资金分配的控制)。最终的,也是最重要的,可持续的交易结果不是取决于正确的入市和出市(尽管这很重要),而是取决于正确的投资;* 虚拟交易;* 网络建设。即一系列订单之间的相互连接,这些订单由该系列中每个仓位的手数大小形成的单一逻辑统一起来。* 在执行交易订单 时的异常处理(重新报价、错误 #130 [MT4]、STOPLEVEL、FREEZELEVEL 等,等等)方面还有很多不足之处。问题来了:"你们会进一步开发免费访问引擎吗? Vasiliy Sokolov 2016.07.01 11:44 #14 Гога:瓦西里,作为 "OOP 在交易中的应用指南",你的作品信息量很大,也很有用,但作为 "可工作的交易引擎",你的作品就很差了。特别是在 "管理功能 "的多样性方面。如今,MT5 在易用性和交易者忠诚度方面已接近 MT4(增加了对冲交易)。多年来,MT4 在免费访问方面积累了相当丰富的管理功能:* 部分平仓(我指的是交易引擎对这一过程的控制);* 各种 STOP 计算;* 动态 STOP;* 虚拟 STOP;* 专业 MM(这是指对策略间资金分配的控制)。最终的,也是最重要的,可持续的交易结果不是取决于正确的入市和出市(尽管这很重要),而是取决于正确的投资;* 虚拟交易;* 网络建设。即一系列订单之间的相互连接,这些订单由该系列中每个仓位的手数大小形成的单一逻辑统一起来。* 交易订单的 异常处理(重新报价、#130 错误 [MT4]、STOPLEVEL、FREEZELEVEL 等)还有待改进。问题来了:"你们是否会自由地进一步开发你们的引擎?是的,我们计划进一步开发该引擎。它将始终保持免费。关于您列出的其他内容--在 CStrategy 中编写您的停止、MM 和 "管理功能"。没有人禁止这样做。错误控制一直存在 - 使用 CTrade 类及其响应来控制错误。 Гога 2016.07.01 12:11 #15 Vasiliy Sokolov:是的,我们计划继续开发该引擎。它将始终保持免费。至于您列出的其他内容--在 CStrategy 中编写您的句点、MM 和 "管理功能"。没有人禁止这样做。错误控制一直存在--使用 CTrade 类及其响应来控制错误。普通用户无需考虑交易服务器返回的错误。交易引擎应确保在任何情况下(非工作时间除外)都能正确生成并执行交易指令(开仓、平仓、修改)。还是我对交易引擎的要求太高了?附:下一篇文章有哪些内容(哪些功能)? Andrey Khatimlianskii 2016.07.01 14:39 #16 Гога:普通用户无需考虑交易服务器返回的错误。交易引擎应确保在任何情况下(非工作时间除外)都能正确生成并执行交易指令(开仓、平仓、修改)。还是我对交易引擎的要求太高了?如果交易开仓单的止损价与开仓价过于接近,您认为交易引擎应该怎么做?不打开交易;将止损调整到允许的最小距离,并打开交易(如果有新闻,止损杠杆也是 50 个四位数点?)按上一点调整止损,按比例调整手数(这样风险不变),然后开仓。 如果手数变为小于最小可接受手数:取消交易,以免违反风险管理、以最小手数进场。调整止损和处于同一水平的所有挂单(如果是网格);按比例调整止损和止盈;... 您是否意识到,根据不同的策略,您需要使用不同的选项?是的,您可以对最小距离进行基本调整(作为一种选择),但没有绝对通用的方法。 Vasiliy Sokolov 2016.07.01 16:40 #17 Гога:普通用户无需考虑交易服务器返回的错误。交易引擎应确保在任何情况下(非工作时间除外)都能正确生成并执行交易指令(开仓、平仓、修改)。还是我对交易引擎的要求太高了?附:我对下一篇文章有什么期待(什么功能)?交易引擎的任务是为策略提供方便的环境,并确保所提供数据的完整性和一致性。交易引擎没有其他任务。但在任何情况下,它都不应该为策略本身进行 "交易"。因此,如果策略出现错误,引擎将不会纠正其错误,否则它将是一个看跌的宠儿。应尽一切努力防止错误发生。但如果错误已经发生,临时改变智能交易系统的交易逻辑是毫无意义的。您应该坐下来修复策略代码。别无他法。举个实践中的例子。例如,如果您像这样在 CStrategy 中请求任何价格:double ask = Ask();您将保证得到一个已经规范化的工具价格,该价格可直接用于交易订单。如果使用系统查询,情况就不一样了。也就是说,CStrategy 会尽一切努力防止出现技术错误,例如在价格未归一化的情况下。但是,它不会为用户做这些工作。如果您将此价格替换为挂单,则可能不起作用。 Гога 2016.07.01 17:56 #18 Andrey Khatimlianskii:如果在交易指令中,SL 与开盘价的距离太近,您认为交易引擎应该怎么做?不打开交易;将止损调整到允许的最小距离,然后开仓(如果有新闻,止损杠杆为 50 个四位数点,也可以这样做吗?)按上一点调整止损,按比例调整手数(这样风险不变),然后开仓。 如果手数变为小于最小可接受手数:取消交易,以免违反风险管理、以最小手数进场。调整止损和处于同一水平的所有挂单(如果是网格);按比例调整止损和止盈;... 您是否意识到,根据不同的策略,您需要使用不同的选项?是的,您可以对最小距离进行基本调整(作为一种选择),但没有绝对通用的秘诀。 安德鲁,没有必要复杂化--正确的答案是 "将止损调整到允许的最小距离,然后开仓交易(如果新闻和止损拉平 50 个四位数点--也可以吗?)太小的止损点实际上应该有效(无需修改)。应根据收到的信号开仓。在联网的情况下,在 STOP 形成阶段规定了额外的规则。 Гога 2016.07.01 18:02 #19 Vasiliy Sokolov:交易引擎的任务是为策略提供便利的环境,并确保所提供数据的完整性和一致性。交易引擎没有其他任务。但在任何情况下,它都不应该为策略本身进行 "交易"。因此,如果策略出现错误,引擎将不会纠正其错误,否则它将是一个看跌的宠儿。应尽一切努力防止错误发生。但如果错误已经发生,临时改变智能交易系统的交易逻辑是毫无意义的。您应该坐下来修复策略代码。别无他法。举个实践中的例子。例如,如果您像这样在 CStrategy 中请求任何价格:您将保证得到一个已经规范化的工具价格,该价格可直接用于交易订单。如果使用系统查询,情况就不一样了。也就是说,CStrategy 会尽一切努力防止出现技术错误,例如在价格未归一化的情况下。但是,它不会为用户做这些工作。如果将此价格替换为挂单,则可能不起作用。在这里争论是没有用的。这纯粹是个人的做法。但我不允许自己在日志中收到这样的信息:2016.07.01 11:04:26.866 ImpulseExpert (EURUSD,H1) Impulse Strategy 0.05 . Trading environment has changed. Rebuild the environment 2016.07.01 10:10:30.908 ImpulseExpert (EURUSD,H1) Impulse Strategy 0.05 . Trading environment has changed. Rebuild the environment 2016.07.01 08:18:19.129 ImpulseExpert (EURUSD,H1) Impulse Strategy 0.05 . Trading environment has changed. Rebuild the environment 2016.07.01 07:59:48.209 ImpulseExpert (EURUSD,H1) Impulse Strategy 0.05 . Trading environment has changed. Rebuild the environment 2016.07.01 06:29:19.308 ImpulseExpert (EURUSD,H1) Impulse Strategy 0.05 . Trading environment has changed. Rebuild the environment 2016.07.01 04:59:36.505 ImpulseExpert (EURUSD,H1) Impulse Strategy 0.05 . Trading environment has changed. Rebuild the environment 2016.07.01 03:13:03.656 ImpulseExpert (EURUSD,H1) Impulse Strategy 0.05 . Trading environment has changed. Rebuild the environment 2016.07.01 02:59:55.757 ImpulseExpert (EURUSD,H1) Impulse Strategy 0.05 . Trading environment has changed. Rebuild the environment 2016.06.30 17:59:56.557 ImpulseExpert (EURUSD,H1) CTrade::OrderSend: modify position #1451923 EURUSD (sl: 0.00000, tp: 0.00000) [no changes] 应该由引擎来处理。 Vasiliy Sokolov 2016.07.01 20:28 #20 Гога:在这里争论是没有用的。这纯粹是个人的做法。但我不允许自己在日志中收到这样的信息: 这是引擎应该处理的事情。 关于什么 "关于它"?这是一条与系统信息一起出现的信息,由于某种原因,您已将其清除。 12345 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
您好、
我试着编译您的代码(Agent.mq5),结果出现以下错误。编译 1274
编译器内部错误 Agent.mq5 1 1
在 Dictionary.mqh 的第 388 行还有一个小错字
/| Returns previous object. The current object becomes previous|在第 1241 版中,代码编译得很好,因此我试着进行回溯测试。它没有进行任何交易。
经过深入研究
,我发现这是由于填充模式造成的。我使用的经纪商/符号允许的模式是 ORDER_FILLING_IOC。您的 TradeCustom 类默认将填充模式设置为ORDER_FILLING_FOK。我很困惑,如何才能为 Agent.mq5 EA 更改这种填充模式以进行交易?我可以搜索,但会花很多时间。
这就是这类工具的问题所在,它与 Metaquotes 的 MQL5 向导 EA 非常相似,对于不了解类的所有细节的人来说几乎无法使用。一旦遇到作者没有提供的问题,要修复或修改/添加就会变得非常麻烦。我看不出你的解决方案与 Metaquotes(向导)的解决方案有什么真正的区别。
无论如何,祝贺您所做的大量工作。这是一项伟大的编程工作。
瓦西里,作为 "OOP 在交易中的应用指南",你的作品信息量很大,也很有用,但作为 "工作中的交易引擎",你的作品就很差了。特别是在 "管理功能 "的多样性方面。
如今,MT5 在易用性和交易者忠诚度方面已接近 MT4(增加了对冲交易)。多年来,MT4 在免费访问方面积累了相当丰富的管理功能:
* 部分平仓(我指的是交易引擎对这一过程的控制);
* 各种 STOP 计算;
* 动态 STOP;
* 虚拟 STOP;
* 专业 MM(这是指对策略间资金分配的控制)。最终的,也是最重要的,可持续的交易结果不是取决于正确的入市和出市(尽管这很重要),而是取决于正确的投资;
* 虚拟交易;
* 网络建设。即一系列订单之间的相互连接,这些订单由该系列中每个仓位的手数大小形成的单一逻辑统一起来。
* 在执行交易订单 时的异常处理(重新报价、错误 #130 [MT4]、STOPLEVEL、FREEZELEVEL 等,等等)方面还有很多不足之处。
问题来了:"你们会进一步开发免费访问引擎吗?
瓦西里,作为 "OOP 在交易中的应用指南",你的作品信息量很大,也很有用,但作为 "可工作的交易引擎",你的作品就很差了。特别是在 "管理功能 "的多样性方面。
如今,MT5 在易用性和交易者忠诚度方面已接近 MT4(增加了对冲交易)。多年来,MT4 在免费访问方面积累了相当丰富的管理功能:
* 部分平仓(我指的是交易引擎对这一过程的控制);
* 各种 STOP 计算;
* 动态 STOP;
* 虚拟 STOP;
* 专业 MM(这是指对策略间资金分配的控制)。最终的,也是最重要的,可持续的交易结果不是取决于正确的入市和出市(尽管这很重要),而是取决于正确的投资;
* 虚拟交易;
* 网络建设。即一系列订单之间的相互连接,这些订单由该系列中每个仓位的手数大小形成的单一逻辑统一起来。
* 交易订单的 异常处理(重新报价、#130 错误 [MT4]、STOPLEVEL、FREEZELEVEL 等)还有待改进。
问题来了:"你们是否会自由地进一步开发你们的引擎?
是的,我们计划进一步开发该引擎。它将始终保持免费。
关于您列出的其他内容--在 CStrategy 中编写您的停止、MM 和 "管理功能"。没有人禁止这样做。
错误控制一直存在 - 使用 CTrade 类及其响应来控制错误。
是的,我们计划继续开发该引擎。它将始终保持免费。
至于您列出的其他内容--在 CStrategy 中编写您的句点、MM 和 "管理功能"。没有人禁止这样做。
错误控制一直存在--使用 CTrade 类及其响应来控制错误。
普通用户无需考虑交易服务器返回的错误。交易引擎应确保在任何情况下(非工作时间除外)都能正确生成并执行交易指令(开仓、平仓、修改)。还是我对交易引擎的要求太高了?
附:下一篇文章有哪些内容(哪些功能)?
普通用户无需考虑交易服务器返回的错误。交易引擎应确保在任何情况下(非工作时间除外)都能正确生成并执行交易指令(开仓、平仓、修改)。还是我对交易引擎的要求太高了?
如果交易开仓单的止损价与开仓价过于接近,您认为交易引擎应该怎么做?
- 不打开交易;
- 将止损调整到允许的最小距离,并打开交易(如果有新闻,止损杠杆也是 50 个四位数点?)
- 按上一点调整止损,按比例调整手数(这样风险不变),然后开仓。 如果手数变为小于最小可接受手数:
- 取消交易,以免违反风险管理、
- 以最小手数进场。
- 调整止损和处于同一水平的所有挂单(如果是网格);
- 按比例调整止损和止盈;
- ...
您是否意识到,根据不同的策略,您需要使用不同的选项?是的,您可以对最小距离进行基本调整(作为一种选择),但没有绝对通用的方法。
普通用户无需考虑交易服务器返回的错误。交易引擎应确保在任何情况下(非工作时间除外)都能正确生成并执行交易指令(开仓、平仓、修改)。还是我对交易引擎的要求太高了?
附:我对下一篇文章有什么期待(什么功能)?
交易引擎的任务是为策略提供方便的环境,并确保所提供数据的完整性和一致性。交易引擎没有其他任务。但在任何情况下,它都不应该为策略本身进行 "交易"。因此,如果策略出现错误,引擎将不会纠正其错误,否则它将是一个看跌的宠儿。应尽一切努力防止错误发生。但如果错误已经发生,临时改变智能交易系统的交易逻辑是毫无意义的。您应该坐下来修复策略代码。别无他法。
举个实践中的例子。例如,如果您像这样在 CStrategy 中请求任何价格:
您将保证得到一个已经规范化的工具价格,该价格可直接用于交易订单。如果使用系统查询,情况就不一样了。也就是说,CStrategy 会尽一切努力防止出现技术错误,例如在价格未归一化的情况下。但是,它不会为用户做这些工作。如果您将此价格替换为挂单,则可能不起作用。
如果在交易指令中,SL 与开盘价的距离太近,您认为交易引擎应该怎么做?
- 不打开交易;
- 将止损调整到允许的最小距离,然后开仓(如果有新闻,止损杠杆为 50 个四位数点,也可以这样做吗?)
- 按上一点调整止损,按比例调整手数(这样风险不变),然后开仓。 如果手数变为小于最小可接受手数:
- 取消交易,以免违反风险管理、
- 以最小手数进场。
- 调整止损和处于同一水平的所有挂单(如果是网格);
- 按比例调整止损和止盈;
- ...
您是否意识到,根据不同的策略,您需要使用不同的选项?是的,您可以对最小距离进行基本调整(作为一种选择),但没有绝对通用的秘诀。
交易引擎的任务是为策略提供便利的环境,并确保所提供数据的完整性和一致性。交易引擎没有其他任务。但在任何情况下,它都不应该为策略本身进行 "交易"。因此,如果策略出现错误,引擎将不会纠正其错误,否则它将是一个看跌的宠儿。应尽一切努力防止错误发生。但如果错误已经发生,临时改变智能交易系统的交易逻辑是毫无意义的。您应该坐下来修复策略代码。别无他法。
举个实践中的例子。例如,如果您像这样在 CStrategy 中请求任何价格:
您将保证得到一个已经规范化的工具价格,该价格可直接用于交易订单。如果使用系统查询,情况就不一样了。也就是说,CStrategy 会尽一切努力防止出现技术错误,例如在价格未归一化的情况下。但是,它不会为用户做这些工作。如果将此价格替换为挂单,则可能不起作用。
在这里争论是没有用的。这纯粹是个人的做法。但我不允许自己在日志中收到这样的信息:
应该由引擎来处理。在这里争论是没有用的。这纯粹是个人的做法。但我不允许自己在日志中收到这样的信息:
这是引擎应该处理的事情。