文章 "轻松快捷开发 MetaTrader 程序的函数库(第十部分):与 MQL4 的兼容性 - 开仓和激活挂单的事件" - 页 4

 
Artyom Trishkin:

不,只需阅读文章

对不起,我不认识那么多字母。)))

 
Alexey Viktorov:

事情就是这样:

当我在演示版上运行这段代码时,设置并删除了一个限价订单。

突然,在下一次模拟中,一个仓位被修改,一个仓位被打开,一个仓位被关闭。但删除已删除订单的记录从何而来?

是你用我给你的文件替换了程序库吗?这篇文章中的库还没有完成--它有这个缺陷--当两个事件具有相同的 MQL4 标准时。在第十一篇文章中,已经完成了将库的当前功能移植到 MQL4 的工作。这篇文章中的版本也有这个缺陷,文章最后的文字间接表明了它的存在:

下一步

在下一篇文章中,我们将进行位置关闭 跟踪,并修复 MQL4 事件跟踪当前实现中可能出现的错误 - 因为订单的安装和删除由 MQL5 的代码跟踪,在 MQL4 下工作时可能需要考虑一些细微差别。
如果您已经替换了库文件,但错误仍然发生,您需要捕捉到发生错误时的情况--导致错误发生的操作序列,我会修复它。
 
Artyom Trishkin:

您是否用我给您的文件替换了程序库?这篇文章中的库还没有完成 - 它有这样的缺陷 - 当两个事件具有相同的 MQL4 标准时。在第十一篇文章中,已经完成了将库的当前功能移植到 MQL4 的工作。这篇文章中的版本也有这个缺陷,文章最后的文字间接表明了它的存在:

下一步

在下一篇文章中,我们将进行位置关闭 跟踪,并修复 MQL4 事件跟踪当前实现中可能出现的错误 - 因为订单的安装和删除由 MQL5 的代码跟踪,在 MQL4 下工作时可能需要考虑一些细微差别。
如果您已经替换了库文件,但错误仍然发生,您需要捕捉到发生错误时的情况--导致错误的操作序列,我会修复它。

是的,我做到了。我已经描述了

关于交易、自动交易系统和交易策略测试的论坛。

讨论文章 "方便快捷地创建 MetaTrader 程序库(第 X 部分):与 MQL4 的兼容性 - 开仓和挂单激活事件"。

Alexey Viktorov, 2019.05.27 17:59

这里发生了一件令人难以理解的事情:

当我在演示版上运行这段代码时,一个限价订单被设置并删除了

443342388 2019.05.27 14:54:10 buy limit 0.01 eurusd 1.11835 0.00000 0.00000 2019.05.27 15:01:14 1.11972 cancelled 

而在下一次模拟时,突然又修改了一个仓位、一个开仓和一个平仓。这就是删除已删除订单记录的来源?

2019.05.27 18:34:11.903 00 EURUSD,H1: OnChartEvent: id=1002, event=TRADE_EVENT_PENDING_ORDER_REMOVED, lparam=443342388, dparam=1.11835, sparam=EURUSD
2019.05.27 18:34:11.903 00 EURUSD,H1: OnChartEvent: id=1024, event=TRADE_EVENT_POSITION_CLOSED, lparam=443417294, dparam=1.11933, sparam=EURUSD
2019.05.27 18:34:11.903 00 EURUSD,H1: - Отложенный ордер удалён: 2019.05.27 14:54:10.000 -
EURUSD Удалён 0.01 Buy Limit #443342388  по цене 1.11835
2019.05.27 18:34:11.903 00 EURUSD,H1: - Позиция закрыта: 2019.05.27 18:33:02.000 -
EURUSD Закрыт Sell #443417294  по цене 1.11912, профит -0.21 USD
2019.05.27 18:33:02.755 00 EURUSD,H1: OnChartEvent: id=1022, event=TRADE_EVENT_POSITION_OPENED, lparam=443417294, dparam=1.11912, sparam=EURUSD
2019.05.27 18:33:02.755 00 EURUSD,H1: - Позиция открыта: 2019.05.27 18:33:02.000 -
EURUSD Открыт 0.01 Sell #443417294 [0.01 Market order Sell #443417294]  по цене 1.11912
2019.05.27 18:29:21.913 00 EURUSD,H1: OnChartEvent: id=1050, event=TRADE_EVENT_MODIFY_POSITION_TAKE_PROFIT, lparam=443218277, dparam=1.12218, sparam=EURUSD
2019.05.27 18:29:21.913 00 EURUSD,H1: - Модифицирован TakeProfit позиции: 2019.05.27 18:27:45.000 -
EURUSD Buy #443218277:  модифицирован TakeProfit: [1.12240 --> 1.12218]

15:01:14 我删除了之前下达的限价订单。

在 18:29 之前,我一直在做自己的事情。专家顾问站在图表上。

18:29:21 我修改了之前设定的仓位。

18:33:02 时,我下达了卖出指令。

18:34:11 时,我关闭了卖出。

此时我收到第二条记录,15:01:14 时删除的限价已被取消。

 
Alexey Viktorov:

是的,我说过了。我已经描述过顺序了,不是吗?

你说过了

事情是这样的

当我在模拟器上运行这段代码时,设置并删除了一个限价订单。

突然,在下一次模拟中,一个仓位被修改,一个仓位被打开,一个仓位被关闭。这就是删除已删除订单记录的来源吗?

这些操作的顺序是什么?

  1. 设置限价订单
  2. 删除限价订单
  3. 修改仓位(何时开仓?)
  4. 开仓
  5. 关闭同一仓位
错误事件出现在什么时候?
 
Artyom Trishkin:

你写道

这些行动的顺序是什么?

  1. 设置限价订单
  2. 删除限价订单
  3. 修改仓位(何时开仓?)
  4. 打开仓位
  5. 同一仓位被关闭
错误事件是在什么时候出现的?

我已完成上一条信息。

 
Alexey Viktorov:

是的,我说过了。我已经描述过顺序了,不是吗?


我在任何序列中都不会出现这个错误。

请描述导致该错误的顺序。

最好不要写在日志里,因为日志里有很多调试记录,会影响快速浏览,而是写在这里的编号列表中。

 
Alexey Viktorov:

我已完成上一条信息。

15:01:14 我删除了之前下达的限价订单。

直到 18:29 我一直在做自己的事情。Expert Advisor 站在图表上。

18:29:21 我修改了之前设置的仓位。

18:33:02 时,我下达了卖出指令。

18:34:11 时,我关闭了卖出。

此时我收到第二条记录,15:01:14 时删除的限价已被删除。

也就是说,您需要

  1. 开仓,等待一段时间、
  2. 限价单,等待一段时间、
  3. 删除限价订单
  4. 修改仓位
  5. 开仓平仓
对吗?
 
Artyom Trishkin:

15:01:14 我删除了之前下达的限价订单。

直到 18:29 我一直在做自己的事情。Expert Advisor 站在图表上。

18:29:21 我修改了之前设置的仓位。

18:33:02 时,我下达了卖出指令。

18:34:11 时,我关闭了卖出。

此时我收到第二条记录,15:01:14 时删除的限价已被取消。

也就是说,我需要

  1. 开仓,等待一段时间、
  2. 限价订单,等待一段时间、
  3. 取消限价订单
  4. 修改仓位
  5. 开仓平仓
对吗?

不,小心你的手。

443342388 2019.05.27 14:54:10 buy limit 0.01 eurusd 1.11835 0.00000 0.00000 2019.05.27 15:01:14 1.11972 cancelled 

14:54:10 设置限价,15:01:14 解除限价。

然后是长时间的 广播 中断。一切归于沉寂。

然后在 18:00 开始连续播放几个乐章。只列出了第 29、33 和 34 分钟。在第 34 分钟,出现了三个半小时前发生的事件。

以下是位置列表。

443217459 2019.05.27 08:48:18 buy 0.01 eurusd 1.12109 0.00000 0.00000   1.11933 0.00 0.00 0.00 -1.76 
443218277 2019.05.27 08:51:53 buy 0.01 eurusd 1.12112 0.00000 1.12218   1.11933 0.00 0.00 0.00 -1.79 
443335401 2019.05.27 14:31:07 buy 0.01 eurusd 1.11965 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.32 
443336857 2019.05.27 14:35:47 buy 0.01 eurusd 1.11970 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.37 
443336959 2019.05.27 14:36:09 buy 0.01 eurusd 1.11967 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.34 
443337190 2019.05.27 14:36:53 buy 0.01 eurusd 1.11967 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.34 
它们在上午和午餐时间都是开放的。18 分钟时,只有 Sell 开仓,而且几乎立即平仓。
 
Alexey Viktorov:

不,好吧,小心你的手

限时设置为 14:54:10,删除时间为 15:01:14。

然后是长时间的 广播 中断。万籁俱寂

然后在 18:00 开始连续播放几个乐章。只列出了第 29、33 和 34 分钟。现在,在 34 分钟处,是三个半小时前发生的事件。

这是一份仓位表

它们都在上午和午餐时间开盘。18 分钟时,只有 Sell 开仓,几乎立即平仓。

好了,就是这样

15:01:14 时,我删除了之前下达的 限价订单

在 18:29 之前,我一直在做自己的事情。专家顾问站在图表上。

18:29:21 我修改了之前 设置的仓位

18:33:02 我卖出。

18:34:11 我关闭了卖出。

是在设置限价单之前?还是之后?还是在开仓之后?"更早 "并不具体。所有操作的时间可能都有意义,毕竟所有操作都会保存到列表中。在某个地方有相同的条件,因为删除旧的限价订单是在平仓 时再次确定的 - 仓位被关闭,我们检查了条件(在代码中直接描述),并根据这些条件确定了事件类型。然后根据事件中某一订单的类型对列表进行排序,并将事件发送到程序中 - 因此,在 MQL4 中存在条件重叠的情况,对于库来说,它们原来是相等的。虽然这是我在第 11 条中删除的内容,但仍在测试中。

 
Artyom Trishkin:

好了,你在这里 写作:

15:01:14 我删除了之前下达的 限价订单。

在 18:29 之前,我一直在做自己的事情。Expert Advisor 站在图表上。

18:29:21 我修改了之前 设置的仓位

18:33:02 时,我卖出。

18:34:11 我关闭了卖出。

之前- 是在设置限价单 之前?还是之后?还是在打开限价单之后?"之前 "并不具体。所有操作的时间可能都有意义--毕竟所有操作都会保存到列表中。在某个地方有相同的条件,因为删除旧的限价订单是在平仓 时再次确定的 - 仓位被关闭,我们检查了条件(代码中直接描述了),并根据这些条件确定了事件类型。然后根据事件中某一订单的类型对列表进行排序,并将事件发送到程序中 - 因此,在 MQL4 中存在条件重叠的情况,对于库来说,它们原来是相等的。虽然这是我在第 11 条中删除的内容,但仍在测试中。

关于交易、自动交易系统和测试交易策略的论坛

讨论文章 "方便快捷地创建 MetaTrader 程序库(第 X 部分):与 MQL4 的兼容性--开仓和挂单激活事件"

Alexey Viktorov, 2019.05.27 18:50

不,小心你的手

443342388 2019.05.27 14:54:10 buy limit 0.01 eurusd 1.11835 0.00000 0.00000 2019.05.27 15:01:14 1.11972 cancelled 

限制器在 14:54:10 设置,15:01:14 删除

广播 中断了很长时间。一切归于沉寂。

然后在 18:00:00 时连续播放了几个乐章。只列出了第 29、33 和 34 分钟。现在,在 34 分钟处,是三个半小时前发生的事件。

这是位置列表。

443217459 2019.05.27 08:48:18 buy 0.01 eurusd 1.12109 0.00000 0.00000   1.11933 0.00 0.00 0.00 -1.76 
443218277 2019.05.27 08:51:53 buy 0.01 eurusd 1.12112 0.00000 1.12218   1.11933 0.00 0.00 0.00 -1.79 
443335401 2019.05.27 14:31:07 buy 0.01 eurusd 1.11965 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.32 
443336857 2019.05.27 14:35:47 buy 0.01 eurusd 1.11970 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.37 
443336959 2019.05.27 14:36:09 buy 0.01 eurusd 1.11967 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.34 
443337190 2019.05.27 14:36:53 buy 0.01 eurusd 1.11967 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.34 
它们在上午和午餐时间都是开放的。18 分钟时,只有一个仓位打开,卖出,然后几乎立即平仓。

修改后只有一个,即突出显示的仓位。毫无疑问。它是早上下单的。修改了好几次。我不在乎修改哪一个。我已经在这个位置上设置了出局。这就是我想做的。

这是所有的限价器和最后一次卖出。

443340041 2019.05.27 14:46:32 buy limit 0.01 eurusd 1.11815 0.00000 0.00000 2019.05.27 14:46:55 1.11974 cancelled 
443340283 2019.05.27 14:47:15 buy limit 0.01 eurusd 1.11796 0.00000 0.00000 2019.05.27 14:47:27 1.11974 cancelled 
443340764 2019.05.27 14:48:42 buy limit 0.01 eurusd 1.11830 0.00000 0.00000 2019.05.27 14:52:51 1.11962 cancelled 
443340819 2019.05.27 14:48:54 buy limit 0.01 eurusd 1.11761 0.00000 0.00000 2019.05.27 14:50:22 1.11977 cancelled 
443340874 2019.05.27 14:49:06 buy limit 0.01 eurusd 1.11694 0.00000 0.00000 2019.05.27 14:52:37 1.11963 cancelled 
443341012 2019.05.27 14:49:32 buy limit 0.01 eurusd 1.11657 0.00000 0.00000 2019.05.27 14:51:22 1.11973 cancelled 
443342301 2019.05.27 14:53:55 sell stop 0.01 eurusd 1.11764 0.00000 0.00000 2019.05.27 15:01:03 1.11956 cancelled 
443342388 2019.05.27 14:54:10 buy limit 0.01 eurusd 1.11835 0.00000 0.00000 2019.05.27 15:01:14 1.11972 cancelled 
443417294 2019.05.27 18:33:02 sell 0.01 eurusd 1.11912 0.00000 0.00000 2019.05.27 18:34:11 1.11933 0.00 0.00 0.00 -0.21 

已删除的限价器和卖出被高亮显示。删除事件肯定留在了某个地方。但为什么不是在卖出打开时 "唤醒",而是在卖出关闭时才 "唤醒 "呢?