Discussione sull’articolo "Ordini, Posizioni e Deal in MetaTrader 5" - pagina 5

 

Ecco le informazioni di fxsaber su questoproblema:https://www.mql5.com/ru/forum/366029/page3#comment_22547881 https://www.mql5.com/ru/forum/366029/page3#comment_22547881


@RashidUmarov

chiedete agli sviluppatori di rispondere.

Библиотеки: TradesID
Библиотеки: TradesID
  • 2021.05.21
  • www.mql5.com
Статьи и техническая библиотека по автоматическому трейдингу: Библиотеки: TradesID
 

Dopo la pubblicazione dei freni del lavoro con la cronologia, è stato fatto molto lavoro dagli sviluppatori per creare cache. I freni sono scomparsi.

Forse esiste un meccanismo di cache più economico. Ma è certamente impossibile consentire i freni.


ZY Non ci sono commenti su come lavorare con la cronologia nel modo più veloce. Al momento il modo più veloce è chiamare solo HistorySelect ovunque.

HistorySelect(0, INT_MAX)
 
fxsaber:

Dopo la pubblicazione dei freni al lavoro con la cronologia, gli sviluppatori hanno lavorato molto per creare cache. I freni sono spariti.

Forse esiste un meccanismo di cache più economico. Ma è certamente impossibile consentire i freni.


ZY Non ci sono commenti sul modo più veloce di lavorare con la cronologia. Al momento il modo più veloce è chiamare solo HistorySelect ovunque.

Perché non
HistorySelect(t, INT_MAX)

dove t è una data arbitraria che non è molto tempo fa e non cambia da una chiamata all'altra (una costante unificata per tutto il programma)?

 
mktr8591:
Perché non

dove t è una data arbitraria che non è molto vecchia e non cambia da chiamata a chiamata (una costante, uniforme per tutto il programma)?

Non sono sicuro che questo renda la cache più piccola.

 
fxsaber:

Non sono sicuro che questo renda la cache più piccola.

Il consumo è ridotto. All'inizio lo prescrivevo.

bool HistorySelect2( const datetime From, const datetime To )
{
  static const datetime NewFrom = ::TimeCurrent() - 24 * 3600 & 30; // -Mese.
  
  return(::HistorySelect(From ? From : NewFrom, To));
}

#define HistorySelect HistorySelect2

Ma ho dovuto rinunciare a causa di gravi problemi.

 
#define  PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{
  PRINT(TerminalInfoInteger(TERMINAL_MEMORY_USED));
  
  if (HistorySelect(0, INT_MAX))
  {
    PRINT(HistoryDealsTotal());
    PRINT(HistoryOrdersTotal());
    
    PRINT(MQLInfoInteger(MQL_MEMORY_USED));
    PRINT(TerminalInfoInteger(TERMINAL_MEMORY_USED));
  }
}

Eseguire il risultato su Terminal con un grafico M1, 5000 barre, un simbolo, nessuna risorsa e nessun grafico.

TerminalInfoInteger(TERMINAL_MEMORY_USED) = 426
HistoryDealsTotal() = 134502
HistoryOrdersTotal() = 218740
MQLInfoInteger(MQL_MEMORY_USED) = 1
TerminalInfoInteger(TERMINAL_MEMORY_USED) = 789

È molto. 10 EA sincroni (OrderSend) consumano 4 giga. Due opzioni:

  1. Aprire un nuovo conto, trasferirvi i fondi e continuare a fare trading. Purtroppo non è sempre possibile.
  2. Combinare tutti i bot in uno solo attraverso l'asincronia(OrderSendAsync). Si tratta di una variante molto difficile da catturare in caso di trading super-attivo.
Per quanto riguarda il secondo punto, è ancora necessario scrivere un gestore (GUI e così via) dei bot incorporati in un singolo Expert Advisor.
 
fxsaber:



  1. Combinare tutti i bot in uno solo tramite asincronia(OrderSendAsync). Variante molto pesante per la cattura di bug nel trading super-attivo.

Non c'è altro modo. (a meno che, ovviamente, non si tagli la vecchia cronologia e si rifaccia l'intero algoritmo di lavoro con la cronologia, ma questo solo se MQ non restituisce il vecchio ordinamento).

 

Ciao, gente!

Sarebbe utile che @MetaQuotes aggiornasse questo articolo con le classi Trade(CAccountInfo, CSymbolInfo, COrderInfo, CHistoryOrderInfo, CPositionInfo, CDealInfo, CTrade, CTerminalInfo). Lo sviluppo di EA secondo il paradigma Object-Oriented potrebbe modificare (e semplificare) queste operazioni di sincronizzazione della cache e di ottenimento dei dati su simboli, ordini, posizioni, transazioni, scambi, ecc.

Ho ragione?

Documentation on MQL5: Standard Library / Trade Classes / CAccountInfo
Documentation on MQL5: Standard Library / Trade Classes / CAccountInfo
  • www.mql5.com
CAccountInfo - Trade Classes - Standard Library - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
 

se per favore come calcolare la commissione dell'ordine con il profitto per essere come questo

" Profitto += profitto + swap + commissione".

 

Per favore, aiutatemi con la risposta alla domanda!

Gli indicatori di posizione fluttuante "Valore di mercato" e "Profitto" nel terminale MT5 sono calcolati dal terminale stesso sulla base delle quotazioni tradotte e delle specifiche dei simboli, oppure sono tradotti dal server MT5 e memorizzati su disco?

Se vengono memorizzati nella cache, è probabile che si verifichi una mancata sincronizzazione tra le quotazioni ricevute e gli indicatori "Valore di mercato" e "Profitto" correnti ?