程序库: MT4Orders - 页 23 1...161718192021222324252627282930...95 新评论 fxsaber 2018.06.10 10:26 #221 Sergey Likho:同时,日志也显示一切正常。本页面 上有多个关于此主题的链接。简而言之,您可以在日志中看到一个空的 Result.deal。您可以在日志(不是空的 Request.position)中看到一个 OrderClose 交易,它应该是成功完成的(Result.code),但同时在终端中一秒钟都没有出现相关记录(DEAL_ENTRY_OUT deal)(库正在等待)。这表明有两种情况: MT5 交易订单已成功提交,但 MT5 交易未通过。交易已通过,但未出现在交易历史中。对于 MT5 而言,这两种情况都不总是好的(详细讨论见上面的链接)。遗憾的是,该库工作得很清楚。所有这些细微差别都经过了深思熟虑的分析,因此程序库对它们做出了合理的反应。 fxsaber 2018.06.18 12:00 #222 Sergey Likho:如果我使用 fhtm 模拟经纪商进行测试,OrderSend 函数会打开一笔交易,但却返回错误。重试后发现是我的错。感谢您的留言,MT5 在该交易服务器上的行为非常有趣。 已修复。如果您需要,我可以发送到您的 PM。为了不麻烦版主,我会在 KB 中发布,届时开发人员会在新版本中解决 DEAL_SL/TP。 Sergey Likho 2018.06.19 19:04 #223 fxsaber:重试后发现是我的错。感谢您的留言,MT5 在该交易服务器上的行为非常有趣。已修复。如果您需要,我可以发送到您的 PM。为了不麻烦版主,我会在 KB 中发布,届时开发人员会在新版本中解决 DEAL_SL/TP。是的,请发送至 PM fxsaber 2018.06.20 07:48 #224 Sergey Likho:是的,请给我发邮件已发送。 很少出现,但可能出现此类警报 Alert: OrderSend(2210958493) - BUG! Alert: Please send the logs to the author - https://www.mql5.com/en/users/fxsaber ::AccountInfoString(ACCOUNT_SERVER) = ForexTimeFXTM-Demo01 (bool)::TerminalInfoInteger(TERMINAL_CONNECTED) = true ::TerminalInfoInteger(TERMINAL_PING_LAST) = 66676 ::TerminalInfoDouble(TERMINAL_RETRANSMISSION) = 13.63636363636363 ::TerminalInfoInteger(TERMINAL_BUILD) = 1861 (bool)::TerminalInfoInteger(TERMINAL_X64) = true MT4ORDERS::IsHedging = true Res = true MT4ORDERS::OrderSendBug = 1 Request.action = TRADE_ACTION_DEAL (1) Request.magic = 0 Request.order = 0 Request.symbol = EURUSD Request.volume = 1.0 Request.price = 1.15758 Request.stoplimit = 0.0 Request.sl = 0.0 Request.tp = 0.0 Request.deviation = 0 Request.type = ORDER_TYPE_SELL (1) Request.type_filling = ORDER_FILLING_FOK (0) Request.type_time = ORDER_TIME_GTC (0) Request.expiration = 1970.01.01 00:00:00 Request.comment = Request.position = 0 Request.position_by = 0 Result.retcode = 10009 Result.deal = 2208425527 Result.order = 2210958493 Result.volume = 1.0 Result.price = 0.0 Result.bid = 0.0 Result.ask = 0.0 Result.comment = Request executed 180.441 + 9.521 (1) ms. Result.request_id = 153 Result.retcode_external = 0 这是一个纯粹的信息提示(不影响交易),表示 MT5-OrderSend 在工作中出现错误。此处 对该错误进行了详细讨论。不过,开发人员还不认为这是 MT5 的错误行为... ZYMT5 的一个微妙之处已被揭示。通过库进行交易时不会出现幻影订单。 fxsaber 2018.07.06 01:06 #225 Andrey Khatimlianskii:工作历史悠久,现在却飞速发展!一些意想不到的结果。脚本会计算上一个 "头寸 "的开仓/平仓时间。 交易、自动交易系统和交易策略测试论坛 OrderCloseTime 智能交易系统 MQL5 fxsaber, 2018.07.06 00:49 #include <MT4Orders.mqh> //https://www.mql5.com/en/code/16006 void LastTimeMQL4( datetime &OpenTime, datetime &CloseTime ) { if (OrderSelect(OrdersHistoryTotal() - 1, SELECT_BY_POS, MODE_HISTORY)) { OpenTime = OrderOpenTime(); CloseTime = OrderCloseTime(); } } void LastTimeMQL5( datetime &OpenTime, datetime &CloseTime ) { if (HistorySelect(0, INT_MAX)) { for (int i = HistoryDealsTotal() - 1; i >= 0; i--) { const ulong Ticket = HistoryDealGetTicket(i); if (HistoryDealGetInteger(Ticket, DEAL_ENTRY) == DEAL_ENTRY_OUT) { CloseTime = (datetime)HistoryDealGetInteger(Ticket, DEAL_TIME); if (HistorySelectByPosition(HistoryDealGetInteger(Ticket, DEAL_POSITION_ID))) OpenTime = (datetime)HistoryDealGetInteger(HistoryDealGetTicket(0), DEAL_TIME); break; } } } } typedef void (*GetLastTime)( datetime&, datetime& ); void Bench( GetLastTime LastTime, const int Amount = 10000 ) { datetime OpenTime, CloseTime; datetime Tmp = 0; for (int i = 0; i < Amount; i++) { LastTime(OpenTime, CloseTime); Tmp += CloseTime - OpenTime; } Print(Tmp); } #define BENCH(A) \ { \ const ulong StartTime = GetMicrosecondCount(); \ A; \ Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \ } #define PRINT(A) Print(#A + " = " + (string)(A)) void OnStart() { if (HistorySelect(0, INT_MAX)) PRINT(HistoryDealsTotal()); BENCH(Bench(LastTimeMQL4)) BENCH(Bench(LastTimeMQL5)) } 结果 HistoryDealsTotal() = 343 1970.01.01 00:00:00 Time[Bench(LastTimeMQL4)] = 88705 1970.01.01 00:00:00 Time[Bench(LastTimeMQL5)] = 749410 我还没有分析为什么库的性能比纯 MQL5 优越得多。我认为 HistorySelect 的实时速度会变慢。我没有在测试器中检查过。 ZЫ是的,HistorySelect 会变慢。 fxsaber 2018.07.10 11:52 #226 关于交易、自动交易系统和测试交易策略的论坛 库:MT4Orders fxsaber, 2017.09.03 18:52 // 更改列表: // 03.09.2017: // 添加:已添加 OrderTicketOpen() - MT5 开仓交易票据 // OrderOpenReason() - MT5 开仓交易的原因(开仓原因) //OrderCloseReason() - причина проведения MT5-сделки закрытия (причина закрытия позиции) 通过 SL 关闭的所有仓位的打印输出 关于交易、自动交易系统和测试交易策略的论坛 如何计算仓位遇到止损时的平仓价格? fxsaber, 2018.07.10 11:46 AM #include <MT4Orders.mqh> //https://www.mql5.com/en/code/16006 void OnStart() { const int Total = OrdersHistoryTotal(); for (int i = 0; i < Total; i++) if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderCloseReason() == DEAL_REASON_SL)) OrderPrint(); } Vitaly Muzichenko 2018.07.19 09:33 #227 fxsaber:结果有点出乎意料。脚本会计算最后一个 "仓位 "的开仓/平仓时间。我还没有分析为什么库的性能比纯 MQL5 好得多。我认为 HistorySelect 在实时情况下会变慢。我没有在测试器中检查过。ZЫ是的,HistorySelect 会变慢。这是最新版本的库吗? fxsaber 2018.07.19 21:29 #228 Vitaly Muzichenko:这是图书馆的最新版本吗?是的。 fxsaber 2018.07.24 09:46 #229 关于交易、自动交易系统和测试交易策略的论坛 库:MT4Orders fxsaber, 2017.02.16 15:16 使用此脚本能够在 MT5 中发现执行问题。我建议您检查您的终端+交易服务器连接,如有问题,请向服务台报告。更新了应用程序中的脚本。例如,可快速发现此类问题 2018.07.24 10:24:19.177 Trades '35247942': market buy 0.01 USDHKD 2018.07.24 10:24:19.246 Trades '35247942': failed market buy 0.01 USDHKD [No prices] 2018.07.24 10:24:19.246 Trades '35247942': buy limit 0.01 USDHKD at 7.83618 2018.07.24 10:24:19.315 Trades '35247942': failed buy limit 0.01 USDHKD at 7.83618 [No prices] 2018.07.24 10:24:19.316 Trades '35247942': buy stop 0.01 USDHKD at 7.85618 2018.07.24 10:24:19.384 Trades '35247942': failed buy stop 0.01 USDHKD at 7.85618 [No prices] 附加的文件: OrderSend-Test2.mq5 15 kb fxsaber 2018.08.01 13:14 #230 关于交易、自动交易系统和测试交易策略的论坛 图书馆:MT4Orders Andrey Khatimlianskii, 2018.06.06 01:53 pm. // 30.05.2018 // 添加:利用交易历史加速工作,在绩效和 // 内存消耗--对 VPS 很重要。使用标准通用库。 // 如果不想使用 Generic 库,也可以使用旧的历史工作模式。 // 要做到这一点,您需要在 MT4Orders-library 之前写入以下行文 // // #define MT4ORDERS_FASTHISTORY_OFF // 关闭快速交易历史记录功能 - 不使用通用库。 现在使用长历史记录就像飞一样! 用数字检查通用赢利#define MT4ORDERS_FASTHISTORY_OFF // 关闭交易历史的快速执行 - 不使用通用库。 #include <MT4Orders.mqh> double HistoryToDouble( void ) { double Res = 0; for (int i = OrdersHistoryTotal() - 1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) Res += OrderCloseTimeMsc() - OrderOpenTimeMsc() + OrderProfit() + OrderTicket() - OrderTicketOpen(); return(Res); } #define BENCH(A) \ { \ const ulong StartTime = GetMicrosecondCount(); \ A; \ Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \ } #define PRINT(A) Print(#A + " = " + (string)(A)) void OnStart() { if (HistorySelect(0, INT_MAX)) { PRINT(HistoryDealsTotal()); PRINT(HistoryOrdersTotal()); } for (int i = 0; i < 3; i++) { PRINT(i); BENCH(Print(HistoryToDouble())) } }无通用的结果HistoryDealsTotal() = 10063 HistoryOrdersTotal() = 20296 i = 0 1195028482.07 Time[Print(HistoryToDouble())] = 829525 i = 1 1195028482.07 Time[Print(HistoryToDouble())] = 885207 i = 2 1195028482.07 Time[Print(HistoryToDouble())] = 918911使用通用型的结果 HistoryDealsTotal() = 10063 HistoryOrdersTotal() = 20296 i = 0 1195028482.07 Time[Print(HistoryToDouble())] = 52603 i = 1 1195028482.07 Time[Print(HistoryToDouble())] = 39051 i = 2 1195028482.07 Time[Print(HistoryToDouble())] = 34409 在 10K 笔交易和 20K 个订单的历史记录中,通用变体的速度要快约 30 倍。交易历史越长,加速越明显。 1...161718192021222324252627282930...95 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
同时,日志也显示一切正常。
本页面 上有多个关于此主题的链接。简而言之,您可以在日志中看到一个空的 Result.deal。您可以在日志(不是空的 Request.position)中看到一个 OrderClose 交易,它应该是成功完成的(Result.code),但同时在终端中一秒钟都没有出现相关记录(DEAL_ENTRY_OUT deal)(库正在等待)。这表明有两种情况:
对于 MT5 而言,这两种情况都不总是好的(详细讨论见上面的链接)。遗憾的是,该库工作得很清楚。所有这些细微差别都经过了深思熟虑的分析,因此程序库对它们做出了合理的反应。
如果我使用 fhtm 模拟经纪商进行测试,OrderSend 函数会打开一笔交易,但却返回错误。
重试后发现是我的错。感谢您的留言,MT5 在该交易服务器上的行为非常有趣。
已修复。如果您需要,我可以发送到您的 PM。为了不麻烦版主,我会在 KB 中发布,届时开发人员会在新版本中解决 DEAL_SL/TP。
重试后发现是我的错。感谢您的留言,MT5 在该交易服务器上的行为非常有趣。
已修复。如果您需要,我可以发送到您的 PM。为了不麻烦版主,我会在 KB 中发布,届时开发人员会在新版本中解决 DEAL_SL/TP。
是的,请发送至 PM
是的,请给我发邮件
已发送。
很少出现,但可能出现此类警报
这是一个纯粹的信息提示(不影响交易),表示 MT5-OrderSend 在工作中出现错误。此处 对该错误进行了详细讨论。不过,开发人员还不认为这是 MT5 的错误行为...
ZYMT5 的一个微妙之处已被揭示。通过库进行交易时不会出现幻影订单。
工作历史悠久,现在却飞速发展!
一些意想不到的结果。脚本会计算上一个 "头寸 "的开仓/平仓时间。
交易、自动交易系统和交易策略测试论坛
OrderCloseTime 智能交易系统 MQL5
fxsaber, 2018.07.06 00:49
结果
我还没有分析为什么库的性能比纯 MQL5 优越得多。我认为 HistorySelect 的实时速度会变慢。我没有在测试器中检查过。
ZЫ是的,HistorySelect 会变慢。
关于交易、自动交易系统和测试交易策略的论坛
库:MT4Orders
fxsaber, 2017.09.03 18:52
通过 SL 关闭的所有仓位的打印输出
关于交易、自动交易系统和测试交易策略的论坛
如何计算仓位遇到止损时的平仓价格?
fxsaber, 2018.07.10 11:46 AM
结果有点出乎意料。脚本会计算最后一个 "仓位 "的开仓/平仓时间。
我还没有分析为什么库的性能比纯 MQL5 好得多。我认为 HistorySelect 在实时情况下会变慢。我没有在测试器中检查过。
ZЫ是的,HistorySelect 会变慢。
这是最新版本的库吗?
这是图书馆的最新版本吗?
是的。
关于交易、自动交易系统和测试交易策略的论坛
库:MT4Orders
fxsaber, 2017.02.16 15:16
使用此脚本能够在 MT5 中发现执行问题。我建议您检查您的终端+交易服务器连接,如有问题,请向服务台报告。
更新了应用程序中的脚本。例如,可快速发现此类问题
关于交易、自动交易系统和测试交易策略的论坛
图书馆:MT4Orders
Andrey Khatimlianskii, 2018.06.06 01:53 pm.
现在使用长历史记录就像飞一样!
无通用的结果
使用通用型的结果
在 10K 笔交易和 20K 个订单的历史记录中,通用变体的速度要快约 30 倍。交易历史越长,加速越明显。