Comment coder ? - page 311

 

Bonjour Mladen, comme toujours, tu es génial !

mladen:
Terrance Utilisez Close[0] dans ce cas. Presque tous les EA utilisent close dans ce but, donc je pense que cela fonctionnera pour vous aussi.
 

...

Si votre EA n'est exécuté qu'au début de la barre, il peut y avoir plusieurs raisons :

- Il est limité pour travailler seulement sur une nouvelle barre. Cette approche a quelques problèmes si des stops suiveurs et d'autres choses similaires doivent être gérés, mais si cela fonctionne avec des stop loss et take profit fixes, c'est tout à fait pareil.

- soit il vérifie les signaux sur une barre fermée (ce qui est la façon la plus courante (et la meilleure) de vérifier les signaux). Par conséquent, il semble qu'il le fait lorsqu'une nouvelle barre se forme alors qu'en fait, il reçoit des signaux sur une barre fermée qui vient juste de se former. Travailler sur les signaux d'une barre fermée est la meilleure pratique dans les EAs et si votre EA fonctionne de cette manière, il vaut mieux ne rien changer.

Premeus:
J'ai remarqué que mon EA ne fonctionne pas entre les mouvements de prix dans le cadre temporel M1. Je sais que l'EA sera exécuté à chaque tick entrant.

Mais j'ai vu qu'il était exécuté à chaque fois qu'il démarrait une nouvelle barre.

Ai-je mal compris ?

Existe-t-il un moyen de forcer l'EA à activer chaque tick entrant ?

J'essaie de contrôler mes profits et mes pertes en utilisant les profits et les pertes pas en pips. Quand un pic se produit, l'EA ne ferme pas l'ordre lorsqu'il atteint le réglage des profits ou des pertes jusqu'à ce qu'une nouvelle barre se produise.

Quelqu'un peut-il m'aider à résoudre ce problème ?

Je suis nouveau dans le codage d'EA.

Merci d'avance.
 

Merci, mladen.

Je vais essayer votre suggestion.

 

Salutations aux dieux du codage,

J'ai besoin d'aide pour trouver une fonction EA qui contrôle l'exécution de l'envoi des ordres de sorte qu'un ordre ne puisse pas être ouvert si un ordre existe déjà au même prix.

Logique simple : si le prix d'ouverture de l'ordre et le type d'ordre = un prix d'ouverture et un type d'ordre existant, alors on sort et on cherche le prochain critère d'entrée.

J'ai également besoin d'une fonction qui empêchera l'exécution d'un ordre s'il est à x pips d'un prix déjà existant.

Logique simple : si le prix d'ouverture et le type d'ordre sont < le prix d'ouverture et le type du dernier ordre + x pips, alors on quitte et on cherche le prochain critère d'entrée.

Merci,

Pip

 

...

Essayez ces 2 fonctions
: La première est de savoir s'il existe déjà un ordre avec exactement le même prix ouvert

. La seconde est de vérifier s'il existe un ordre qui est à moins de nnn points du prix désiré

.

Les deux renvoient vrai si le prix est égal ou si la distance du prix de certains ordres actuellement ouverts est inférieure à la distance spécifiée.

bool existsAtSamePrice(int magicNumber, double price)

{

for (int i=OrdersTotal()-1; i>=0 ; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol()!=Symbol()) continue;

if (OrderMagicNumber()!=magicNumber) continue;

if (CompareDouble(OrderOpenPrice(),price)) return(true);

}

return(false);

}

//

//

//

//

//

bool existsAtApproximatePrice(int magicNumber, double price, double distance)

{

for (int i=OrdersTotal()-1; i>=0 ; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol()!=Symbol()) continue;

if (OrderMagicNumber()!=magicNumber) continue;

if (MathAbs(OrderOpenPrice()-price)< distance) return(true);

}

return(false);

}

//

//

//

//

//

bool CompareDouble(double val1, double val2)

{

return(NormalizeDouble(val1,Digits)==NormalizeDouble(val2,Digits));

}

Pip:
Salutations, Dieux du codage,

J'ai besoin d'aide pour trouver une fonction EA qui contrôle l'exécution de l'envoi des ordres de telle sorte qu'un ordre ne puisse être ouvert si un ordre existe déjà au même prix.

Logique simple : si le prix d'ouverture de l'ordre et le type d'ordre = un prix d'ouverture d'ordre et un type d'ordre existant, alors on sort et on cherche le prochain critère d'entrée.

J'ai également besoin d'une fonction qui empêchera l'exécution d'un ordre s'il est à x pips d'un prix déjà existant.

Logique simple : si le prix d'ouverture et le type d'ordre sont < le prix d'ouverture et le type du dernier ordre + x pips, alors on quitte et on cherche le prochain critère d'entrée.

Merci,

Pip
 
mladen:
Il peut y avoir plusieurs raisons, mais les plus courantes sont :
- le stop loss et / ou le take profit sont trop proches du prix actuel

- votre courtier est un courtier de type ECN/STP dans ce cas vous devez d'abord placer un ordre avec le stop loss et le take profit à 0 et seulement quand un ordre est ouvert vous pouvez modifier le stop loss et / ou le take profit aux valeurs désirées (en honorant le point précédent bien sûr)

.

Bonjour !

Merci pour votre aide !

Donc, si j'ai bien compris, si j'insère TakeProfit et StopLoss dans OrderSend en tant que "règles" externes, cet EA ne fonctionne correctement que sur les brokers Non-ECN ?

Désolé pour mon anglais

 

...

Oui

Avec les courtiers de type ECN/STP, vous devez ouvrir un ordre avec un stop loss et/ou un take profit fixé à 0 et lorsque l'ordre est déjà ouvert, c'est seulement à ce moment-là que vous pouvez modifier le stop loss et/ou le take profit.

pearl1:
Bonjour !

Merci pour votre aide !

Donc, si j'ai bien compris, si j'insère TakeProfit et StopLoss dans OrderSend en tant que "règles" externes, cet EA ne fonctionne correctement que sur les courtiers non-ECN ?

Désolé pour mon anglais
 
mladen:
Oui, avec les courtiers de type ECN/STP, vous devez ouvrir un ordre avec un stop loss et/ou un take profit fixé à 0 et lorsque l'ordre est déjà ouvert, ce n'est qu'alors que vous pouvez modifier le stop loss et/ou le take profit.

Merci encore, alors... comment puis-je résoudre ce problème ? désolé.

 

...

Comme je l'ai dit, vous devez le faire en 2 étapes :

1. étape - ouvrir un ordre (en utilisant OrderSend()) avec un stop loss et un take profit fixés à 0

2. étape - modifier cet ordre (en utilisant OrderModify()) en fixant le stop loss et le take profit aux valeurs souhaitées.

Donc, le code doit être modifié pour faire le travail en 2 étapes, au lieu d'une seule

pearl1:
Merci encore, alors... comment puis-je résoudre ce problème ? désolé
 

Nouveau dans le codage

Bonjour à tous,

Je suis nouveau dans le codage et j'ai lentement appris le langage et la syntaxe mais j'ai une question sur la façon dont MT4 met à jour les variables.

J'ai essayé de coder un simple EA qui affiche le profit le plus élevé d'une transaction actuellement ouverte et qui ne devrait être mis à jour que si un nouveau sommet est atteint, mais ce qui se passe, c'est que le montant descend et monte en même temps que le profit, je n'arrive pas à voir mon erreur dans la logique du code.

Je vérifie que la transaction sélectionnée est toujours ouverte.

t_CloseTime=OrderCloseTime() ; //renvoie 0 si l'ordre n'est pas fermé

if(t_CloseTime==0) //L'ordre est fermé s'il n'est pas nul.

{

if(OrderProfit() > LastProfitHigh) LastProfitHigh=OrderProfit() ;

if(LastProfitHigh >= MinProfit && MinProfitReached==false) MinProfitReached=true ;

}//endif

Si la logique est correcte, pourquoi la variable "LastProfitHigh" monte et descend-elle ? ....

Merci pour votre aide.