Библиотеки: MT4Orders - страница 66

 
// Список изменений:
// 12.01.2022
//   Fix: OrderPrint() выводит корректные данные редких типов MT5-ордеров/сделок.
 
// Список изменений:
// 14.01.2022
//   Fix: Значительно ускорена OrderSelect(index, SELECT_BY_POS, MODE_HISTORY) в ByPass-режиме.
 

Данные технического стресс-теста библиотеки на боевом счету.

  • Один терминал MT5 b2958. Hedge.
  • 16 чартов, на каждом запущен торговый советник.
  • Каждый советник в среднем содержит больше 10 независимых ТС (логика и мэджик).
  • Торговля ведется через MT4Orders+ByPass+Virtual+Snapshot.
  • Ценовые данные через CopyTicks+SymbolInfoTick.
  • Не ценовые данные - Календарь через MQL.
  • Более 160 ТС работает параллельно. Каждая сопровождает свои позиции и отложки.
  • OrdersTotal + PositionsTotal > 300.
  • Комбинации реджектов, частичных заливок и CloseBy.
  • TERMINAL_MEMORY_USED = 4 Gb. Основное потребление - встроенные в Терминал на каждый запущенный EX5 автоматический кеш истории торгов: HistoryDealsTotal+HistoryOrdersTotal > 100K.
  • 35% реджектов.
  • Суточный торговый оборот > $50 mio.
  • Суточные HistoryDealsTotal > 1200, HistoryOrdersTotal > 1700.
  • Все настройки Терминала сведены к минимуму, служебные окна закрыты, чарты и терминал минимизированы.
  • CPU в нормальном режиме ~ 1%. На активном рынке всплески до десятков процентов.
  • Торговый API - MT4Style only.
  • Горячая замена EX5 (обновление) прямо во время работы.
  • Ping 3 ms.
  • Все торговые приказы синхронные (не 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 ТС работает параллельно. Каждая сопровождает свои позиции и отложки.
  • OrdersTotal + PositionsTotal > 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) = "Магнитогорск.мет.комб" ОАО ао
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 #:

Это абсолютно с другой оперы.

Это потому что кода пол-тонны?

Тогда да, опера другая.... :)