Aide au codage - page 173

 

Salut les codeurs,

j'ai créé un indicateur très simple qui affiche une alerte lorsque la dernière barre est au-dessus ou en dessous de la sma10. rien de plus. mais je voudrais le vérifier dans 3 cadres temporels différents. je n'ai jamais travaillé avec des indicateurs mtf et j'ai donc quelques problèmes avec. cette version vérifie le graphique m1, m5 et m15. il fonctionne bien mais il y a le problème que l'alerte est affichée sur chaque tick et pas seulement une fois dans le cadre temporel que les conditions sont remplies.

je serais heureux si quelqu'un m'aidait à résoudre ce problème. je pense qu'il ne peut s'agir que d'un problème de syntaxe...

merci !

Dossiers :
test.mq4  3 kb
 

Bonjour,

Je dois demander à nouveau, car je ne trouve pas d'erreur, mais je n'obtiens que des valeurs erronées :-(

Peut-être que quelqu'un voit mon échec !

Voici le code de l'indicateur

#property indicator_chart_window

#property indicator_buffers 5

double WidestChannel_high[];

double InsideChannel_high[];

double StandardDeviation[];

double InsideChannel_low[];

double WidestChannel_low[];

extern int STD.Rgres.period=0; /*default 0 means the channel will use the open

time from "x" bars back on which ever time period

the indicator is attached to. one can change to 1,5,

15,30,60...etc to "lock" the start time to a specific

period, and then view the "locked" channels on a different time period...*/

extern int STD.Rgres.length=56; // bars back regression begins

extern double STD.Rgres.width=1.618;// widest channel

extern double STD.width=0.618; // inside channel

int init()

{

SetIndexBuffer(0,WidestChannel_high);

SetIndexLabel(0,"WidestChannel_high");

SetIndexBuffer(1,InsideChannel_high);

SetIndexLabel(1,"InsideChannel_high");

SetIndexBuffer(2,StandardDeviation);

SetIndexLabel(2,"StandardDeviation");

SetIndexBuffer(3,InsideChannel_low);

SetIndexLabel(3,"InsideChannel_low");

SetIndexBuffer(4,WidestChannel_low);

SetIndexLabel(4,"WidestChannel_low");

return(0);

}

int deinit() {

ObjectDelete("regression channel");ObjectDelete("std channel");return(0);

}

int start() {

int counted_bars=IndicatorCounted(),limit, iTF;

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//to refresh properly delete old objects...

ObjectDelete("regression channel");ObjectDelete("std channel");

//widest channel

ObjectCreate("regression channel",OBJ_STDDEVCHANNEL,0,iTime(Symbol(),STD.Rgres.period,STD.Rgres.length),

Close[STD.Rgres.length],Time[0],Close[0]);

ObjectSet("regression channel",OBJPROP_DEVIATION,STD.Rgres.width);

ObjectSet("regression channel",OBJPROP_COLOR,Orange);

ObjectSet("regression channel",OBJPROP_RAY,true);

//inside channel

ObjectCreate("std channel",OBJ_STDDEVCHANNEL,0,iTime(Symbol(),STD.Rgres.period,STD.Rgres.length),

Close[STD.Rgres.length],Time[0],Close[0]);

ObjectSet("std channel",OBJPROP_DEVIATION,STD.width);

ObjectSet("std channel",OBJPROP_COLOR,Olive);

ObjectSet("std channel",OBJPROP_RAY,true);

for(int i=0; i<limit; i++)

{

double dev = iStdDev(NULL,STD.Rgres.period,STD.Rgres.length,0,MODE_SMA,PRICE_CLOSE,i);

double innerWidth = STD.width*dev;

double outerWidth = STD.Rgres.width*dev;

double price = ObjectGetValueByShift("std channel", i);

WidestChannel_high= price + outerWidth/2;

InsideChannel_high= price + innerWidth/2;

StandardDeviation= price;

InsideChannel_low= price - innerWidth/2;

WidestChannel_low= price - outerWidth/2;

}

return(0);}
 
sunshineh:
Bonjour,

Je dois redemander, car je ne trouve pas d'erreur, mais je n'obtiens que des valeurs erronées :-(

Peut-être que quelqu'un voit mon échec !

Voici le code de l'indicateur

#property indicator_chart_window

#property indicator_buffers 5

double WidestChannel_high[];

double InsideChannel_high[];

double StandardDeviation[];

double InsideChannel_low[];

double WidestChannel_low[];

extern int STD.Rgres.period=0; /*default 0 means the channel will use the open

time from "x" bars back on which ever time period

the indicator is attached to. one can change to 1,5,

15,30,60...etc to "lock" the start time to a specific

period, and then view the "locked" channels on a different time period...*/

extern int STD.Rgres.length=56; // bars back regression begins

extern double STD.Rgres.width=1.618;// widest channel

extern double STD.width=0.618; // inside channel

int init()

{

SetIndexBuffer(0,WidestChannel_high);

SetIndexLabel(0,"WidestChannel_high");

SetIndexBuffer(1,InsideChannel_high);

SetIndexLabel(1,"InsideChannel_high");

SetIndexBuffer(2,StandardDeviation);

SetIndexLabel(2,"StandardDeviation");

SetIndexBuffer(3,InsideChannel_low);

SetIndexLabel(3,"InsideChannel_low");

SetIndexBuffer(4,WidestChannel_low);

SetIndexLabel(4,"WidestChannel_low");

return(0);

}

int deinit() {

ObjectDelete("regression channel");ObjectDelete("std channel");return(0);

}

int start() {

int counted_bars=IndicatorCounted(),limit, iTF;

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//to refresh properly delete old objects...

ObjectDelete("regression channel");ObjectDelete("std channel");

//widest channel

ObjectCreate("regression channel",OBJ_STDDEVCHANNEL,0,iTime(Symbol(),STD.Rgres.period,STD.Rgres.length),

Close[STD.Rgres.length],Time[0],Close[0]);

ObjectSet("regression channel",OBJPROP_DEVIATION,STD.Rgres.width);

ObjectSet("regression channel",OBJPROP_COLOR,Orange);

ObjectSet("regression channel",OBJPROP_RAY,true);

//inside channel

ObjectCreate("std channel",OBJ_STDDEVCHANNEL,0,iTime(Symbol(),STD.Rgres.period,STD.Rgres.length),

Close[STD.Rgres.length],Time[0],Close[0]);

ObjectSet("std channel",OBJPROP_DEVIATION,STD.width);

ObjectSet("std channel",OBJPROP_COLOR,Olive);

ObjectSet("std channel",OBJPROP_RAY,true);

for(int i=0; i<limit; i++)

{

double dev = iStdDev(NULL,STD.Rgres.period,STD.Rgres.length,0,MODE_SMA,PRICE_CLOSE,i);

double innerWidth = STD.width*dev;

double outerWidth = STD.Rgres.width*dev;

double price = ObjectGetValueByShift("std channel", i);

WidestChannel_high= price + outerWidth/2;

InsideChannel_high= price + innerWidth/2;

StandardDeviation= price;

InsideChannel_low= price - innerWidth/2;

WidestChannel_low= price - outerWidth/2;

}

return(0);}

sunshineh,

Vous n'avez pas besoin de diviser la déviation par 2 pour obtenir le haut et le bas - enlevez la partie "/2" et cela devrait être OK à condition que le prix moyen soit OK. La largeur du canal est toujours constante : il faut utiliser l'écart standard actuel pour le avec, pas une autre valeur. Et enfin, pour autant que je sache, ObjectGetValueByShift("std channel", i) ; ne fonctionne pas sur le canal de déviation standard comme il fonctionne sur les lignes de tendance. Je ne sais pas quelle valeur il renvoie (voir l'indicateur joint et vous verrez pourquoi je dis que je ne sais pas ce qu'est ce prix).

Dossiers :
_test_4.mq4  3 kb
 

HI mladen,

Je joins un exemple d'indicateur utilisant des symboles internes prédéfinis, assez difficile pour moi à comprendre à l'intérieur, est-il possible d'obtenir quelques conseils de cet indicateur pour l'adapter à mes indicateurs ou/et aux vôtres afin d'éviter les problèmes de repeindre ou de rafraîchir la ligne de décalage/les problèmes detick ou de faire une sorte de synergie ? Merci de votre attention.

 
kenwa:
HI mladen, je joins un exemple d'indicateur utilisant des symboles internes prédéfinis, assez difficile pour moi à comprendre à l'intérieur, est-il possible d'obtenir quelques indications de cet indicateur pour l'adapter à mes indicateurs ou/et aux vôtres afin d'éviter le problème de repeindre ou de rafraîchir la ligne de décalage/les problèmes detick ou de faire une sorte de synergie ? Merci de votre attention.

kenwa

Je ne travaille pas sur des trucs décompilés. Désolé

 
mladen:
kenwa je ne travaille pas sur des trucs décompilés. Désolé

ok, alors je l'ai supprimé, mais il est intéressant de savoir pourquoi personne ne le voit, mais vous pouvez savoir qu'il s'agit d'un truc décompilé.

 
kenwa:
ok, alors je l'ai supprimé, mais il est intéressant de savoir pourquoi personne ne le voit, mais vous pouvez savoir qu'il s'agit d'un code décompilé

Tous ceux qui connaissent un peu le codage savent que c'est un code décompilé.

Et même si vous ne connaissez rien du tout au codage, quand vous avez un truc comme ça.. :

/*

Généré par EX4-TO-MQ4 decompiler FREEWARE V4.0.451.1 [-]

Site web : Plate-forme de trading MetaTrader 5 / MetaQuotes Software Corp.

E-mail : support@metaquotes.net

*/

écrit dans les premières lignes de l'indicateur que vous avez posté, il semble assez évident que n'importe qui pourrait voir qu'il s'agit d'un code décompilé, alors, s'il vous plaît ...

Tous mes vœux

 

mladen, mon code n'est pas décompilé. peut-être voudriez-vous y jeter un petit coup d'oeil ?

 
Marbo:
mladen, mon code n'est pas décompilé. peut-être voudriez-vous y jeter un coup d'oeil ?

Marbo

Vous pouvez faire quelque chose comme dans l'exemple ci-joint. Il vous alertera une fois par barre de temps cible ou lorsque l'état (type d'alerte) change. Si vous souhaitez ignorer le type, ignorez la vérification du type dans la procédure doAlert. Si vous souhaitez ignorer la vérification du temps (dans ce cas, seul le type sera vérifié), ignorez la vérification du temps dans la procédure doAlert.

Dossiers :
test_4.mq4  3 kb
 

Bonjour mladen,

Vous vous souviendrez sans doute que j'ai demandé de l'aide pour un MA cross EA la semaine dernière, et que j'ai bien sûr fait référence de manière inappropriée à la section Elite. Où pouvez-vous me suggérer de demander cela, s'il vous plaît. J'ai cherché et je n'ai pas trouvé de réponse évidente. Pour vous rafraîchir la mémoire, voici la spécification :

1. croisement des SMA EMA

2.à la clôture de la bougie

3. OCO avec placement d'un nouvel ordre dans une nouvelle direction

4. possibilité d'ajuster le slippage

5. signal sonore de croisement

6) Le croisement n'est pas un vrai croisement sans un écart de pip réglable.

7. si possible, surveillance à l'intérieur de la bougie, de sorte que si une bougie est plus de X fois l'ATR (nombre paramétrable à compter), un ordre est placé avec une alarme dans la direction de cette bougie, et de même pour fermer un ordre mais ne pas en lancer un nouveau.

8. de préférence, si un ordre est placé comme au point 7, il faut déclencher une alarme.

9. la fiabilité du croisement est primordiale. Dans mes graphiques - FXCM, Vantage, FX Choice - certains EAs, y compris Universal Cross ne prennent pas de trades ou sont trop en retard.

10. SL réglable mais peut être laissé de côté si ce n'est pas nécessaire.

11. stop suiveur

12. le SL passe automatiquement au seuil de rentabilité après X pips de profit

13. Nombre maximum de trades ouverts

14. numéro magique

Salutations

Jeff