conseiller expert - questions diverses - page 17

 

#Calculs des commandes et mises à jour des infocomptes- Ouvert

( J'ai déjà demandé - mais j'ai encore besoin d'aide )

J'appelle mes fonctions de calcul par OnTick() ou Start(), et elles dépendent des ticks des symboles du graphique.
Et j'ai commencé à chercher comment faire pour que les mises à jour des calculs de mon EA ne dépendent pas des ticks et des symboles ( / Chart - Ticks, Symbols ).
J'essaie juste de faire en sorte que les mises à jour des calculs et des informations sur le compte de tous les ordres soientsynchronisées (en temps réel) avec "Terminal > Trade".

S'il vous plaît aidez-moi, merci.
Merci d'avance.

 
Documentation on MQL5: Language Basics / Functions / Event Handling Functions
Documentation on MQL5: Language Basics / Functions / Event Handling Functions
  • www.mql5.com
Language Basics / Functions / Event Handling Functions - Reference on algorithmic/automated trading language for MetaTrader 5
 
Marco vd Heijden:

Et SymbolName(x,1) ;

Bon commentaire, dont il m'a aidé, merci beaucoup.
Maintenant, j'utilise OnTick() et OnTimer(), ces deux fonctions fonctionnent bien pour moi. (C'est la première fois que j'utilise OnTimer() pour un EA).

---

J'aimerais aussi essayer les Ticks. Je n'ai besoin que de ticks à partir de quels symboles (paires) sur 'Terminal > Trade' et le symbole graphique actuel. Est-ce que cette fonction SymbolName() peut m'aider ?
S'il vous plaît, aidez-moi ou donnez-moi un conseil, comment puis-je faire cela ?

Tous nos vœux.

 
   for(int i=0;i<SymbolsTotal(1);i++)
     {
      Print(i," Symbol: ",SymbolName(i,1)," Ask: ",MarketInfo(SymbolName(i,1),MODE_ASK)," Bid: ",MarketInfo(SymbolName(i,1),MODE_BID));
     }
 
Marco vd Heijden:
   for(int i=0;i<SymbolsTotal(1);i++)
     {
      Print(i," Symbol: ",SymbolName(i,1)," Ask: ",MarketInfo(SymbolName(i,1),MODE_ASK)," Bid: ",MarketInfo(SymbolName(i,1),MODE_BID));
     }

Un exemple étonnant et un commentaire vraiment utile pour moi, merci beaucoup.

Est-il possible que les ticks proviennent de paires / symboles commerciaux, s'il vous plaît ?
Parce que presque tout le temps mon Market Watch montre tous les symboles - en particulier je cherche de nouvelles bonnes paires pour les trades et c'est la seule raison pour laquelle je recherche des moyens pour savoir comment obtenir ' Terminal > Trade ' les symboles / paires, juste les ticks d'ouverture des trades actuellement.

Merci beaucoup par avance.

 
non mais vous pouvez mettre à jour le prix dans la fonction OnTimer() réglée sur une faible valeur par exemple 250 millisecondes seront égales à 4 ticks par seconde donc pourquoi en avez-vous besoin ?
 
Marco vd Heijden:
Non, mais vous pouvez mettre à jour le prix dans la fonction OnTimer() réglée sur une faible valeur, par exemple 250 millisecondes seront égales à 4 ticks par seconde, alors pourquoi en avez-vous besoin ?

Merci pour votre commentaire.

( subtopic -#Calculs des ordres et mises à jour des informations sur le compte - Open) Comme je l'ai mentionné, j'utilise les calculs de profit des ordres et cela n'est pas synchronisé avec ' Terminal > Trade ', c'est la seule raison.
Donc, parfois la volatilité est très faible, les ticks sont de plus en plus petits, et je pense que les fonctions peuvent être exécutées 4 fois par seconde, donc cela ne sert à rien ( / vain ).

Si je n'arrive pas à trouver le moyen de me donner les ticks de ' Terminal > Trade ' pour la synchronisation des ordres, des calculs de profit et des informations de compte ( / mises à jour ). Je vais utiliser vos méthodes très utiles - lequel vous m'avez montré que les moyens dans vos derniers commentaires, merci beaucoup. ( J'ai déjà testé et cette façon fonctionne moi )

Merci d'avance.

 

Si vous êtes vraiment intéressé, vous pouvez utiliser.. :

struct MqlTick
  {
   datetime     time;          // Time of the last prices update
   double       bid;           // Current Bid price
   double       ask;           // Current Ask price
   double       last;          // Price of the last deal (Last)
   ulong        volume;        // Volume for the current Last price
   long         time_msc;      // Time of a price last update in milliseconds
   uint         flags          // Tick flags
  };

La structure pour retourner les prix actuels (MqlTick)

C'est une structure pour stocker les derniers prix du symbole. Elle est conçue pour une récupération rapide des informations les plus demandées sur les prix actuels.

La variable de type MqlTick permet d'obtenir les valeurs de Ask, Bid, Last et Volume en un seul appel de la fonction SymbolInfoTick().

Les paramètres de chaque tick sont renseignés, qu'il y ait ou non des changements par rapport au tick précédent. Ainsi, il est possible de trouver un prix correct pour n'importe quel moment dans le passé sans avoir besoin de rechercher les valeurs précédentes dans l'historique des tick. Par exemple, même si seul le cours acheteur change pendant l'arrivée d'un tick, la structure contient toujours d'autres paramètres, notamment le cours vendeur précédent, le volume, etc.

Vous pouvez analyser les drapeaux de tick pour découvrir quelles données ont été modifiées exactement :

  • TICK_FLAG_BID - le tick a changé un prix d'achat (Bid)
  • TICK_FLAG_ASK - un tick a modifié un prix d'achat.
  • TICK_FLAG_LAST - un tick a changé le dernier prix de la transaction.
  • TICK_FLAG_VOLUME - Un tick a modifié un volume.
  • TICK_FLAG_BUY - Un tick est le résultat d'une transaction d'achat.
  • TICK_FLAG_SELL - un tick est le résultat d'une transaction de vente.

Exemple :

void OnTick()
  {
   MqlTick last_tick;
//---
   if(SymbolInfoTick(Symbol(),last_tick))
     {
      Print(last_tick.time,": Bid = ",last_tick.bid,
            " Ask = ",last_tick.ask,"  Volume = ",last_tick.volume);
     }
   else Print("SymbolInfoTick() failed, error = ",GetLastError());
//---
  }

Voir aussi

https://www.mql5.com/en/docs/constants/structures/mqltick

Structures et Classes, CopyTicks(), SymbolInfoTick()

Vous pouvez donc l'utiliser pour vérifier s'il y a eu un nouveau tick pour un symbole spécifique, mais ce sera en fait une étape de plus que de lire directement les niveaux de prix, donc une fois de plus, pourquoi en auriez-vous besoin ?

Documentation on MQL5: Standard Constants, Enumerations and Structures / Data Structures / Price Data Structure
Documentation on MQL5: Standard Constants, Enumerations and Structures / Data Structures / Price Data Structure
  • www.mql5.com
Standard Constants, Enumerations and Structures / Data Structures / Price Data Structure - Reference on algorithmic/automated trading language for MetaTrader 5
 

Marco vd Heijden:

Eh bien, si vous êtes vraiment dans ce domaine, vous pouvez utiliser : ...
Donc vous pouvez l'utiliser pour vérifier s'il y a eu un nouveau tick pour un symbole spécifique, mais ce sera en fait une étape de plus que de lire directement les niveaux de prix directement, donc encore une fois, pourquoi en auriez-vous besoin.

Merci pour votre commentaire informatif, j'apprécie beaucoup.

---

Si j'ai raison, cette partie de la phrase est une question.

... pourquoi en auriez-vous besoin ?
Il
n'y a qu'une seule raison, j'essaie d'empêcher les boucles / exécutions de fonctions non pertinentes.

( Je voudrais mentionner qu'aujourd'hui, alors que je testais le calcul du profit des ordres de mon EA, le calcul était continuellement mis à jour ( / boucles pour rien ) Je l'ai testé sur le graphique EURUSD, et pendant que je testais, j'ai vu un volume très faible, presque 20 ( pas plus ) par minute.
Et pendant que je testais, une fois de plus, j'étais sûr que je ne pouvais pas trouver un moyen qui me donnerait seulement ' Terminal > Trade ' Ticks. Je voudrais dire une fois de plus qu'il n'y a aucune raison.
Je sais seulement que les moyens qui peuvent me donner des ticks OnTick() seulement les ticks pourraient venir de Chart Symbol. Et d'autres OnTimer() il pourrait me donner 4 ticks par seconde... et ainsi de suite, ce que j'ai appris de vos très utiles et grands commentaires, encore un merci beaucoup pour cela. )

Et je dois décrire ma situation.

Le calcul du profit de mes ordres peut être synchronisé avec le panneau Terminal Trade pendant que mon EA fonctionne sur le symbole du graphique ( ex : EURUSD ) si le symbole du graphique est le même que le symbole de l'ordre, mais si j'ouvre une nouvelle position pour GBPUSD, la synchronisation sera interrompue avec le panneau Terminal Trade.
Et si j'ai des ordres pour EURUSD, mais que j'essaie de rechercher de nouvelles paires intéressantes à négocier sur d'autres symboles graphiques (par exemple GBPUSD, NZDUSD, etc.), le calcul du profit des ordres ne se synchronise pas avec le panneau ' Terminal > Trade '.
( N'oubliez pas que je connais déjà OnTimer(), que vous m'avez aidé à savoir comment l'utiliser pour 4 ticks par seconde. )

Toute cette préoccupation vient d'ici.

Aujourd'hui, j'ouvre des positions à court terme, si j'ouvre des positions à long terme, je ne ferai pas attention à cette synchronisation avec Terminal Trade.

---

J'espère que vous me comprenez maintenant plus clairement.

Je vous souhaite bonne chance.

 

Si vous voulez vraiment attendre chaque tick, vous devrez écrire un EA séparé pour chaque symbole et utiliser la fonction OnTick().

Mais je peux vous dire que je programme aussi des micro-contrôleurs et qu'ils sont dans une boucle while sans fin (pour toujours) jusqu'à ce qu'une panne de courant ou une interruption se produise.

Pour vérifier si une condition est vraie ou fausse, on utilise le plus petit type de données booléennes et votre processeur le fait déjà des millions, voire des milliards de fois par seconde avec tous les processus qui tournent en arrière-plan et les graphiques, etc.

C'est lorsque vous commencez à faire des calculs lourds impliquant des types de données plus importants que cela devient un problème.