Comment coder ? - page 119

 

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 ? ?

 
matrixebiz:
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 ?

 
hiachiever:
À 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,

Hiachiever

Le 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 ;

 
matrixebiz:
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

 
Pussy Galore:
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

 
denis68:
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é,