MT5 et la vitesse en action - page 27

 
fxsaber:

Selon vous, quel terminal consomme le plus de CPU ?

2 et voici pourquoi

 
fxsaber:

Pour réduire le CPU, je recommande de fermer toutes les sous-fenêtres du terminal (Market Watch, Navigator, Tools, etc.), de minimiser tous les graphiques et de minimiser le terminal lui-même.

Retirez tous les symboles inutilisés du Market Watch. C'est particulièrement important pour les VPS.


Je suggère d'automatiser ces actions d'une manière ou d'une autre. Avant de quitter votre VPS, appuyez sur et quittez. Quand vous entrez dans la presse, vous voyez tout.

Cela fait longtemps que je dis que les algotraders ont besoin d'une autre version du terminal, sans tous ces réglages !

En plus de tout ce qui précède, j'en ai ajouté un nouveau pour chaque EA :

ChartSetInteger(0,CHART_SHOW,false);

Toujours des retards :(

 
A100:

Le 2e et voilà pourquoi.

Oui, le deuxième.

 
Quelle est l'architecture de SymbolInfoTick? On ne comprend pas pourquoi il peut fonctionner pendant des dizaines de millisecondes.
 

Le b2560 perd énormément en performance par rapport au b2592. J'ai hâte de corriger ce bogue.

Ce fil de discussion s'est avéré utile.

 
fxsaber:

Le b2560 perd énormément en performance par rapport au b2592. En attente de la correction du bug.

La b2593 a été corrigée. Merci !

 
L'ajout de l'ordre/de la transaction à l'historique des transactions entraînera une reconstruction complète du cache HistorySelect, et non une reconstruction partielle. Nous avons donc des décalages dans le déclenchement des commandes.
// Демонстрация полного (не частичного) пересбора HistorySelect-кеша.
#include <fxsaber\Benchmark.mqh> // https://c.mql5.com/3/321/Benchmark.mqh

input int inAlertTime = 1; // Нижний порог в миллисекундах

#define _B2(A) _B(A, inAlertTime)

const bool Init = EventSetTimer(1);

void OnTimer()
{
  static MqlTradeRequest Request = {0};
  static MqlTradeResult Result = {0};

  if (PositionSelectByTicket(Result.order)) // Если позиция открыта - закрываем.
  {
    Request.type = ORDER_TYPE_SELL;
    Request.price = SymbolInfoDouble(_Symbol, SYMBOL_BID);
    Request.position = Result.order;
  }
  else // Иначе - открываем.
  {
    Request.action = TRADE_ACTION_DEAL;
    Request.type = ORDER_TYPE_BUY;
    Request.symbol = _Symbol;
    Request.volume = 0.1;
    Request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
    Request.position = 0;
  }

  if (OrderSend(Request, Result))
    _B2(HistorySelect(0, INT_MAX));
}

Résultat.
2020.09.08 20:23:32.103 Alert: Time[Test6.mq5 411: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.08 20:23:32.239 Alert: Time[Test6.mq5 411: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.08 20:31:59.863 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 9 ms.
2020.09.08 20:32:00.845 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.08 20:32:01.856 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 4 ms.
2020.09.08 20:32:02.846 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 7 ms.


Pourquoi c'est important. Imaginons qu'un robot HFT soit en marche. Sur le même compte, une transaction est exécutée à la main. Voilà, le robot HFT a supprimé le cache HistorySelect avec les conséquences appropriées. Bien sûr, l'histoire du robot HFT n'est pas de 10 000 ordres/opérations, mais bien plus. Il serait coûteux de reconstruire l'ensemble du cache pour un tel historique. C'est pourquoi il est logique de les ajouter.


Il est clair que le trading manuel ne doit pas ralentir les robots. Pour le trading algorithmique pur, le problème se pose lorsque les ordres sont déclenchés.

 

Les fonctions permettant de réaliser des instantanés complets (tableaux de structures) de l'environnement commercial actuel (positions et ordres) font cruellement défaut.

Une variante à travers les fonctions Position* et Order* provoque des collisions (négociation active) lors du passage de ces deux listes dans la boucle. Quelque chose est perdu ou non comptabilisé.

Des instantanés complets permettraient d'éviter ces problèmes.


ZZY Instantanés complets pour Market Watch - pas encore d'évaluation de la pertinence. Rapprocher MT5 du HFT (LCI).

 

J'ai réussi (sans le vouloir) à mettre le terminal (et aucun) dans un état où le CPU est à 100% et le temps d'attente de OrderSend est supérieur à une seconde.

Il ne sera probablement pas facile d'en trouver la cause.


ZZY Il semble que ces freins soient causés par une conception similaire.

void OnTrade()
{
  OnTick();
}

Je n'ai pas réussi à créer un code pour le reproduire.


En fait, il est possible de mettre le terminal dans un état où les ordres de transaction seront exécutés en quelques secondes (journal du terminal) avec un ping de 50 ms. Une fois les EA supprimés, les ordres de transaction commencent à être exécutés dans les 100 ms.

 
fxsaber:

Les fonctions permettant de réaliser des instantanés complets (tableaux de structures) de l'environnement commercial actuel (positions et ordres) font cruellement défaut.

Une variante à travers les fonctions Position* et Order* provoque des collisions (négociation active) lors du passage de ces deux listes dans la boucle. Quelque chose est perdu ou non comptabilisé.

Des instantanés complets permettraient d'éviter ces problèmes.


ZZY Instantanés complets pour Market Watch - pas encore d'évaluation de la pertinence. Rapprocher MT5 du HFT (LCHI).

Et des fonctions à plein temps pour suivre la position de la commande-transaction par ticket et en arrière par position de ticket pour comprendre ce qu'était la commande et les termes de la transaction. Le suivi par le statut de l'histoire est une méchante réalité.

L'environnement full click est cool, mais apparemment cher et pas souvent nécessaire. bien que lorsque le marché s'effondre)))).

Pour moi, je divise un ordre et un ordre. Un ordre d'exécution d'un ordre est un ordre en attente. L'ordre de marché est déroutant.

Ne vous fiez pas uniquement à l'opinion d'un non-professionnel.