Toute question d'un PROFI à un SUPER PROFI - 1. - page 43

 
fxsaber:

Je ne comprends pas. Si quelque chose a changé dans la base de données, le seul moyen de le savoir est de le comparer avec l'état précédent de la base de données.

Vous pouvez comparer chaque élément correspondant de la base de données. Ou vous pouvez calculer le hachage à partir d'eux et comparer les hachages.

Le terminal est déjà au courant de ce changement (OnTrade). C'est pourquoi je veux le savoir dans ma fonction.

 
fxsaber:

Particulièrement pertinent pour MT4, où le changement de pas de time_msc est de 1000ms.

Dommage, cela rend impossible l'utilisation de l'option la plus simple que je connaisse pour le moment.

 
Andrey Khatimlianskii:

Le terminal est déjà au courant de ce changement(OnTrade). C'est pourquoi je veux le savoir dans ma fonction.

Il n'y a pas d'événement commercial dans MT4.

 
fxsaber:

L'événement commercial n'est pas dans MT4.

Il n'a juste pas été acheminé vers MKL. Le terminal ne met pas à jour la liste des transactions sur une minuterie.

 
Andrey Khatimlianskii:

C'est juste que ça n'a pas été câblé dans le MCL. Le terminal ne met pas à jour la liste des transactions sur une minuterie.

Par conséquent, uniquement par le biais d'une vérification.

 
Andrey Khatimlianskii:

1. Quel est le moyen le plus simple de savoir que l'appel de la fonction est sur le même tick que l'appel précédent ?

Le temps (TimeCurrent) peut rester le même, le temps en ms de SymbolInfoTick, théoriquement aussi.

La comparaison des temps d'offre, de demande et de ms est assez coûteuse.

Je ne suggère pas d'organiser le contrôle dans le conseiller expert lui-même, je veux obtenir une fonction indépendante universelle.


La même question concerne les opérations commerciales. Comment savoir si quelque chose a changé dans la liste des ordres/positions (y compris les niveaux ouverts, SL et TP) depuis la dernière exécution ?

J'aurais besoin d'activer un indicateur dans OnTrade (et de le réinitialiser une fois terminé).

Mais, encore une fois, j'aimerais une solution universelle.


Qui a une idée ?

Bien :

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   int count = 0;
   if ( A ) some_func( count );
   if ( B ) some_func( count );
   if ( C ) some_func( count );
}
//+------------------------------------------------------------------+
void some_func( int& count )
{
   if( count++ > 0 )
      return;
      
   // recalculate only once on each tick
}
//+------------------------------------------------------------------+
 
Koldun Zloy:

Ok :

Merci.

Andrey Khatimlianskii:

Je ne suggère pas l'option d'organiser le contrôle dans l'EA lui-même, je veux juste obtenir une fonction indépendante universelle.

 
Andrey Khatimlianskii:

Merci.

Puisque cela n'a pas encore été suggéré, je vais vous donner une idée de ce que je ferais, vérifier l'heure du dernier PostMessage ou quelque chose comme ça, probablement des bêtises, je ne suis pas très versé dans l'Api.

 
Aleksey Mavrin:

Vérifier l'heure du dernier PostMessage ou quelque chose comme ça n'a probablement aucun sens, je ne m'y connais pas tellement en Api.

Oui, cela ressemble à une absurdité)

Merci d'avoir essayé.

 
Andrey Khatimlianskii:

Irréaliste sans contrôle dans l'EA elle-même.

Non seulement cela, mais ce n'est pas nécessaire. La fonction demandée sera appelée dans l'EA, c'est-à-dire qu'il s'agit essentiellement du même contrôle dans l'EA, mais moins invasif.