FORTES. Questões de aplicação da lei - página 9

 
Renat:
Este é o terminal 1060 e o servidor ainda é 1035.
Entendi)))
 

Boa tarde, Renat!

Ao projetar o modo de rastreamento de pedidos "de emergência" (caso o evento da OnTradeTransaction não venha),

Detectei que uma ordem de MERCADO aparece na história em mais de 3 SEGUNDOS:

CN      0       07:10:26.424    History_bug (Eu-3.15,H1)        Ордер отослан =  2015.02.10 07:10:26
CE      0       07:10:26.424    History_bug (Eu-3.15,H1)        Уникальный номер ордера (mem_magic) = 1010000
CG      0       07:10:27.554    History_bug (Eu-3.15,H1)        Время ожидания составило = 1138 мсек
NN      0       07:10:27.554    History_bug (Eu-3.15,H1)        CheckOrders: Не получен билет ордера!
JD      0       07:10:29.328    History_bug (Eu-3.15,H1)        Ордер отослан =  2015.02.10 07:10:29
DK      0       07:10:29.328    History_bug (Eu-3.15,H1)        Уникальный номер ордера (mem_magic) = 1010001
EP      0       07:10:30.596    History_bug (Eu-3.15,H1)        Время ожидания составило = 1279 мсек
RE      0       07:10:30.596    History_bug (Eu-3.15,H1)        CheckOrders: Не получен билет ордера!
KJ      0       07:10:41.112    History_bug (Eu-3.15,H1)        Ордер отослан =  2015.02.10 07:10:41
LQ      0       07:10:41.112    History_bug (Eu-3.15,H1)        Уникальный номер ордера (mem_magic) = 1010000
GJ      0       07:10:43.123    History_bug (Eu-3.15,H1)        Время ожидания составило = 2012 мсек
HK      0       07:10:43.123    History_bug (Eu-3.15,H1)        CheckOrders: Не получен билет ордера!
IQ      0       07:10:46.176    History_bug (Eu-3.15,H1)        Ордер отослан =  2015.02.10 07:10:46
LG      0       07:10:46.176    History_bug (Eu-3.15,H1)        Уникальный номер ордера (mem_magic) = 1010001
DD      0       07:10:48.193    History_bug (Eu-3.15,H1)        Время ожидания составило = 2028 мсек
LQ      0       07:10:48.193    History_bug (Eu-3.15,H1)        CheckOrders: Не получен билет ордера!
EG      0       07:10:58.440    History_bug (Eu-3.15,H1)        Ордер отослан =  2015.02.10 07:10:58
NL      0       07:10:58.440    History_bug (Eu-3.15,H1)        Уникальный номер ордера (mem_magic) = 1010000
NN      0       07:11:01.531    History_bug (Eu-3.15,H1)        Время ожидания составило = 3104 мсек
PG      0       07:11:01.531    History_bug (Eu-3.15,H1)        CheckOrders: Не получен билет ордера!
DM      0       07:11:06.359    History_bug (Eu-3.15,H1)        Ордер отослан =  2015.02.10 07:11:06
NR      0       07:11:06.359    History_bug (Eu-3.15,H1)        Уникальный номер ордера (mem_magic) = 1010001
RG      0       07:11:09.649    History_bug (Eu-3.15,H1)        Время ожидания составило = 3292 мсек
HN      0       07:11:09.649    History_bug (Eu-3.15,H1)        CheckOrders: Не получен билет ордера!
LS      0       07:11:19.636    History_bug (Eu-3.15,H1)        Ордер отослан =  2015.02.10 07:11:19
GH      0       07:11:19.636    History_bug (Eu-3.15,H1)        Уникальный номер ордера (mem_magic) = 1010000
RQ      0       07:11:23.808    History_bug (Eu-3.15,H1)        Время ожидания составило = 4180 мсек
PF      0       07:11:23.808    History_bug (Eu-3.15,H1)        CheckOrders: Билет получен = 9833674
QE      0       07:11:27.865    History_bug (Eu-3.15,H1)        Время ожидания составило = 4056 мсек
HN      0       07:11:27.865    History_bug (Eu-3.15,H1)        CheckOrders: Сделка совершена, билет = 9833674
HD      0       07:11:30.832    History_bug (Eu-3.15,H1)        Ордер отослан =  2015.02.10 07:11:30
IK      0       07:11:30.832    History_bug (Eu-3.15,H1)        Уникальный номер ордера (mem_magic) = 1010001
LP      0       07:11:34.962    History_bug (Eu-3.15,H1)        Время ожидания составило = 4134 мсек
DG      0       07:11:34.962    History_bug (Eu-3.15,H1)        CheckOrders: Билет получен = 9833675
CD      0       07:11:39.018    History_bug (Eu-3.15,H1)        Время ожидания составило = 4057 мсек
JN      0       07:11:39.018    History_bug (Eu-3.15,H1)        CheckOrders: Сделка совершена, билет = 9833675

O código EA que produziu este registro está anexado.

Primeiro, o tempo de espera foi de 1000 ms, depois 2000, 3000 e finalmente 4000 ms.

2 comandos foram enviados para cada período(posição aberta - fechar)

Isso não é muito tempo para uma ordem de MERCADO?

P/S Demo Open (terminal build 1060)

Arquivos anexados:
History_bug.mq5  10 kb
 

Ainda não executei o código, mas a fonte vê o erro clássico de data final incorreta na HistorySelect.

Todo primeiro programador chama esta função com a data errada, continua mordendo o fim da história e encontra "transação longa na história".

 

Esta é provavelmente a função, já que "cada primeiro" comete um "erro clássico".

Nesse arquivo, há uma tentativa de ler a história de alguma data até o momento atual. Você pode me dizer como fazer isso corretamente, para não "petiscar no final da história"?

 

O erro é que as pessoas não pensam sobre qual é a hora atual e colocam a data errada da fonte errada.

É suficiente especificar uma data distante conhecida como a data final, ao invés do tempo obsoleto do servidor.

 
Renat:

O erro é que as pessoas não pensam sobre qual é a hora atual e colocam a data errada da fonte errada.

É suficiente especificar a data distante conhecida como a data final, em vez do tempo obsoleto do servidorTime.

Talvez a ajuda, com o exemplo nela contido, também possa ser corrigida então?

https://www.mql5.com/ru/docs/trading/historyselect

Документация по MQL5: Торговые функции / HistorySelect
Документация по MQL5: Торговые функции / HistorySelect
  • www.mql5.com
Торговые функции / HistorySelect - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
papaklass:

Renat, você já trabalhou com a OnTradeTransaction()?

Não, infelizmente, muito ocupado.

Por favor, tente você mesmo em nosso servidor MetaQuotes-Demo.

 

Da frase de Renat

É suficiente especificar uma data distante conhecida como a data final, ao invés do tempo obsoleto do servidor.

Entendi que você deveria especificar a data de amanhã (ou uma data ainda mais distante) como a data final e você ficará feliz.

 
Renat:

O erro é que as pessoas não pensam sobre qual é a hora atual e colocam a data errada da fonte errada.

É suficiente especificar uma data distante conhecida como a data final, em vez do tempo obsoleto do servidorTime.

E oTimeTradeServer() "obsoleto" está OK como a data de início?
 
Mikalas:
E como data de início, oTimeTradeServer() "desatualizado" também é adequado?

As datas de início e fim devem ser definidas com tolerância e com a margem necessária. Isso é menos N segundos e mais N segundos, pelo menos.

O TimeTradeServer() não é um tempo exato de reltime, mas é atualizado apenas por ticks de preço que entram na visão geral do mercado.


Se de repente você não tiver dados na amostra do histórico, então 99% dos erros estão em limites de consulta.