Bibliotecas: MT4Orders - página 70

 

Dados do teste de estresse técnico da biblioteca na conta real.

  • Um terminal MT5 b2958. Hedge.
  • 16 gráficos, cada um executando um consultor de negociação.
  • Cada Expert Advisor contém, em média, mais de 10 TS independentes (lógica e Magic).
  • A negociação é feita via MT4Orders+ByPass+Virtual+Snapshot.
  • Dados de preço via CopyTicks+SymbolInfoTick.
  • Dados não relacionados a preços - Calendário via MQL.
  • Mais de 160 TCs trabalham em paralelo. Cada um deles acompanha suas próprias posições e ordens.
  • OrdersTotal + PositionsTotal > 300.
  • Combinações de Rejeições, preenchimentos parciais e CloseBy.
  • TERMINAL_MEMORY_USED = 4 Gb. O consumo principal é o cache automático do histórico de negociação incorporado ao Terminal para cada execução do EX5: HistoryDealsTotal+HistoryOrdersTotal > 100K.
  • 35% dos redirecionamentos.
  • Volume de negócios diário > US$ 50 milhões.
  • HistoryDealsTotal diário > 1200, HistoryOrdersTotal > 1700.
  • Todas as configurações do terminal minimizadas, janelas de serviço fechadas, gráficos e terminal minimizados.
  • CPU em modo normal ~ 1%. No mercado ativo, os picos chegam a dezenas de por cento.
  • API de negociação - somente MT4Style.
  • Hot-swap EX5 (atualização) diretamente no tempo de execução.
  • Ping de 3 ms.
  • Todas as ordens de negociação são síncronas (não OrderSendAsync). As funções OnTrade não são usadas.

Nesse modo, a biblioteca lidou com todas as dessincronizações do MT5. A lógica do MT4 não foi quebrada.


Foram detectados problemas de desempenho ao trabalhar com o histórico, o que foi o motivo da atualização da biblioteca.

Após o hot-swap do EX5, os dados de sincronização são os seguintes.

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

Menos de 0,1% do tempo de execução foi gasto na sincronização do MT5. O tempo médio é de 22 microssegundos. O tempo máximo é de 225 milissegundos. Das 2,5 horas de trabalho, 51 segundos foram gastos em chamadas ao sincronizador (0,5%).


A classificação de confiabilidade da biblioteca é bastante alta. Ela pode ser recomendada.

 
fxsaber #:

Os dados do teste de estresse técnico da biblioteca estão na conta de batalha.

  • Mais de 160 TS estão trabalhando em paralelo. Cada um deles acompanha suas próprias posições e ordens.
  • OrdersTotal + PositionsTotal > 300.

Nesse modo, a biblioteca lidou com todas as dessincronizações do MT5. A lógica do MT4 não foi quebrada.


A classificação de confiabilidade da biblioteca é bastante alta. Ela pode ser recomendada.

A biblioteca pode lidar com essa carga extrema, mas há dificuldades. É necessário, de alguma forma milagrosa, encontrar uma maneira de aliviar a carga extrema.

 

@fxsaber, por favor, me aconselhe, recebi este registro:

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) = "Magnitogorsk.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

Eu negocio na abertura da corretora no mercado de ações, como resultado, abri uma posição duas vezes, o que não é crítico, mas talvez haja maneiras de evitar isso?

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

@fxsaber dica, por favor, tenho esse tipo de registro:

Obrigado pelo registro, o problema está claro. A correção estará disponível na próxima compilação.

 
fxsaber #:

Obrigado pelo registro, o problema está claro. A correção estará disponível na próxima compilação.

Olá, aguardo ansiosamente a atualização, senhor. Obrigado.....

 
fxsaber #:

Obrigado pelo registro, o problema está claro. A correção estará disponível na próxima compilação.

Correção do sexto ano, valeu a pena o trabalho(sem ofensa, só estou pensando)?

Adicionado

Há 7 anos, escrevi isso e nunca o consertei

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

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

No sexto ano de conserto, valeu a pena continuar com isso (sem ofensa, só estou pensando)?

Adicionado

Escreveu há 7 anos e nunca o corrigiu

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

Isso é completamente de uma ópera diferente.

 
Vitaly Muzichenko #:

É de uma ópera completamente diferente.

É porque o código tem meia tonelada?

Então, sim, a ópera é diferente.... :)

 
prostotrader #:

No sexto ano de conserto, valeu a pena continuar com isso(sem ofensa, só estou pensando)?

Há muito mais pessoas que acham que conhecem os recursos do MT5 do que aquelas que realmente conhecem.

Escrevi isso há 7 anos e nunca o corrigi

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

Mimo. Por favor, contenha seu desejo de ***.

 
// Lista de modificações:
// 08.02.2022
// Correção: a possibilidade de executar ordens pendentes sem etapas intermediárias do MT5 durante sua configuração/modificação é levada em conta.