[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 155

 
todem:
dans la définition d'une tendance ?

Dans un changement de tendance sur une période de temps... Voir https://www.mql5.com/ru/forum/131277/page148 et https://www.mql5.com/ru/forum/131277/page149
 

Pouvez-vous me dire pourquoi OrderSelect renvoie VRAI même si la commande avec ce ticket n'existe pas (elle a été supprimée) ?


   if(OrderSelect(tickethigh1, SELECT_BY_TICKET, MODE_TRADES)==false)
 
100yan:

dans un changement de tendance sur un tronçon de temps...


S'il vous plaît dites-moi si Tp et Slossa fonction fonctionne ici

if (total > 0) AveragePrice = NormalizeDouble(AveragePrice / Count, Digits) ;
if (NewOrdersPlaced) {
for (cnt = OrdersTotal() - 1 ; cnt >= 0 ; cnt--) {
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) ;
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue ;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY) {
PriceTarget = Prix moyen + TakeProfit * Point ;
BuyTarget = PrixTarget ;
Stopper = Prix moyen - Stoploss * Point ;
flag = TRUE ;
}
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_SELL) {
PriceTarget = AveragePrice - TakeProfit * Point ;
SellTarget = PriceTarget ;
Stopper = AveragePrice + Stoploss * Point ;
flag = TRUE ;

 
todem:
il a bien compilé pour moi

Désolé, l'indicateur fonctionne - c'est comme ça qu'il était à l'origine, et l'erreur est dans le fichier tcht - il ne compile pas.

Dossiers :
 

Puis-je utiliser init pour effectuer des calculs pour le tampon de l'indicateur ?

Je voulais recalculer en init toutes les barres sauf la barre zéro et en start la barre zéro - elle ne compte pas...

 
Pyro:

Pouvez-vous me dire pourquoi OrderSelect renvoie VRAI même s'il n'y a pas de commande avec un tel ticket (il a été supprimé) ?

Avez-vous bien lu la référence de la fonction ?

Relisons-le :

---------------------------------------------------------------------------------------------------------------------------------------------------------------

bool OrderSelect( int index, int select, int pool=MODE_TRADES)
La fonction sélectionne un ordre pour une manipulation ultérieure. Renvoie VRAI si la fonction se termine avec succès. Renvoie FALSE si la fonction échoue. Pour obtenir des informations sur l'erreur, appelez la fonction GetLastError().
Le paramètre pool est ignoré si la commande est sélectionnée par le numéro de ticket. Le numéro de billet est un identifiant unique pour la commande. Pour déterminer dans quelle liste un ordre est sélectionné, nous devons analyser son heure de clôture. Si l'heure de clôture de l'ordre est 0, alors l'ordre est ouvert ou en attente et est pris dans la liste des positions ouvertes du terminal. Une position ouverte peut être distinguée d'un ordre en attente par son type. Si l'heure de clôture n'est pas égale à 0, alors l'ordre est clôturé ou en attente et a été sélectionné dans l'historique du terminal. La distinction entre un ordre fermé et un ordre en attente supprimé peut également être faite par type d'ordre.
Paramètres :
indice - Position de l'ordre ou numéro d'ordre en fonction du deuxième paramètre.
sélectionnez - Le drapeau de la méthode de sélection. Peut être l'une des valeurs suivantes :
SELECT_BY_POS - le paramètre index contient le numéro d'index de la position dans la liste,
SELECT_BY_TICKET - le paramètre index contient le numéro du billet.
piscine - Source de données pour la sélection. Il est utilisé lorsque le paramètre desélection est égal à SELECT_BY_POS. Il peut s'agir de l'une des valeurs suivantes :
MODE_TRADES (par défaut) - l'ordre est sélectionné parmi les ordres ouverts et en attente,
MODE_HISTORY - l'ordre est sélectionné parmi les ordres fermés et supprimés.


---------------------------------------------------------------------------------------------------------------------------------------------------------------

Celui-là :

Le paramètre pool est ignoré si la commande est sélectionnée par le numéro de ticket. Le numéro de billet est l'identifiant unique de la commande. Pour déterminer dans quelle liste un ordre est sélectionné, il faut analyser son heure de clôture. Si l'heure de clôture de l'ordre est 0, alors l'ordre est ouvert ou en attente et est pris dans laliste des positions ouvertes du terminal.

Vous faites quoi ?

if(OrderSelect(tickethigh1, SELECT_BY_TICKET, MODE_TRADES)==false)

J'ai indiqué en rouge le paramètre pool, qui est ignoré lorsque l'on choisit par ticket et qu'un ordre est pris dans n'importe quelle liste (ouverte ou fermée) de positions du terminal. C'est pourquoi il renvoie la vérité. Après tout, un tel ticket existe et un ordre est sélectionné, mais dans la liste des ordres fermés...

Nous devrions le faire de cette façon :

   if (OrderSelect(tickethigh1,SELECT_BY_TICKET))
   if (OrderOpenTime()==0) {
      // ... код при успешном выборе ордера по тикету в списке рыночных ордеров
   }

... ou :

if (OrderSelect(tickethigh1,SELECT_BY_TICKET))
   if (OrderOpenTime()>0) {
      // ... код при успешном выборе ордера по тикету в списке закрытых ордеров
   }

... ...ou :

   if (OrderSelect(tickethigh1,SELECT_BY_TICKET)) {
      if (OrderOpenTime()>0) {
         // ... код при успешном выборе ордера по тикету в списке закрытых ордеров
      }
      if (OrderOpenTime()==0) {
         // ... код при успешном выборе ордера по тикету в списке рыночных ордеров
      }
   }

Je pense l'avoir très bien expliqué... :)

 

artmedia70


Merci pour cette réponse si détaillée et complète. Vraiment aussi clair que possible :) THX ! !!

 
Pyro:

artmedia70


Merci pour cette réponse détaillée. Aussi clair que possible :) THX ! !!

:) Merci. Vous êtes les bienvenus.

Je voudrais mettre en garde contre certaines "insidiosités" de la sélection des postes ouverts par leur ticket. Le fait est qu'à la fin d'une journée de négociation, lorsqu'une position est reportée au jour suivant, la société de courtage rouvre l'ordre. C'est-à-dire que la position actuelle est fermée et une autre position est ouverte avec le même volume, mais avec un nouveau ticket incluant le swap. Par conséquent, votre Conseiller Expert doit garder la trace des ordres ré-ouverts et prendre en compte leurs nouveaux tickers, sinon tout va "couler" - l'ordre avec l'ancien ticker apparaîtra dans la liste des ordres fermés, et vous ne serez pas en mesure d'ouvrir une position existante déplacée vers le nouveau jour de négociation en utilisant l'ancien ticker. Les positions partiellement fermées connaîtront le même sort - un nouveau ticket leur sera également attribué.

Par conséquent, tenez un registre strict de tous les ordres d'EA et gardez une trace de tous ces changements "insidieux" dans le temps.

 
artmedia70:


Je voudrais mettre en garde contre une certaine "insidiosité" de la sélection des postes ouverts par leur ticket. Le fait est qu'à la fin de la journée de négociation, lorsqu'une position est transférée au jour suivant, le DC rouvre l'ordre.

Cela se fait dans certaines sociétés de courtage, mais la grande majorité d'entre elles n'en souffrent pas.
 
sergeev:
Je ne sais pas si c'est vrai pour certaines sociétés de courtage, mais la plupart d'entre elles ne font pas cette merde.

N'est-ce pas une règle de "bonnes manières" que de considérer également ce comportement du DC ? Après tout... Ouais, c'est pas grave... J'essaie juste de considérer tout, enfin... ou ce dont je suis conscient.

Il faut être prudent, hein ? ;)

Raison: