Клиентские терминалы MetaTrader 4 и MetaTrader 5 предоставляют своим пользователям возможность легко создавать прототипы программ на языке MQL с помощью встроенного Мастера (MQL Wizard). Мастера обоих версий терминалов очень похожи, но все же имеют одно важное отличие. В Мастере MetaTrader 5 есть пункт генерации готовых советников, а в...
我想更改主要止损点的止损...我该怎么做?
这就是我正在做的:
COrder *order=orders.At(i); .... COrderStop *order_stop=order.MainStop(); double new_sl=...; order_stop.StopLoss(new_sl); order.MainStop(order_stop); order.CheckStops();我为了做这件事真是伤透了脑筋...
没有更新是因为 COrderStopVirtualBase::Update 中进行了检查
StopLoss() 返回新值,但 sl_line 仍然是旧的...
你好,谢泼、
感谢您指出这些问题。我直到现在才注意到这一点。我会更新代码。
是的,我注意到了。这仍然是由于前向声明造成的。CStop 需要在其方法中使用 COrder 和 COrderStop 实例。当您尝试编译 CStop 时也是如此。所有这些相互需要的类都应该一起编译。如果每个类都单独编译,就会出错。例如
This 将无法编译。您必须声明一个前向声明,这样编译器才能识别 object1 类中的类成员 m_object2:
如果 Object1 和 Object2 位于同一个文件中,则可以这样做。如果它们在两个不同的文件中,那么就需要在 Object1 的类文件中为 Object2 进行正向声明,在 Object2 的类文件中为 Object1 进行正向声明。在为这两个类中的任何一个添加方法之前,情况确实如此。
当前版本的编译器可以识别前向声明,但不能识别前向声明的类中列出的方法。这就是为什么你不会收到类似 "CStop - declaration without type"(CStop-无类型声明)的错误信息,而会收到编译器错误信息的原因,比如你上面发布的方法。编译器能识别类,但不能识别向前声明的类的方法。
你好,恩里科、
感谢您的快速回复。关于前向声明,你说得很对。 我担心这可能是一个更深层次的问题。 使用前向声明类的对象不知道该类的成员,这是有道理的。
我的执行引擎使用的是另一种模式,它使用的是策略模式。 我在使用它的过程中遇到了一些恼人的问题,当我看到你的库时,我发现了这些问题。
你的作品真的很棒,你拥有出色的设计和工程技能,感谢你愿意与我分享。
谢谢,Shep。
你好,恩里科、
感谢您的快速回复。关于前向声明,你说得很对。 我担心这可能是一个更深层次的问题。 使用前向声明类的对象不知道该类的成员,这是有道理的。
我的执行引擎使用的是另一种模式,它使用的是策略模式。 我在使用它的过程中遇到了一些恼人的问题,当我看到你的库时,我发现了这些问题。
你的作品真的很棒,你拥有出色的设计和工程技能,感谢你愿意与我分享。
谢谢,Shep。
你好,谢泼、
不客气,谢谢你告诉我。我记得在遇到前向声明的问题时,我也有点困惑。
很高兴听到你觉得这些文章很有用。祝你在创建自己的 EA 引擎时一切顺利。
恩里科
没有更新是因为 COrderStopVirtualBase::Update 中进行了检查
StopLoss() 返回新值,但 sl_line 仍然是旧值...
COrderStopVirtualBase::Update 的目的实际上与您的意图相反。它的目的是在自己的止损线更新时调整 sl/tp 值,通常是从 EA 外部更新(在图表上拖动或直接在对象属性 窗口中更改值)。对于虚拟止损,请使用 MoveStopLoss() 和 MoveTakeProfit() 方法。
这应该是下一篇文章的内容,但如果您很急切,不妨看看 COrderStopBase 的 CheckTrailing() 方法。它可以在符合追踪条件时修改订单止损。该方法适用于所有三种类型:
另外,CTrail 类也可用于更改 sl/tp 水平,而无需检索订单止损的实例(不仅用于追踪或盈亏平衡)。
拟议中的跨平台方法离实践和便利有多远。作为其自身的笨重自行车,它没有问题。但为什么要发布呢?即使是初学者,完全自己编写也比研究和掌握这个怪物要容易得多。我不明白。
与这种循环文章相比,MT5 下的 SB 就是优雅的典范。它还可以移植到 MT4 上。
我非常喜欢这篇文章,它让我大开眼界。请写一篇后续文章。我真的很想知道,您将如何利用这一工具进行剥头皮交易。
非常感谢你的这篇文章和其他所有作品。
拟议中的跨平台方法离实践和便利有多远。作为其自身的笨重自行车,它没有问题。但为什么要发布呢?即使是初学者,完全自己编写也比研究和掌握这个怪物要容易得多。我不明白。
与这种循环文章相比,MT5 下的 SB 就是优雅的典范。而且它还移植到了 MT4 上。
我完全同意。即使对 OOP 非常熟悉,这位作者的方法也太变态了。过分的地方太多了,代码根本就不是代码,而是一个 "怪物"....。