Язык программирования MQL5 позволяет решать задачи на совершенно новом уровне. Даже те задачи, которые уже вроде имеют решения, благодаря объектно-ориентированному программированию могут подняться на качественно новый уровень. В данной статье специально взят простой пример проверки появления нового бара на графике, который был преобразован в достаточно мощный и универсальный инструмент. Какой? Читайте в статье.
你好。
我决定自己写一个信号模块,纯粹是为了认知的目的。我遇到了一个问题。我必须设置挂单,我知道这可以通过CExpertSignal::OpenLongParams(...)来完成。但我有一个问题--我的测试人员警告说无效过期。在挖掘了源代码之后,我意识到除了ORDER_TIME_SPECIFIED 之外,我们不能得到任何类型的时间,而我们希望得到ORDER_TIME_GTC。
到目前为止,我已经做了一个聪明的举动,但它不太正确。我已经纠正了库中的功能。
你能提供什么建议?
你好。
你说得很对。我没有考虑到过期为零的情况。
你的解决方案很好。我将对标准库进行适当的编辑。
谢谢你。
你好。
你说得很对。我没有考虑到零到期的问题。
你的解决方案很好。我将对标准库 进行适当的编辑。
谢谢你。
这将是很好的,但与此同时,在这种情况下,我找到了另一条出路,正确的出路 :)通过创建一个继承自CExpert的类,我在其中重载了CheckOpenLong()和CheckOpenShort()函数,我在那里进行了这种修正。
但与此同时,我已经找到了摆脱这种情况的另一种方法--正确的方法 :)通过创建一个继承自CExpert的类,我在其中覆盖了CheckOpenLong()和CheckOpenShort()函数,并在那里进行了这种修正。
请解释Expert_EveryTick参数的逻辑。
如果Expert_EveryTick=true,专家顾问就会处理每一个刻度?也就是说,它在每一个新的tick上检查进入/退出条件和仓位跟踪(trawl),对吗?
如果Expert_EveryTick=fasle--只在新条形 的第一个刻度线上触发? 而跟踪也将只在第一个刻度线上触发?
请解释Expert_EveryTick参数的逻辑。
如果Expert_EveryTick=true,专家顾问就会处理每一个刻度?也就是说,它在每一个新的tick上检查进入/退出条件和仓位跟踪(trawl),对吗?
如果Expert_EveryTick=fasle--只在新条形图 的第一个刻度处? 拖网也将只在第一个刻度处触发?
关于专家顾问的逻辑的更多问题。
有一个开放的位置,例如买入和一个固定的手数,例如1。
有一个信号给对方,要卖掉。
是两笔各1手的交易(第一笔将关闭1手)还是一笔2手的交易? 赢得和失去当前的买入有什么区别吗?
如果有一个买入的位置,又是一个买入的信号,我应该重新定义什么方法来使它关闭?
关于专家顾问的逻辑的更多问题。
1.有一个开放的头寸,例如买入和一个固定的手数,例如1。
有一个信号给另一方,要卖出。
专家顾问应该怎么做?是开两笔各1手的交易(第一笔交易将关闭1手)还是开一笔2手的交易?
2.EA不会自己做多,即如果有一个买入的位置,又有一个买入的信号,我应该重新定义哪些方法让它做多,CheckOpenLong()?
1.两个触发阈值(专家顾问设置)。 如果超过平仓阈值,头寸就会简单关闭,如果超过两个阈值(平仓和开仓),头寸就会逆转。-/+ 没有区别。
2.处理方法
1.两个触发阈值(EA 设置)。如果超过平仓阈值,头寸将直接关闭。如果超过两个阈值(平仓和开仓),头寸将反转。-/+ 没有区别。
2.处理方法
收盘和开盘阈值是 "投票 "的结果,信号模块中的ShortCondition()或LongCondition()会返回什么?
收盘价和开盘价是对信号模块中ShortCondition()或LongCondition()返回的内容进行 "投票 "的结果吗?
三个问题。
理论上,我们当然可以使用向导建立EA,然后手动添加所有这些功能到代码中。但是,所有这些都以标准方法的形式实现,也就是说,对于想使用向导的傻瓜来说,他们不需要进入代码进行编辑,例如,如果他们想用一个信号模块替换另一个信号模块,那是很理想的。