文章 "通用智能交易系统:事件模型和交易策略原型(第二章)" - 页 2

 

您好、

我试着编译您的代码(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 类及其响应来控制错误。

 
Vasiliy Sokolov:

是的,我们计划继续开发该引擎。它将始终保持免费。

至于您列出的其他内容--在 CStrategy 中编写您的句点、MM 和 "管理功能"。没有人禁止这样做。

错误控制一直存在--使用 CTrade 类及其响应来控制错误。

普通用户无需考虑交易服务器返回的错误。交易引擎应确保在任何情况下(非工作时间除外)都能正确生成并执行交易指令(开仓、平仓、修改)。还是我对交易引擎的要求太高了?

附:下一篇文章有哪些内容(哪些功能)?

 
Гога:

普通用户无需考虑交易服务器返回的错误。交易引擎应确保在任何情况下(非工作时间除外)都能正确生成并执行交易指令(开仓、平仓、修改)。还是我对交易引擎的要求太高了?

如果交易开仓单的止损价与开仓价过于接近,您认为交易引擎应该怎么做?

  • 不打开交易;
  • 将止损调整到允许的最小距离,并打开交易(如果有新闻,止损杠杆也是 50 个四位数点?)
  • 按上一点调整止损,按比例调整手数(这样风险不变),然后开仓。 如果手数变为小于最小可接受手数:
    • 取消交易,以免违反风险管理、
    • 以最小手数进场。
  • 调整止损和处于同一水平的所有挂单(如果是网格);
  • 按比例调整止损和止盈;
  • ...
您是否意识到,根据不同的策略,您需要使用不同的选项?

是的,您可以对最小距离进行基本调整(作为一种选择),但没有绝对通用的方法。

 
Гога:

普通用户无需考虑交易服务器返回的错误。交易引擎应确保在任何情况下(非工作时间除外)都能正确生成并执行交易指令(开仓、平仓、修改)。还是我对交易引擎的要求太高了?

附:我对下一篇文章有什么期待(什么功能)?

交易引擎的任务是为策略提供方便的环境,并确保所提供数据的完整性和一致性。交易引擎没有其他任务。但在任何情况下,它都不应该为策略本身进行 "交易"。因此,如果策略出现错误,引擎将不会纠正其错误,否则它将是一个看跌的宠儿。应尽一切努力防止错误发生。但如果错误已经发生,临时改变智能交易系统的交易逻辑是毫无意义的。您应该坐下来修复策略代码。别无他法。

举个实践中的例子。例如,如果您像这样在 CStrategy 中请求任何价格:

double ask = Ask();

您将保证得到一个已经规范化的工具价格,该价格可直接用于交易订单。如果使用系统查询,情况就不一样了。也就是说,CStrategy 会尽一切努力防止出现技术错误,例如在价格未归一化的情况下。但是,它不会为用户做这些工作。如果您将此价格替换为挂单,则可能不起作用。

 
Andrey Khatimlianskii:

如果在交易指令中,SL 与开盘价的距离太近,您认为交易引擎应该怎么做?

  • 不打开交易;
  • 将止损调整到允许的最小距离,然后开仓(如果有新闻,止损杠杆为 50 个四位数点,也可以这样做吗?)
  • 按上一点调整止损,按比例调整手数(这样风险不变),然后开仓。 如果手数变为小于最小可接受手数:
    • 取消交易,以免违反风险管理、
    • 以最小手数进场。
  • 调整止损和处于同一水平的所有挂单(如果是网格);
  • 按比例调整止损和止盈;
  • ...
您是否意识到,根据不同的策略,您需要使用不同的选项?

是的,您可以对最小距离进行基本调整(作为一种选择),但没有绝对通用的秘诀。

安德鲁,没有必要复杂化--正确的答案是 "将止损调整到允许的最小距离,然后开仓交易(如果新闻和止损拉平 50 个四位数点--也可以吗?)太小的止损点实际上应该有效(无需修改)。应根据收到的信号开仓。在联网的情况下,在 STOP 形成阶段规定了额外的规则。
 
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]
应该由引擎来处理。
 
Гога:

在这里争论是没有用的。这纯粹是个人的做法。但我不允许自己在日志中收到这样的信息:

这是引擎应该处理的事情。
关于什么 "关于它"?这是一条与系统信息一起出现的信息,由于某种原因,您已将其清除。