Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
...
Comment votre LastProfitHigh est-il déclaré ?
Si elle est déclarée dans le corps de la fonction (start() par exemple), elle changera toujours de valeur si vous ne la déclarez pas comme statique. Donc, si elle est déclarée comme locale (dans la fonction), essayez de la déclarer à la portée globale ou comme variable statique et de cette façon, elle "héritera" des valeurs entre deux ticks.
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 ne peux 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.Nouveau dans le codage
Comment est déclarée la variable LastProfitHigh ? Si elle est déclarée dans le corps de la fonction (start() par exemple), elle changera toujours de valeur si vous ne la déclarez pas comme statique. Donc, si elle est déclarée comme locale (dans la fonction), essayez de la déclarer à la portée globale ou comme variable statique et de cette façon, elle "héritera" des valeurs entre deux ticks.
Bonjour mladen,
J'ai maintenant déplacé la variable en dehors du func start() et l'ai déclarée "static double", merci pour la réponse et croisons les doigts pour qu'elle s'affiche correctement.
La logique du code est correcte ???
aud4xtrader
La logique est correcte
Si vous déplacez la variable en dehors du début, vous n'avez pas besoin de la déclarer statique (elle est automatiquement une variable globale lorsqu'elle se trouve en dehors du corps d'une fonction - et elle est "visible" dans tout le code). Si vous voulez que la variable reste locale à une fonction et conserve son état précédent (l'état d'un tick précédent, par exemple), vous la déclarez statique.
Voici deux exemples qui aboutissent au même résultat
int start()
{
...
if (OrderProfit()>previiousProfit) previousProfit = OrderProfit();
}
[/PHP]
or the same thing but with static variable
[PHP]
int start()
{
static double previousProfit=0;
...
if (OrderProfit()>previiousProfit) previousProfit = OrderProfit();
}
Bonjour mladen,
J'ai maintenant déplacé la variable en dehors de la fonction start() et je l'ai déclarée "static double", merci pour la réponse et croisons les doigts pour qu'elle s'affiche correctement.
La logique du code est correctement énoncée ? ??Comment coder ?
Cela fonctionne très bien, merci encore pour l'excellente aide.
aud4xtrader
La logique est correcte
Si vous déplacez la variable en dehors du début, vous n'avez pas besoin de la déclarer statique (c'est automatiquement une variable globale lorsqu'elle se trouve en dehors du corps d'une fonction - et elle est "visible" dans tout le code). Si vous voulez que la variable reste locale à une fonction et conserve son état précédent (l'état d'un tick précédent, par exemple), vous la déclarez statique.
Voici deux exemples qui aboutissent au même résultat
int start()
{
...
if (OrderProfit()>previiousProfit) previousProfit = OrderProfit();
}
[/PHP]
or the same thing but with static variable
[PHP]
int start()
{
static double previousProfit=0;
...
if (OrderProfit()>previiousProfit) previousProfit = OrderProfit();
}
Parfait ! Merci.
Essayez ces 2 fonctions .
Les deux fonctions retournent 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.
{
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));
}
Comment coder ?
Bonjour Pip,
Merci pour les extraits de code, c'est génial la façon dont les gens peuvent partager des idées et des styles de codage, au fur et à mesure que mes connaissances se développent, je peux tirer des leçons de personnes comme toi et mladen.
Parfait ! Merci.
Bonjour,
J'ai une demande.
Si je veux supprimer tous les objets qui contiennent dans le nom le mot "exemple" avec la commande ObjectDelete comment je dois écrire le code ?
Pour Exemple
Nom de l'objet
"Exemple13241"
"Exemple453623"
Je veux supprimer tous les objets qui contiennent le mot "Exemple".
Merci beaucoup
...
Utilisez quelque chose comme ceci (cela supprimera tous les objets dont le nom commence par "Exemple") :
int lookForLength = StringLen(lookFor);
for (int i=ObjectsTotal()-1; i>=0; i--)
{
string objectName = ObjectName(i);
if (StringSubstr(objectName,0,lookForLength) == lookFor) ObjectDelete(objectName);
}
Bonjour,
J'ai une demande.
Si je veux supprimer tous les objets qui contiennent dans le nom le mot "exemple" avec la commande ObjectDelete comment je dois écrire le code ?
Pour Exemple
Nom de l'objet
"Exemple13241"
"Exemple453623"
Je veux supprimer tous les objets qui contiennent le mot "Exemple".
Merci beaucoup.Utilisez quelque chose comme ceci (cela supprimera tous les objets dont le nom commence par "Exemple") :
int lookForLength = StringLen(lookFor);
for (int i=ObjectsTotal()-1; i>=0; i--)
{
string objectName = ObjectName(i);
if (StringSubstr(objectName,0,lookForLength) == lookFor) ObjectDelete(objectName);
}
Merci, c'est parfait.
J'ai une autre question ^^.
Je crée un segment de ligne de tendance dans le graphique avec une longueur déclarée. Je peux définir la couleur et c'est bon. Je voudrais savoir s'il est possible de définir plus d'une couleur dans la même ligne de tendance.
Par exemple pour la première partie 1/3 une couleur, pour la partie 2/3 une autre couleur et pour la partie 3/3 une autre.
C'est possible ?
Merci^^
..
En bref, si vous faites référence aux objets, la réponse est non. Il faudrait créer 3 objets pour cela
Si vous utilisez des tampons pour cela, alors vous auriez besoin de 5 tampons de dessin pour une ligne de 3 couleurs sans repeinture, et comme il n'y a que 8 tampons de dessin, cela vous limite de manière significative.
Merci, c'est parfait.
J'ai une autre question ^^.
Je crée un segment de ligne de tendance dans le graphique avec une longueur déclarée. Je peux définir la couleur et c'est bon. Je voudrais savoir s'il est possible de définir plus d'une couleur dans la même ligne de tendance.
Par exemple pour la première partie 1/3 une couleur, pour la partie 2/3 une autre couleur et pour la partie 3/3 une autre.
Est-ce possible ?
Merci^^