程序库: MT4Orders - 页 70

 

真实账户库的技术压力测试数据。

  • 一个终端 MT5 b2958。对冲。
  • 16 个图表,每个图表运行一个交易顾问。
  • 每个智能交易系统平均包含 10 多个独立 TS(逻辑和 Magic)。
  • 通过 MT4Orders+ByPass+Virtual+Snapshot 进行交易。
  • 通过 CopyTicks+SymbolInfoTick 获取价格数据。
  • 非价格数据 - 通过 MQL 生成日历。
  • 160 多个 TC 并行工作。每个 TC 都有自己的仓位和订单。
  • 订单总数 + 仓位总数 > 300。
  • Rejects、partial fills 和 CloseBy 的组合。
  • TERMINAL_MEMORY_USED = 4 Gb。主要消耗是每次运行 EX5 时终端内置的交易历史记录自动缓存:HistoryDealsTotal +HistoryOrdersTotal > 100K。
  • 35% 的重定向。
  • 每日交易额 > 5000 万美元。
  • 每日历史交易总额 > 1200,历史订单总额> 1700。
  • 所有终端设置最小化,服务窗口关闭,图表和终端最小化。
  • 正常模式下 CPU 约为 1%。在活跃市场上,CPU 可飙升至百分之几十。
  • 交易 API - 仅 MT4Style。
  • 运行时直接热插拔 EX5(更新)。
  • 平移 3 毫秒。
  • 所有交易订单均为同步订单(非 OrderSendAsync)。不使用 OnTrade 函数。

在此模式下,库处理所有 MT5 非同步。MT4 逻辑未被破坏。


在处理历史记录时发现了性能问题,这也是更新程序库的原因。

热插拔 EX5 后,同步数据如下。

MT4ORDERS::ByPass: Amount = 486/2336655 = 0.02%, Time(mcs) = 43175/51577570 = 0.08%, TimeAvg = 22 mcs, MaxInterval = 225711 mcs., Bugs = 0

不到 0.1% 的运行时间用于 MT5 同步。平均时间为 22 微秒。最长时间为 225 毫秒。在 2.5 小时的工作时间中,有 51 秒用于同步器调用(0.5%)。


该库的可靠性相当高。值得推荐。

 
fxsaber #:

图书馆的技术压力测试数据在战斗账户上。

  • 160 多个 TS 正在并行工作。每个 TS 都有自己的位置和订单。
  • 订单总数 + 仓位总数 > 300。

在此模式下,程序库可应对 MT5 的所有不同步情况。MT4 逻辑没有中断。


该库的可靠性相当高。值得推荐。

该程序库可以处理如此极端的负载,但也存在困难。必须奇迹般地想出办法来减轻极端负荷。

 

@fxsaber 请给我建议,我得到了这个日志:

KE      0       15:00:03.865    MACD3 (MAGN,H1) Line = 1558
EG      0       15:00:03.865    MACD3 (MAGN,H1) ::OrderSelect(Result.order) = false
QR      0       15:00:03.865    MACD3 (MAGN,H1) 
OD      0       15:00:03.865    MACD3 (MAGN,H1) Alert: MT4ORDERS - not Sync with History!
RN      0       15:00:03.865    MACD3 (MAGN,H1) Alert: Please send the logs to the coauthor - https://www.mql5.com/en/users/fxsaber
IO      0       15:00:03.865    MACD3 (MAGN,H1) Alert: C:\Program Files\Открытие Брокер\MQL5\Logs\20220202.log
GP      0       15:00:03.896    MACD3 (MAGN,H1) MT4Orders.mqh
PL      0       15:00:03.896    MACD3 (MAGN,H1) Version = 2021.06.01
KJ      0       15:00:03.896    MACD3 (MAGN,H1) Compiler = 3180
NP      0       15:00:03.896    MACD3 (MAGN,H1) 2022.02.01 = 2022.02.01 00:00:00
LD      0       15:00:03.896    MACD3 (MAGN,H1) ::AccountInfoString(ACCOUNT_SERVER) = Open-Broker
QR      0       15:00:03.896    MACD3 (MAGN,H1) (ENUM_ACCOUNT_TRADE_MODE)::AccountInfoInteger(ACCOUNT_TRADE_MODE) = ACCOUNT_TRADE_MODE_REAL (2)
FK      0       15:00:03.896    MACD3 (MAGN,H1) (bool)::TerminalInfoInteger(TERMINAL_CONNECTED) = true
FP      0       15:00:03.896    MACD3 (MAGN,H1) ::TerminalInfoInteger(TERMINAL_PING_LAST) = 2630
HG      0       15:00:03.896    MACD3 (MAGN,H1) ::TerminalInfoDouble(TERMINAL_RETRANSMISSION) = 0.0
FJ      0       15:00:03.896    MACD3 (MAGN,H1) ::TerminalInfoInteger(TERMINAL_BUILD) = 3180
OQ      0       15:00:03.896    MACD3 (MAGN,H1) (bool)::TerminalInfoInteger(TERMINAL_X64) = true
CH      0       15:00:03.896    MACD3 (MAGN,H1) (bool)::TerminalInfoInteger(TERMINAL_VPS) = false
EO      0       15:00:03.896    MACD3 (MAGN,H1) (ENUM_PROGRAM_TYPE)::MQLInfoInteger(MQL_PROGRAM_TYPE) = PROGRAM_EXPERT (2)
FN      0       15:00:03.896    MACD3 (MAGN,H1) ::TimeCurrent() = 2022.02.02 15:00:03
NG      0       15:00:03.896    MACD3 (MAGN,H1) ::TimeTradeServer() = 2022.02.02 15:00:03
OD      0       15:00:03.896    MACD3 (MAGN,H1) MT4ORDERS::TimeToString(MT4ORDERS::GetTimeCurrent()) = 2022.02.02 15:00:03.742
NO      0       15:00:03.896    MACD3 (MAGN,H1) MT4ORDERS::TimeToString(PrevTimeCurrent) = 2022.02.02 15:00:02.827
FS      0       15:00:03.896    MACD3 (MAGN,H1) PrevTick = Symb = MAGN time = 2022.02.02 15:00:02.827 bid = 60.785 ask = 60.825 last = 60.790 volume = 1 4 TICK_FLAG_ASK
PL      0       15:00:03.896    MACD3 (MAGN,H1) CurrentTick = ::SymbolInfoTick(Symb,Tick) = true Symb = MAGN time = 2022.02.02 15:00:03.434 bid = 60.790 ask = 60.825 last = 60.825 volume = 82 0
NF      0       15:00:03.896    MACD3 (MAGN,H1) ::SymbolInfoString(Request.symbol,SYMBOL_PATH) = MOEX\Securities\TQBR\MAGN
NJ      0       15:00:03.896    MACD3 (MAGN,H1) ::SymbolInfoString(Request.symbol,SYMBOL_DESCRIPTION) = "马格尼托哥尔斯克.met.komb" ОАО ао
KG      0       15:00:03.896    MACD3 (MAGN,H1) ::PositionsTotal() = 4
JS      0       15:00:03.896    MACD3 (MAGN,H1) ::OrdersTotal() = 0
EE      0       15:00:03.896    MACD3 (MAGN,H1) ::HistorySelect(0,INT_MAX) = true
CQ      0       15:00:03.896    MACD3 (MAGN,H1) ::HistoryDealsTotal() = 852
KG      0       15:00:03.896    MACD3 (MAGN,H1) ::HistoryOrdersTotal() = 722
CQ      0       15:00:03.896    MACD3 (MAGN,H1) ::HistoryDealGetTicket(::HistoryDealsTotal()-1) = 108399547
MH      0       15:00:03.896    MACD3 (MAGN,H1) DEAL_ORDER = 195416657
NM      0       15:00:03.896    MACD3 (MAGN,H1) DEAL_TIME_MSC = 2022.02.02 15:00:02.848
QE      0       15:00:03.896    MACD3 (MAGN,H1) ::HistoryOrderGetTicket(::HistoryOrdersTotal()-1) = 195416657
QI      0       15:00:03.896    MACD3 (MAGN,H1) ORDER_TIME_DONE_MSC = 2022.02.02 15:00:02.848
OL      0       15:00:03.896    MACD3 (MAGN,H1) ::TerminalInfoInteger(TERMINAL_MEMORY_AVAILABLE) = 7489
GD      0       15:00:03.896    MACD3 (MAGN,H1) ::TerminalInfoInteger(TERMINAL_MEMORY_PHYSICAL) = 4095
RD      0       15:00:03.896    MACD3 (MAGN,H1) ::TerminalInfoInteger(TERMINAL_MEMORY_TOTAL) = 8190
QL      0       15:00:03.896    MACD3 (MAGN,H1) ::TerminalInfoInteger(TERMINAL_MEMORY_USED) = 701
HI      0       15:00:03.896    MACD3 (MAGN,H1) ::MQLInfoInteger(MQL_MEMORY_LIMIT) = 8388608
CJ      0       15:00:03.896    MACD3 (MAGN,H1) ::MQLInfoInteger(MQL_MEMORY_USED) = 2
MN      0       15:00:03.896    MACD3 (MAGN,H1) MT4ORDERS::IsHedging = false
MF      0       15:00:03.896    MACD3 (MAGN,H1) Res = false
PO      0       15:00:03.896    MACD3 (MAGN,H1) MT4ORDERS::OrderSendBug = 12527100
NH      0       15:00:03.896    MACD3 (MAGN,H1) Request.action = TRADE_ACTION_PENDING (5)
LO      0       15:00:03.896    MACD3 (MAGN,H1) Request.magic = 101
CF      0       15:00:03.896    MACD3 (MAGN,H1) Request.order = 0
FQ      0       15:00:03.896    MACD3 (MAGN,H1) Request.symbol = MAGN
QO      0       15:00:03.896    MACD3 (MAGN,H1) Request.volume = 82.0
KI      0       15:00:03.896    MACD3 (MAGN,H1) Request.price = 60.924999999999997
FR      0       15:00:03.896    MACD3 (MAGN,H1) Request.stoplimit = 0.0
EF      0       15:00:03.896    MACD3 (MAGN,H1) Request.sl = 57.439999999999998
QL      0       15:00:03.896    MACD3 (MAGN,H1) Request.tp = 0.0
QI      0       15:00:03.896    MACD3 (MAGN,H1) Request.deviation = 10
DM      0       15:00:03.896    MACD3 (MAGN,H1) Request.type = ORDER_TYPE_BUY_LIMIT (2)
ID      0       15:00:03.896    MACD3 (MAGN,H1) Request.type_filling = ORDER_FILLING_RETURN (2)
LD      0       15:00:03.896    MACD3 (MAGN,H1) Request.type_time = ORDER_TIME_DAY (1)
OQ      0       15:00:03.896    MACD3 (MAGN,H1) Request.expiration = 1970.01.01 00:00:00
FE      0       15:00:03.896    MACD3 (MAGN,H1) Request.comment = 
PQ      0       15:00:03.896    MACD3 (MAGN,H1) Request.position = 0
LF      0       15:00:03.896    MACD3 (MAGN,H1) Request.position_by = 0
OS      0       15:00:03.896    MACD3 (MAGN,H1) Result.retcode = 10009
ME      0       15:00:03.896    MACD3 (MAGN,H1) Result.deal = 0
KE      0       15:00:03.896    MACD3 (MAGN,H1) Result.order = 195416657
KQ      0       15:00:03.896    MACD3 (MAGN,H1) Result.volume = 82.0
CD      0       15:00:03.896    MACD3 (MAGN,H1) Result.price = 60.924999999999997
RO      0       15:00:03.896    MACD3 (MAGN,H1) Result.bid = 0.0
DG      0       15:00:03.896    MACD3 (MAGN,H1) Result.ask = 0.0
HN      0       15:00:03.896    MACD3 (MAGN,H1) Result.comment = Request executed 24.445 + 1000.080 (12527100) ms.
IH      0       15:00:03.896    MACD3 (MAGN,H1) Result.request_id = 7
CQ      0       15:00:03.896    MACD3 (MAGN,H1) Result.retcode_external = 0
RJ      0       15:00:03.896    MACD3 (MAGN,H1) MT4ORDERS::OrderSend_MaxPause = 1000000
ER      0       15:00:03.896    MACD3 (MAGN,H1) 
MG      0       15:00:03.926    MACD3 (MAGN,H1) Ордер на покупку успешно помещен с тикетом #195416665!!
 CR      0       15:00:03.926    MACD3 (MAGN,H1) Position by MAGN to be opened

我在股票市场经纪人开盘时进行交易,结果开了两次仓,这并不重要,但也许有办法避免这种情况?

 
Александр Кувакин #:

@fxsaber 请提示,有这样的日志:

感谢您提供的日志,问题已经很清楚了。修复程序将在下一个版本中提供。

 
fxsaber #:

感谢您提供的日志,问题已经很清楚了。修复程序将在下一个版本中提供。

您好,期待更新,谢谢.....。

 
fxsaber #:

感谢您提供的日志,问题已经很清楚了。修复程序将在下一个版本中提供。

第六年的修复,值得吗(无意冒犯,只是想知道)?

已添加

7 年前我写了这个,但从未修复过一次

https://www.mql5.com/ru/blogs/post/557544

Отслеживание ордера, после команды OrderSendAsync
Отслеживание ордера, после команды OrderSendAsync
  • 2016.10.29
  • www.mql5.com
Отслеживание ордера, после команды OrderSendAsync Михаил | 23 апреля, 2015 В статье рассказывается принцип отслеживания ордера после команды OrderSendAsync, если нет события TradeTransaction
 
prostotrader #:

第六年修复它,值得去做吗(无意冒犯,只是想知道)?

已添加

7 年前写的,从未修改过一次

https://www.mql5.com/ru/blogs/post/557544

这完全是另一部歌剧的内容。

 
Vitaly Muzichenko #:

这是一部完全不同的歌剧。

是因为代码有半吨重吗?

那么是的,歌剧是不同的....:)

 
prostotrader #:

第六年修复它,值得去做吗(无意冒犯,只是想知道)?

自以为了解 MT5 功能的人明显多于真正了解的人。

这是我 7 年前写的,从未更正过一次

https://www.mql5.com/ru/blogs/post/557544

米莫。请克制你的***欲望。

 
// 更改列表:
// 08.02.2022
// 修正:在设置/修改挂单时,考虑到了执行挂单时没有 MT5 中间步骤的可能性。