FORTI. Problemi di applicazione - pagina 9

 
Renat:
Questo è il terminale 1060 e il server è ancora 1035.
Capito))
 

Buon pomeriggio, Renat!

Mentre si progetta una modalità di monitoraggio degli ordini "di emergenza" (nel caso in cui l'evento OnTradeTransaction non arrivi),

Ho rilevato che un ordine MARKET appare nella storia in più di 3 SECONDI:

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

Il codice EA che ha prodotto questo log è allegato.

Prima, il tempo di attesa era di 1000 ms, poi 2000, 3000 e infine 4000 ms.

Sono stati inviati 2 comandi per ogni periodo(posizione aperta - chiusura)

Non è troppo lungo per un ordine MARKET?

P/S Demo Open (terminale build 1060)

File:
History_bug.mq5  10 kb
 

Non ho ancora eseguito il codice, ma la fonte vede il classico errore di data finale errata in HistorySelect.

Ogni programmatore alle prime armi chiama questa funzione con la data sbagliata, morde costantemente la fine della storia e trova "una lunga transazione nella storia".

 

Questa è probabilmente la funzione, poiché "ogni primo" fa un "errore classico".

In quel file c'è un tentativo di leggere la storia da una certa data al momento attuale. Potete dirmi come fare questo correttamente, per non "fare uno spuntino alla fine della storia"?

 

L'errore è che la gente non pensa a quale sia l'ora corrente e mette la data sbagliata dalla fonte sbagliata.

È sufficiente specificare una data lontana conosciuta come data di fine, piuttosto che l'obsoleto serverTime.

 
Renat:

L'errore è che la gente non pensa a quale sia l'ora corrente e mette la data sbagliata dalla fonte sbagliata.

È sufficiente specificare la data lontana conosciuta come data di fine, piuttosto che l'obsoleto serverTime.

Forse l'aiuto, con l'esempio, può essere corretto anche allora?

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

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

Renat, hai già lavorato con OnTradeTransaction()?

No, purtroppo, molto occupato.

Provate voi stessi sul nostro server MetaQuotes-Demo.

 

Dalla frase di Renat

È sufficiente specificare una data lontana nota come data di fine, piuttosto che l'obsoleto serverTime.

Ho capito che dovresti specificare la data di domani (o una data ancora più lontana) come data di fine e sarai felice.

 
Renat:

L'errore è che la gente non pensa a quale sia l'ora corrente e mette la data sbagliata dalla fonte sbagliata.

È sufficiente specificare una data lontana conosciuta come data di fine, piuttosto che l'obsoleto serverTime.

E l'"obsoleto"TimeTradeServer() va bene come data di inizio?
 
Mikalas:
E come data di inizio, il "superato"TimeTradeServer() è anche adatto?

Entrambe le date di inizio e fine devono essere fissate con la consapevolezza degli errori e con un margine obbligatorio. Cioè meno N secondi e più N secondi almeno.

TimeTradeServer() non è un tempo esatto reltime, ma è aggiornato esclusivamente dai tick di prezzo che arrivano nella panoramica del mercato.


Se improvvisamente non hai dati nel campione della storia, allora il 99% dell'errore è nei confini della query.