Discussion de l'article "Ordres, positions et transactions dans MetaTrader 5" - page 5

 

Voici des informations de fxsaber à cesujet: https://www.mql5.com/ru/forum/366029/page3#comment_22547881 https://www.mql5.com/ru/forum/366029/page3#comment_22547881


@RashidUmarov

veuillez demander aux développeurs de répondre.

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

Après la publication des freins au travail sur l'histoire, un travail important a été réalisé par les développeurs pour créer des caches. Les freins ont disparu.

Il existe peut-être un mécanisme de mise en cache plus économique. Mais il est certainement impossible d'autoriser les freins.


ZY Il n'y a pas de commentaires sur la manière la plus rapide de travailler avec l'historique. Pour l'instant, la méthode 100% rapide consiste à n'appeler que HistorySelect partout.

HistorySelect(0, INT_MAX)
 
fxsaber:

Après la publication des freins au travail sur l'histoire, un travail important a été réalisé par les développeurs pour créer des caches. Les freins ont disparu.

Il existe peut-être un mécanisme de mise en cache plus économique. Mais il est certainement impossible d'autoriser les freins.


ZY Il n'y a pas de commentaires sur la façon la plus rapide de travailler avec l'historique. Pour l'instant, la méthode 100% rapide consiste à n'appeler que HistorySelect partout.

Pourquoi pas
HistorySelect(t, INT_MAX)

où t est une date arbitraire qui n'est pas très éloignée et qui ne change pas d'un appel à l'autre (une constante unifiée pour l'ensemble du programme) ?

 
mktr8591:
Pourquoi pas

où t est une date arbitraire qui n'est pas très ancienne et qui ne change pas d'un appel à l'autre (une constante, uniforme pour tout le programme) ?

Je ne suis pas sûr que cela réduise la taille du cache.

 
fxsaber:

Je ne suis pas sûr que cela réduise la taille du cache.

La consommation est réduite. Au début, je le prescrivais.

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

#define HistorySelect HistorySelect2

Mais j'ai dû y renoncer en raison de graves problèmes.

 
#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));
  }
}

Exécuter le résultat sur le terminal avec un graphique M1, 5000 barres, un symbole, aucune ressource et aucun graphique.

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

C'est beaucoup. 10 EA synchrones (OrderSend) consomment 4 gigas. Deux options :

  1. Ouvrir un nouveau compte, y transférer des fonds et continuer à trader dessus. Malheureusement, ce n'est pas toujours possible.
  2. Combiner tous les bots en un seul grâce à l'asynchronisme(OrderSendAsync). Il s'agit d'une variante très difficile pour détecter les bogues dans le cas d'un trading super-actif.
En ce qui concerne le second point, il est toujours nécessaire d'écrire un gestionnaire (GUI, etc.) de bots intégrés dans un seul Expert Advisor.
 
fxsaber:



  1. Combiner tous les robots en un seul grâce à l'asynchronisme(OrderSendAsync). Variante très lourde de la capture de bogues dans le cadre d'un trading super-actif.

Il n'y a pas d'autre moyen. (à moins, bien sûr, de couper l'ancien historique et de refaire tout l'algorithme de travail avec l'historique, mais seulement si le MQ ne renvoie pas l'ancien tri).

 

Bonjour à tous !

Il serait utile que @MetaQuotes mette à jour cet article avec les Trade Classes(CAccountInfo, CSymbolInfo, COrderInfo, CHistoryOrderInfo, CPositionInfo, CDealInfo, CTrade, CTerminalInfo). Le développement de l'EA selon le paradigme orienté objet pourrait modifier (et simplifier) ces opérations de synchronisation du cache et d'obtention de données sur les symboles, les ordres, les positions, les transactions, les opérations, etc.

Ai-je raison ?

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
 

Comment calculer la commission d'une commande avec un bénéfice comme ceci ?

" Profit += profit + swap + commission "

 

Aidez-nous à répondre à la question !

Les indicateurs de position flottante "Market Value" et "Profit" dans le terminal MT5 sont calculés par le terminal lui-même sur la base des cotations traduites et de la spécification des symboles, ou ils sont traduits par le serveur MT5 et mis en cache sur le disque ?

S'ils sont mis en cache, est-il possible de constater une désynchronisation entre les cours reçus et les indicateurs "Market Value" et "Profit" actuels ?