Aide au codage - page 245

 
mladen:
macerina

La première partie seulement (le reste est juste une variation de cela) :

si ema(7) < ema(21) et ema(7) précédente < ema(21) précédente alors si ema(de rsi(14),9) < rsi(14) signal d'achat.

Vous pouvez aussi le dire de cette façon :

si macd(7,12) < et macd(7,12) précédent < 0 alors si ema(de rsi(14),9) < rsi(14) signal pour achat

Merci pour la réponse mladen est-il possible de coder un indicateur mt4 avec ce critère.

Merci d'avance

 
macerina:
Merci pour la réponse mladen est-il possible de coder un indicateur mt4 avec ces critères Merci d'avance

macerina

C'est un simple système macd + rsi. Je pense qu'il en existe déjà un. S'il n'y en a pas, il est facile de faire un indicateur et alors il sera fait.

 
mladen:
Veuillez poster la partie du code où vous essayez d'obtenir ce que vous avez décrit ici : https://www.mql5.com/en/forum/174385/page162 (pas les 3 prises de profits sur les ordres et les 3 stops suiveurs gérés, mais la partie qui essaie de faire exactement ce que vous avez décrit) et alors, peut-être que quelqu'un pourra vous aider avec votre codage.

//compter les ordres d'achat ouverts.

iOpenOrders_Buy = CntOrd(iOrderType_Buy,MagicNumber,Symbol()) ;

//compter les ordres de vente ouverts.

iOpenOrders_Sell = CntOrd(iOrderType_Sell,MagicNumber,Symbol()) ;

si (iOpenOrders_Buy==3 || iOpenOrders_Sell==3)

{

if(TrailingStop>0 && TrailingStart > 0) TrailOrder (TrailingStart, TrailingStop) ;

}

si (iOpenOrders_Buy==1 || iOpenOrders_Sell==1)

{

if(TrailingStop_2>0 && TrailingStart_2 > 0) TrailOrder_3 (TrailingStart_2, TrailingStop_2) ;

}

//////////////////////////////////////////////////////////////////////////////////////////////

C'est la partie où l'EA recherche le nombre d'ordres ouverts pour la paire attachée.

S'il trouve 3 ordres, il suit la fonction habituelle de Trailing Stop. Et s'il trouve qu'il n'y a qu'une seule transaction en cours, alors il suivra la deuxième fonction Trailing Stop.

Cela fonctionne bien pour une seule paire mais lorsque j'attache cet EA à plusieurs graphiques (paires), cela ne fonctionne pas car il récupère tous les ordres ouverts via la fonction 'OrdersTotal()'.

Un problème me vient immédiatement à l'esprit : comment savoir qu'il y avait 3 ordres et qu'il n'en restait plus qu'un seul (il n'y a pas une seule ligne de code dans cet EA qui essaie de le savoir).

//Fin - Fermer les positions ouvertes de vente------------------------------------------

double OpenPrice=Ask ;

int count=3 ;

si (count==3)

{

BuyOrder_1=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_1, "Buy Order",MagicNumber, 0,Blue) ;

if (BuyOrder_1>0) //Checking if the order was opened or not

{

sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + " Ordre d'achat 1 envoyé avec succès. Ticket=" + BuyOrder_1 ;

count = count - 1 ;

//////////////////////////////////////////////////////////////

Ainsi le compte diminue et ouvre des ordres jusqu'à ce que le compte=1. Donc 3 ordres s'ouvrent car le compte=3 initialement.

 
Oridroo:
//compter les ordres d'achat ouverts.

iOpenOrders_Buy = CntOrd(iOrderType_Buy,MagicNumber,Symbol()) ;

//compter les ordres de vente ouverts.

iOpenOrders_Sell = CntOrd(iOrderType_Sell,MagicNumber,Symbol()) ;

si (iOpenOrders_Buy==3 || iOpenOrders_Sell==3)

{

if(TrailingStop>0 && TrailingStart > 0) TrailOrder (TrailingStart, TrailingStop) ;

}

si (iOpenOrders_Buy==1 || iOpenOrders_Sell==1)

{

if(TrailingStop_2>0 && TrailingStart_2 > 0) TrailOrder_3 (TrailingStart_2, TrailingStop_2) ;

}

//////////////////////////////////////////////////////////////////////////////////////////////

C'est la partie où l'EA recherche le nombre d'ordres ouverts pour la paire attachée.

S'il trouve 3 ordres, il suit la fonction habituelle de Trailing Stop. Et s'il trouve qu'il n'y a qu'une seule transaction en cours, alors il suivra la deuxième fonction Trailing Stop.

Cela fonctionne bien pour une seule paire mais lorsque j'attache cet EA à plusieurs graphiques (paires), cela ne fonctionne pas car il récupère tous les ordres ouverts via la fonction 'OrdersTotal()'.

//Fin - Fermer les positions ouvertes de vente------------------------------------------

double OpenPrice=Ask ;

int count=3 ;

si (count==3)

{

BuyOrder_1=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_1, "Buy Order",MagicNumber, 0,Blue) ;

if (BuyOrder_1>0) //Checking if the order was opened or not

{

sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + " Ordre d'achat 1 envoyé avec succès. Ticket=" + BuyOrder_1 ;

count = count - 1 ;

//////////////////////////////////////////////////////////////

Ainsi, le compte diminue et les ordres d'ouverture jusqu'à ce que le compte = 1. Donc 3 commandes sont ouvertes car le compte=3 initialement.

La question était la suivante : comment sait-on qu'il y avait 3 ordres ouverts et qu'il n'en reste qu'un ? Le fait qu'il ne reste qu'un seul ordre ouvert ne montre rien. Vous devez vérifier la liste des ordres fermés pour les 2 autres ordres qui faisaient partie d'un triplet, et puisque les courtiers peuvent modifier votre champ de commentaire, il n'y a aucun moyen de savoir que certains ordres faisaient partie d'un même triplet (aucun champ dans la liste des ordres qui peut être utilisé pour marquer que certains ordres appartiennent à un même groupe d'ordres).

Vous pourriez essayer d'utiliser des fichiers pour sauvegarder les numéros de tickets qui appartenaient à des triplets, mais, dans le cas où vous essayez d'utiliser le même EA à partir d'un autre terminal, vous pouvez obtenir des erreurs terribles. La même chose peut se produire lorsque vous réinstallez metatrader. L'utilisation de variables globales est encore pire (c'est presque la même chose que d'utiliser des fichiers, mais en pire), de sorte qu'il n'y a aucun moyen significatif de suivre correctement les triplets d'ordres.

Alors comment savoir si un ordre ouvert est le dernier ordre ouvert des 3 ou si c'est le premier ordre ouvert d'un nouveau triplet d'ordres ?

 
mladen:
La question était la suivante : comment sait-il qu'il y avait 3 ordres ouverts une fois, et qu'il n'en reste qu'un ? Le fait qu'il n'y ait plus qu'un seul ordre ouvert ne montre rien. Vous devez vérifier la liste des ordres fermés pour les 2 autres ordres qui faisaient partie d'un triplet, et comme les courtiers peuvent changer votre champ de commentaire, il n'y a aucun moyen de savoir que certains ordres faisaient partie d'un même triplet (aucun champ dans la liste des ordres qui peut être utilisé pour marquer que certains ordres appartiennent à un même groupe d'ordres). Donc comment savoir qu'un ordre ouvert est le dernier ordre ouvert des 3 ou que c'est le premier ordre ouvert d'un nouveau triplet d'ordres ?

Mladen,

Ckeck vous pm, besoin de codeur

Je rêve d'une GRANDE icône pour PM !

 
mladen:
Alors comment savoir si un ordre ouvert est le dernier ordre ouvert des 3 ou si c'est le premier ordre ouvert d'une nouvelle triplette d'ordres ?

Il y a une condition :

if (MA_Différence_1>=Valeur_Diff && iOpenOrders_Buy ==0)

Ainsi, je m'assure que s'il y a un ordre d'achat existant, il n'ouvrira pas de nouvel ordre d'achat même si les conditions sont remplies. Il n'ouvrira un nouvel ordre que s'il n'y a pas d'ordre d'achat ou de vente existant.

Et comme il ouvre 3 ordres à la fois du même type (achat/vente) et si deux d'entre eux sont déjà fermés, alors celui qui reste est du même type à coup sûr.

Je l'ai testé. Il n'y a donc aucune confusion à ce sujet.

 
Oridroo:
Il y a une condition :

si (MA_Différence_1>=Valeur_Diff && iOpenOrders_Buy ==0)

Ainsi, je m'assure que s'il y a un ordre d'achat existant, il n'ouvrira pas de nouvel ordre d'achat même si les conditions sont remplies. Il n'ouvrira un nouvel ordre que s'il n'y a pas d'ordre d'achat ou de vente existant.

Et comme il ouvre 3 ordres à la fois du même type (achat/vente) et si deux d'entre eux sont déjà fermés, alors celui qui reste est certainement du même type.

Je l'ai testé. Il n'y a donc aucune confusion à ce sujet.

Il y a beaucoup d'hypothèses dans tout cela. La première est que lorsque vous essayez d'ouvrir 3 ordres, il va effectivement ouvrir 3 ordres. Et s'il n'en ouvre qu'un seul ? Et ainsi de suite...

Désolé. Mais il semble que nous parlons de choses différentes tout le temps. J'espère que quelqu'un pourra vous aider, puisque je ne le peux pas.

Trading heureux

 
mladen:
Il y a beaucoup d'hypothèses dans tout cela. La première est que lorsque vous essayez d'ouvrir 3 ordres, il en ouvre réellement 3. Et s'il n'en ouvre qu'un seul ? Et ainsi de suite...

Désolé. Mais il semble que nous parlions tout le temps de choses différentes. J'espère que quelqu'un pourra vous aider, puisque je ne le peux pas.

Bon trading

Si vous ne pouvez pas, ce n'est pas grave.

Je l'ai testé pendant un certain temps avec différents courtiers et il n'a pas "échoué" à ouvrir 3 ordres jusqu'à présent.

Quoi qu'il en soit, je pense que vous pourriez me dire au moins quel est le point/la logique qui permet à un EA de distinguer les différentes paires lorsque j'appelle 'OrdersTotal()' ?

Tout petit exemple d'EA sera le bienvenu.

 
macerina:
Merci pour la réponse mladen est-il possible de coder un indicateur mt4 avec ce critère Merci d'avance

macerina

Vérifiez l'indicateur à ce poste : https://www.mql5.com/en/forum/173574/page432. Il est presque exactement le même que celui décrit par aspen graphic code

 

Merci Mladen pour le code ... Est-ce que cela a la double comparaison macd et le croisement 50 comme vous l'avez expliqué dans la logique précédente.

Merci d'avance

Raison: