程序库: MT4Orders - 页 56 1...495051525354555657585960616263...95 新评论 fxsaber 2020.11.11 18:37 #551 SysFX:我有一个 MT4 EA,我正试图使用 MT4Orders 将其移植到 MT5,这样我就可以保持单一来源,但我遇到了一些问题...... 1)当订单触及 SL 或 TP 时,如果 EA 在 OrderSend() 期间添加了注释,则通常的 [sl] 或 [tp] 文本不会附加到订单注释中。 这是 MT5 的正常行为吗?如果是,是否有可靠的方法来确定订单是否真的触及 SL/TP,还是被手动平仓? (试图通过检查开盘价/收盘价/SL/TP 来决定是不可靠的,因为会出现滑点,尤其是当 SL 被移动到非常接近 TP 时)。 https://www.mql5.com/ru/forum/93352/page20#comment_7112531https://www.mql5.com/ru/forum/93352/page18#comment_6246123 2) 当发生部分平仓时,开仓和平仓部分订单的注释不会显示 "to #xxxxxxxxx "和 "from #xxxxxxxxx ",是否有可靠(希望简单)的方法来确定特定订单发生了什么? 3)未平仓交易的票据编号在平仓时会发生变化,因此我无法使用 OrderTicket() 跟踪订单,但 OrderTicketID() 似乎可以像 MT4 中的 OrderTicket() 一样工作,为平仓交易保留相同的 ID。该值是恒定的,还是会在平台重启时发生变化?如果是恒定的,有什么好办法既能使用OrderTicketID(),又能保持与MT4的兼容性(因为OrderTicketID()不是MT4 函数)?** OrderTicketID()似乎忽略了MT4_TICKET_TYPE指令,始终为 "长"。 SELECT_BY_TICKET能与OrderTicket/OrderTicketID/OrderTicketOpen正确配合使用。重新加载终端后,MT4Orders 的所有函数都不会更改其值。在 MT5 中,同一个 OrderTicketID 可以有多个平仓头寸(在部分平仓的情况下)。出于同样的原因,未平仓头寸和已平仓头寸也可以拥有相同的订单票据 ID。由于这种模糊性,MT5 使用 OrderTicket - 为每个关闭/打开的仓位提供唯一的票据。该库更新 用于跨平台(与 MT4 兼容)。** OrderTicketID() 似乎忽略了 MT4_TICKET_TYPE 指令,始终为 "长"。 谢谢,已修复。 // 更改列表: // 11.11.2020 // 修复:OrderTicketID() 和 OrderTicketOpen() 返回 TICKET_TYPE 中指定的值类型。 SysFX 2020.11.11 19:16 #552 2) 当发生部分平仓时,开仓和平仓部分订单上的注释不会显示 "to #xxxxxxxxx "和 "from #xxxxxxxxx ",是否有可靠(希望简单)的方法来确定特定订单发生了什么? 我的意思是这样的: 如果您在 MT4 中交易了 1.00 手,单子编号为 123456,您部分平仓了 0.40 手,那么单子编号 123456 在历史选项卡上显示为 0.40 手,其交易注释 显示为 "至 #NewTicket"。 在 "交易 "选项卡上,会出现新的 0.60 手交易,票据编号为 "NewTicket",其交易注释显示 "来自 #123456"。 fxsaber 2020.11.11 19:32 #553 SysFX:我的意思是如果您在 MT4 中进行了 1.00 手的交易,交易单号为 123456,您部分平仓了 0.40 手,那么交易单号 123456 在历史选项卡上显示为 0.40 手,其交易注释显示为 "至 #NewTicket"。在 "交易 "选项卡上,会出现新的 0.60 手交易,票据编号为 "NewTicket",其交易注释显示 "来自 #123456"。 #include <MT4Orders.mqh> //https://www.mql5.com/zh/code/16006 #define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK) void OnStart() { const TICKET_TYPE Ticket = OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0); if (OrderSelect(Ticket, SELECT_BY_TICKET)) OrderClose(OrderTicket(), 0.4, OrderClosePrice(), 0); } 该脚本会创建您的情况。写清楚在这种情况下你想获得什么? SysFX 2020.11.11 20:01 #554 fxsaber:这个脚本创造了你的处境。写清楚在这种情况下你需要得到什么? 因此,在测试器中,下面一行将创建票据 #2(开仓存款为 #1)。 const TICKET_TYPE Ticket = OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0); 然后,当下一行执行时,一个 0.6 手的新单子(#3)应该打开,而单子 #2 应该作为 0.4 手交易出现在订单历史中。 OrderClose(OrderTicket(), 0.4, OrderClosePrice(), 0); 在 MT4 中,#2 的订单注释为 "to #3",而 #3 的订单注释为 "from #2"。 在 MT5 中不会出现这种情况--交易/历史标签上不显示注释,OrdersToString() 只显示交易注释为 "0"。 测试程序和实际交易应具有相同的功能,我之所以提到测试程序,是因为票据编号是可以预料的。 fxsaber 2020.11.11 20:13 #555 SysFX:在 MT4 中,#2 的订单注释为 "to #3",而#3 的订单注释为 "from #2"。在 MT5 中不会出现这种情况--交易/历史选项卡上不显示注释,OrdersToString() 只显示交易注释为 "0"。 正如您已经注意到的,MT5 不会像 MT4 那样在部分执行时创建特定注释。 MT4Orders 绝不会模仿 MT4 的任何行为。 该库旨在利用 MT5 中 MT4 风格的交易 API。仅此而已。 这意味着如果您了解 MT4,就可以轻松编写 MT5 中的交易逻辑。 如果您需要考虑每个平台的一些细微差别,可以使用宏来实现。 #ifdef __MQL5__ // MQL5 代码在此。 #else // #ifdef __MQL5__ // MQL4 代码在此。 #endif // #ifdef __MQL5__ #else 如果您在 MT5 中遇到无法解决的问题,这里会有人提供帮助。很多事情都可以通过 MT4Orders 完成。 SysFX 2020.11.11 20:40 #556 fxsaber:正如您已经注意到的,MT5 不会像 MT4 那样在部分执行时创建某些注释。MT4Orders 绝不会模仿 MT4 的任何行为。 该库旨在利用 MT5 中 MT4 风格的交易 API。仅此而已。这意味着如果您了解 MT4,就可以轻松编写 MT5 中的交易逻辑。如果您需要考虑每个平台的一些细微差别,可以使用宏来实现。如果您在 MT5 中无法完成某些任务,这里会有人提供帮助。很多事情都可以通过 MT4Orders 完成。 是的 ...我意识到这是 MT5 行为造成的,并找到了解决该问题的方法。对我来说,更重要的 是解决 [sl] / [tp] 问题,现在这个问题解决得很好 - 谢谢您提供的信息 :) grin4k 2020.11.14 11:55 #557 我复制了它,却得到了一个空存档 Edgar Akhmadeev 2020.11.14 12:11 #558 grin4k: 我复制了它,得到的是一个空存档 是的,是空的。这是网站故障。 但如果代码已更新,就不要上传存档。压缩包没有更新。按文件下载。 Enrique Dangeroux 2020.11.16 14:39 #559 fxsaber :MT5 的案例很有意思。 交易被部分执行,之后又被删除。在这种情况下,DEAL_ORDER 的状态是 ORDER_STATE_CANCELED,而不是 FILLED/PARTIAL。在这种情况下,DEAL_TIME_MSC 不等于 ORDER_TIME_DONE_MSC。 在这种情况下,ORDER_TYPE_FILLING 是什么? 我通过 url 代理审查器进行交易。设置止盈时,默认值是ORDER_TYPE_FILLING== ORDER_FILLING_IOC。您的情况不应该发生在 IOC 上,对吗? Konstantin Kurkin 2020.11.16 15:06 #560 如何处理错误 -GetLastError,以及 ERR_INVALID_PRICE、ERR_PRICE_CHANGED、ERR_REQUOTE、ERR_OFF_QUOTES、ERR_TRADE_CONTEXT_BUSY - 常量未定义。 1...495051525354555657585960616263...95 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我有一个 MT4 EA,我正试图使用 MT4Orders 将其移植到 MT5,这样我就可以保持单一来源,但我遇到了一些问题......
1)当订单触及 SL 或 TP 时,如果 EA 在 OrderSend() 期间添加了注释,则通常的 [sl] 或 [tp] 文本不会附加到订单注释中。
这是 MT5 的正常行为吗?如果是,是否有可靠的方法来确定订单是否真的触及 SL/TP,还是被手动平仓?
(试图通过检查开盘价/收盘价/SL/TP 来决定是不可靠的,因为会出现滑点,尤其是当 SL 被移动到非常接近 TP 时)。
https://www.mql5.com/ru/forum/93352/page20#comment_7112531
https://www.mql5.com/ru/forum/93352/page18#comment_6246123
2) 当发生部分平仓时,开仓和平仓部分订单的注释不会显示 "to #xxxxxxxxx "和 "from #xxxxxxxxx "
,是否有可靠(希望简单)的方法来确定特定订单发生了什么?
3)未平仓交易的票据编号在平仓时会发生变化,因此我无法使用 OrderTicket() 跟踪订单,但 OrderTicketID() 似乎可以像 MT4 中的 OrderTicket() 一样工作,为平仓交易保留相同的 ID。
该值是恒定的,还是会在平台重启时发生变化?如果是恒定的,有什么好办法既能使用OrderTicketID(),又能保持与MT4的兼容性(因为OrderTicketID()不是MT4 函数)?
** OrderTicketID()似乎忽略了MT4_TICKET_TYPE指令,始终为 "长"。SELECT_BY_TICKET能与OrderTicket/OrderTicketID/OrderTicketOpen正确配合使用。重新加载终端后,MT4Orders 的所有函数都不会更改其值。
在 MT5 中,同一个 OrderTicketID 可以有多个平仓头寸(在部分平仓的情况下)。出于同样的原因,未平仓头寸和已平仓头寸也可以拥有相同的订单票据 ID。由于这种模糊性,MT5 使用 OrderTicket - 为每个关闭/打开的仓位提供唯一的票据。
该库更新 用于跨平台(与 MT4 兼容)。
,是否有可靠(希望简单)的方法来确定特定订单发生了什么?
我的意思是这样的:
如果您在 MT4 中交易了 1.00 手,单子编号为 123456,您部分平仓了 0.40 手,那么单子编号 123456 在历史选项卡上显示为 0.40 手,其交易注释 显示为 "至 #NewTicket"。
在 "交易 "选项卡上,会出现新的 0.60 手交易,票据编号为 "NewTicket",其交易注释显示 "来自 #123456"。
我的意思是
如果您在 MT4 中进行了 1.00 手的交易,交易单号为 123456,您部分平仓了 0.40 手,那么交易单号 123456 在历史选项卡上显示为 0.40 手,其交易注释显示为 "至 #NewTicket"。
在 "交易 "选项卡上,会出现新的 0.60 手交易,票据编号为 "NewTicket",其交易注释显示 "来自 #123456"。
该脚本会创建您的情况。写清楚在这种情况下你想获得什么?
这个脚本创造了你的处境。写清楚在这种情况下你需要得到什么?
因此,在测试器中,下面一行将创建票据 #2(开仓存款为 #1)。
然后,当下一行执行时,一个 0.6 手的新单子(#3)应该打开,而单子 #2 应该作为 0.4 手交易出现在订单历史中。
在 MT4 中,#2 的订单注释为 "to #3",而 #3 的订单注释为 "from #2"。
在 MT5 中不会出现这种情况--交易/历史标签上不显示注释,OrdersToString() 只显示交易注释为 "0"。
测试程序和实际交易应具有相同的功能,我之所以提到测试程序,是因为票据编号是可以预料的。
在 MT4 中,#2 的订单注释为 "to #3",而#3 的订单注释为 "from #2"。
在 MT5 中不会出现这种情况--交易/历史选项卡上不显示注释,OrdersToString() 只显示交易注释为 "0"。
正如您已经注意到的,MT5 不会像 MT4 那样在部分执行时创建特定注释。
MT4Orders 绝不会模仿 MT4 的任何行为。 该库旨在利用 MT5 中 MT4 风格的交易 API。仅此而已。
这意味着如果您了解 MT4,就可以轻松编写 MT5 中的交易逻辑。
如果您需要考虑每个平台的一些细微差别,可以使用宏来实现。
如果您在 MT5 中遇到无法解决的问题,这里会有人提供帮助。很多事情都可以通过 MT4Orders 完成。
正如您已经注意到的,MT5 不会像 MT4 那样在部分执行时创建某些注释。
MT4Orders 绝不会模仿 MT4 的任何行为。 该库旨在利用 MT5 中 MT4 风格的交易 API。仅此而已。
这意味着如果您了解 MT4,就可以轻松编写 MT5 中的交易逻辑。
如果您需要考虑每个平台的一些细微差别,可以使用宏来实现。
如果您在 MT5 中无法完成某些任务,这里会有人提供帮助。很多事情都可以通过 MT4Orders 完成。
是的 ...我意识到这是 MT5 行为造成的,并找到了解决该问题的方法。对我来说,更重要的 是解决 [sl] / [tp] 问题,现在这个问题解决得很好 - 谢谢您提供的信息 :)
我复制了它,得到的是一个空存档
是的,是空的。这是网站故障。
但如果代码已更新,就不要上传存档。压缩包没有更新。按文件下载。
MT5 的案例很有意思。
交易被部分执行,之后又被删除。在这种情况下,DEAL_ORDER 的状态是 ORDER_STATE_CANCELED,而不是 FILLED/PARTIAL。
在这种情况下,DEAL_TIME_MSC 不等于 ORDER_TIME_DONE_MSC。
在这种情况下,ORDER_TYPE_FILLING 是什么?
我通过 url 代理审查器进行交易。设置止盈时,默认值是ORDER_TYPE_FILLING== ORDER_FILLING_IOC。您的情况不应该发生在 IOC 上,对吗?