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
J'essaie de savoir si cela est faux ;
for (int i=qqea_alert_x_candles_ago ; i>0 ; i--) {
// int i = 1 ;
qqea_up = iCustom(NULL,0, "QQE Alert v3",0,i) ;
qqea_down = iCustom(NULL,0, "QQE Alert v3",1,i) ;
si (qqea_up < qqea_down) {
si (i == 1) qqeacross = True ;
qqea_long = True ;
qqea_short = Faux ;
} else if (qqea_up > qqea_down) {
si (i == 1) qqeacross = True ;
qqea_long = Faux ;
qqea_short = Vrai ;
}
}
}
il devrait vérifier la validité du signal jusqu'à "qqea_alert_x_candles_ago" barres en arrière, mais alors il a (i == 1) qui i==1 ne se produit qu'une fois ? ?
J'essaie de comprendre si cela est faux ;
for (int i=qqea_alert_x_candles_ago ; i>0 ; i--) {
// int i = 1 ;
qqea_up = iCustom(NULL,0, "QQE Alert v3",0,i) ;
qqea_down = iCustom(NULL,0, "QQE Alert v3",1,i) ;
Print("qqea_up : ", qqea_up, "qqea_down : ", qqea_down) ;
si (qqea_up < qqea_down) {
if (i == 1) qqeacross = True ;
qqea_long = Vrai ;
qqea_short = Faux ;
} else if (qqea_up > qqea_down) {
si (i == 1) qqeacross = True ;
qqea_long = Faux ;
qqea_short = Vrai ;
}
}
}
il devrait vérifier la validité du signal jusqu'à "qqea_alert_x_candles_ago" barres en arrière, mais alors il a (i == 1) qui i==1 ne se produit qu'une seule fois ? ?À première vue, votre code semble correct, à condition que "qqea_alert_x_candles_ago" > 0.
Votre problème, si cela ne fonctionne pas, est plus que probablement lié à iCustom.
Pour que cette fonction fonctionne correctement, vous devez passer un élément d'entrée pour chaque élément d'entrée dans l'indicateur réel. Si vous ne le faites pas, ou si vous passez les mauvais types de données, icustom ne retournera rien.
J'ai ajouté une instruction Print dans le code ci-dessus. Utilisez-la pour déterminer si les valeurs renvoyées par iCustom contiennent réellement quelque chose.
Merci,
Hiachiever
Besoin d'aide avec un code pour compter les barres
Mon EA a un certain nombre d'options pour calculer le stoploss d'une position ouverte. L'une de ces options consiste à utiliser le plus bas du dernier nombre "x" de barres de prix.
La ligne de code actuellement utilisée dans l'EA pour calculer le stoploss (SL) de cette option pour une position longue est la suivante :
SL=iLow(Symbol(),Period(),iLowest(Symbol(),Period(),MODE_LOW,StopLossBars,0)) ;
StopLossBars est une variable d'entrée externe.
Le problème que j'ai est que je veux que la valeur de StopLossBars augmente avec chaque barre comptée depuis l'ouverture de la position jusqu'à ce que l'une de mes autres conditions pour le stoploss dépasse cette condition. Je suppose qu'une ligne de code telle que
StopLossBars = StopLossBars + BarsCountedSincePositionOpened
ferait l'affaire. Malheureusement, mon codage est assez limité à des copier-coller et je ne sais pas comment calculer ou coder BarsCountedSincePositionOpened.
Quelqu'un pourrait-il me dire comment faire, s'il vous plaît ?
À première vue, votre code semble correct, en supposant que "qqea_alert_x_candles_ago" > 0.
Votre problème, si cela ne fonctionne pas, est plus que probablement en relation avec iCustom.
Pour que cette fonction fonctionne correctement, vous devez passer un élément d'entrée pour chaque élément d'entrée dans l'indicateur réel. Si vous ne le faites pas, ou si vous passez les mauvais types de données, icustom ne retournera rien.
J'ai ajouté une instruction Print dans le code ci-dessus. Utilisez-la pour déterminer si les valeurs renvoyées par iCustom contiennent réellement quelque chose.
Merci,
HiachieverLe code provient d'un autre EA mais je pensais que lorsque la boucle va jusqu'à "qqea_alert_x_candles_ago" > 1 alors cette instruction "if (i == 1) qqeacross = True ;" serait fausse maintenant, correct ? Alors qu'elle devrait rester vraie jusqu'à ce que i>qqea_alert_x_candles_ago.
Aider
Chers tous,
J'ai reçu ce codage d'un collègue. Il m'a dit que ce devrait être un très bon indicateur signalant les entrées de SMA vers le haut ou vers le bas. Quelqu'un peut-il m'aider à créer un indicateur avec ce codage ci-dessous.
/*[[
Nom := SMA Up and Down
Fenêtre séparée := non
Première couleur := Bleu
First Draw Type:= Line
Utiliser les secondes données := Oui
Deuxième couleur := Rouge
Second Draw Type := Line
]]*/
Entrées : MAPeriod(10), Bandwide_UP(20),Bandwide_DOWN(20) ;
Variables : shift(0), cnt(0), sum(0), loopbegin1(0), loopbegin2(0), first(True), prevbars(0) ;
Variables : MA(0) ;
SetLoopCount(0) ;
// vérifications initiales
Si MAPeriod < 1 Then Exit ;
// vérification du chargement de barres supplémentaires ou du rechargement total
If Bars 1 Then first = True ;
prevbars = Bars ;
// loopbegin1 et loopbegin2 empêchent le comptage des barres comptées d'exclure l'actuel
Si first Then Begin
loopbegin1 = Bars-MAPeriod-1 ;
Si loopbegin1 < 0 Then Exit ; // pas assez de barres pour le comptage
loopbegin2 = Bars-MAPeriod-1 ;
If loopbegin2 < 0 Then Exit ; // pas assez de barres pour le comptage
first = False ; // ce bloc ne doit être évalué qu'une seule fois
End ;
// convergence-divergence
loopbegin1 = loopbegin1+1 ; // la barre actuelle doit être recomptée également
For shift = loopbegin1 Downto 0 Begin
MA = iMA(MAPeriod,MODE_SMA,shift) ;
SetIndexValue(shift,(MA+Bandwide_UP*point)) ;
SetIndexValue2(shift,(MA-Bandwide_DOWN*point)) ;
loopbegin1 = loopbegin1-1 ; // empêche le recomptage aux barres précédentes
Fin ;
Meilleures salutations,
Rogerio
J'ai besoin d'aide avec le code suivant
J'ai besoin d'aide avec le code suivant pour le moment il n'ouvre un ordre que si AC est au-dessus ou en dessous de zéro et je veux qu'il s'ouvre si le rouge passe au vert et vice versa
double AC1 = iAC(NULL, 0, Current + 0) ;
double AC2 = iAC(NULL, 0, Current + 1) ;
si ((AC1 < AC2)) Ordre = SIGNAL_CLOSEBUY ;
Le code provient d'un autre EA mais je pensais que lorsque la boucle va jusqu'à "qqea_alert_x_candles_ago" > 1 alors cette déclaration "if (i == 1) qqeacross = True ;" serait False maintenant, correct ? Alors qu'elle devrait rester vraie jusqu'à ce que i>qqea_alert_x_candles_ago.
Non, ce n'est pas correct.
Dans la boucle for, vous commencez à 6 et décrémentez jusqu'à 1. Cela signifie que dans la boucle finale, la boucle for s'exécute et effectue la vérification"if (i == 1) qqeacross = True ;". Le résultat final est que la sortie sera vraie si qqeacross s'est produit.
Le seul problème que cela peut présenter est que qqeacross a été mis à true dans une boucle précédente. Pour résoudre ce problème, vous devez définir qqeacross = false ; avant la boucle for. De cette façon, vous pouvez vous assurer que si qqeacross = true, alors il a été défini par la boucle qui vient de se terminer.
Merci,
hiachiever
Mon EA dispose d'un certain nombre d'options pour calculer le stoploss d'une position ouverte. L'une de ces options consiste à utiliser le plus bas du dernier nombre "x" de barres de prix.
La ligne de code actuellement utilisée dans l'EA pour calculer le stoploss (SL) de cette option pour une position longue est :
SL=iLow(Symbol(),Period(),iLowest(Symbol(),Period(),MODE_LOW,StopLossBars,0)) ;
StopLossBars est une variable d'entrée externe.
Le problème que j'ai est que je veux que la valeur de StopLossBars augmente avec chaque barre comptée depuis l'ouverture de la position jusqu'à ce que l'une de mes autres conditions pour le stoploss dépasse cette condition. Je suppose qu'une ligne de code telle que
StopLossBars = StopLossBars + BarsCountedSincePositionOpened
ferait l'affaire. Malheureusement, mon codage est assez limité à des copier-coller et je ne sais pas comment calculer ou coder BarsCountedSincePositionOpened.
Quelqu'un pourrait-il me dire comment faire, s'il vous plaît ?La façon de le faire est de créer une variable sur la portée globale (c'est-à-dire avant init)
par exemple
int BarCount ;
int init ()
Ensuite, dans votre code de stop loss, utilisez ce qui suit :
if (BarCount<Bars)
{
SL=iLow(Symbol(),Period(),iLowest(Symbol(),Period(),MODE_LOW,StopLossBars,0)) ;
StopLossBars++ ;
BarCount=Bars ;
}
Ceci incrémentera StopLossBars de 1 à chaque nouvelle barre.
Le seul autre ajout à votre code serait de réinitialiser 'StopLossBars' à sa valeur par défaut initiale lorsqu'une nouvelle transaction est ouverte.
Merci,
Hiachiever
J'ai besoin d'aide avec le code suivant pour le moment il n'ouvre un ordre que si AC est au-dessus ou en dessous de zéro et je veux qu'il s'ouvre si le rouge devient vert et vice versa.
double AC1 = iAC(NULL, 0, Current + 0) ;
double AC2 = iAC(NULL, 0, Current + 1) ;
if ((AC1 < AC2)) Ordre = SIGNAL_CLOSEBUY ;Ce que j'ai fait, c'est ouvrir ou afficher les deux autres buffers dans le code de l'indicateur en retirant ces deux lignes ;
// SetIndexLabel(1,NULL) ;
// SetIndexLabel(2,NULL) ;
Puis avec mon AC modifié j'ai fait un appel à iCustom;
double ac1 = iCustom(NULL, 0, "AcceleratorMod", 1, 1) ;
double ac2 = iCustom(NULL, 0, "AcceleratorMod", 2, 1) ;
double ac11 = iCustom(NULL, 0, "AcceleratorMod", 1, 2) ;
double ac22 = iCustom(NULL, 0, "AcceleratorMod", 2, 2) ;
bool acbuy = ac2==0 && ac11==0 ; // Le rouge passe au vert
bool acsell = ac1==0 && ac22==0 ; // Le vert devient le rouge.
J'espère que cela vous aidera
matricebiz que voulez vous dire par enlever ces deux lignes ; et comment le faire, je n'arrive pas à entrer dans le code de l'indicateur AC que j'ai essayé,