Aide au codage - page 352

 
freakout:
bonjour,

Cher mladen, j'ai une petite demande à vous faire - pourriez-vous désactiver toutes les informations que l'indicateur joint ci-dessous affiche dans le coin supérieur gauche ?

merci d'avance ;-)

J'ai créé une option pour activer/désactiver les commentaires.

Dossiers :
 
paradise77:
Bonjour,

Je suis nouveau ici. Je voudrais mettre à jour un objet rectangle, mais je ne sais pas comment. Le code ci-dessous a été utilisé pour créer des rectangles d'objets, si les EMAs se croisent. Ces rectangles doivent se terminer si le prix retrace et le touche. Comment faire ?

Merci d'avance.

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 clrLime

#property indicator_width1 2

#property indicator_color2 clrMagenta

#property indicator_width2 2

extern int EMA1 = 3;

extern int EMA2 = 21;

extern int EMA3 = 63;

extern double arrowDistance = 0.0003;

extern color upRectColor = clrYellow;

extern color dnRectColor = clrDodgerBlue;

extern color touchRectColor = clrDarkGray;

//---

extern double rectHigh = 0.0001;

extern int rectDays = 3;

extern int bars_limit = 2000;

extern bool showRectangle = true;

double upArrow[];

double dnArrow[];

double prev2EMA1, prev2EMA2, prev2EMA3;

double prevEMA1, prevEMA2, prevEMA3;

double curEMA1, curEMA2, curEMA3;

double prevOpenPrc, prevClosePrc, prevLowPrc, prevHighPrc;

string objRectName;

string rectArray[];

string indiName = "Emac";

int rectValidity = 0;

int arrayMaxAmounts = 99999;

int arrayCurAmount = 0;

int arrayLastAmount = 0;

//+------------------------------------------------------------------+

//| INIT() |

//+------------------------------------------------------------------+

int init() {

if (Period() != PERIOD_H1) {

Alert("Use only @ TF: H1");

return(0);

}

ArrayResize(rectArray,arrayMaxAmounts,arrayMaxAmounts);

IndicatorBuffers(2);

SetIndexBuffer(0,upArrow);

SetIndexBuffer(1,dnArrow);

SetIndexStyle(0,DRAW_ARROW);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(0,233);

SetIndexArrow(1,234);

SetIndexEmptyValue(0,0.0);

SetIndexEmptyValue(1,0.0);

SetIndexLabel(0,"Up");

SetIndexLabel(1,"Dn");

return(0);

}

//+------------------------------------------------------------------+

//| DEINIT() |

//+------------------------------------------------------------------+

int deinit() {

int k=0;

while (k<ObjectsTotal()) {

string objname = ObjectName(k);

if (StringSubstr(objname,0,StringLen("Emac")) == "Emac")

ObjectDelete(objname);

else

k++;

}

return(0);

}

//+------------------------------------------------------------------+

//| START() |

//+------------------------------------------------------------------+

int start() {

if (Period() != PERIOD_H1) {

Alert("Use only @ TF: H1");

return(0);

}

int limit,i,k;

int counted_bars=IndicatorCounted();

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

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//---

if (limit>bars_limit-1 && bars_limit!=0) limit=bars_limit-1;

if (Bars<EMA1 || Bars<EMA2 || Bars0 && bars_limit0 && bars_limit0 && bars_limit<EMA3)) {

Alert("Adjust limit settings or put more bars on your chart!");

return(0);

}

//---

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

prev2EMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i+2);

prev2EMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i+2);

prev2EMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i+2);

prevEMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i+1);

prevEMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i+1);

prevEMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i+1);

curEMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i);

curEMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i);

curEMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i);

prevOpenPrc = iOpen(NULL,0,i+1);

prevClosePrc = iClose(NULL,0,i+1);

prevLowPrc = iLow(NULL,0,i+1);

prevHighPrc = iHigh(NULL,0,i+1);

rectValidity = rectDays*86400;

if ( (prev2EMA1=prevEMA2)&&(curEMA1>curEMA2)&&(prevEMA2>=prevEMA3)&&(curEMA2>curEMA3) ) { // up

upArrow = prevLowPrc - arrowDistance;

if (showRectangle == true) {

//----------------------- Draw Rectangle ----------------------

objRectName = StringConcatenate(indiName,"_",FuncPeriodToStr(Period()),"_",DoubleToStr(Time,0));

if (ObjectFind(objRectName) == -1) { // not exists

ObjectCreate(objRectName, OBJ_RECTANGLE, 0,Time,prevLowPrc,Time+rectValidity,prevLowPrc+rectHigh);

ObjectSet(objRectName, OBJPROP_COLOR, upRectColor);

ObjectSet(objRectName, OBJPROP_WIDTH, 0);

ObjectSet(objRectName, OBJPROP_STYLE, STYLE_SOLID);

//--- put information to Array ---

arrayCurAmount = ArraySize(rectArray);

rectArray[arrayCurAmount] = StringConcatenate(objRectName,"$up$",Time,"$",prevClosePrc,"$0"); // 0=new, not yet touched

} // if

} // if

} // if

if ( (prev2EMA1>prev2EMA2)&&(prevEMA1<=prevEMA2)&&(curEMA1<curEMA2)&&(prevEMA2<=prevEMA3)&&(curEMA2<curEMA3) ) { // down

dnArrow = prevHighPrc + arrowDistance;

if (showRectangle == true) {

//----------------------- Draw Rectangle ----------------------

objRectName = StringConcatenate(indiName,"_",FuncPeriodToStr(Period()),"_",DoubleToStr(Time,0));

if (ObjectFind(objRectName) == -1) { // not exists

ObjectCreate(objRectName, OBJ_RECTANGLE, 0, Time,prevHighPrc,Time+rectValidity,prevHighPrc-rectHigh);

ObjectSet(objRectName, OBJPROP_COLOR, dnRectColor);

ObjectSet(objRectName, OBJPROP_WIDTH, 0);

ObjectSet(objRectName, OBJPROP_STYLE, STYLE_SOLID);

//--- put information to Array ---

arrayCurAmount = ArraySize(rectArray);

rectArray[arrayCurAmount] = StringConcatenate(objRectName,"$dn$",Time,"$",prevClosePrc,"$0"); // 0=new, not yet touched

} // if

} // if

} // if

} // for

//----------------------- Edit Rectangle, change time2 & color, if price touched ----------------------

return(0);

} // start

//+------------------------------------------------------------------+

void DelObjects(string id) {

int ot1=ObjectsTotal();

while(ot1>=0) {

if (StringFind(ObjectName(ot1),id,0)>-1) {

ObjectDelete(ObjectName(ot1));

}

ot1--;

}

return;

}

//+------------------------------------------------------------------+

string FuncPeriodToStr(int thePeriod) {

switch(thePeriod) {

case 1: return("M1");

case 5: return("M5");

case 15: return("M15");

case 30: return("M30");

case 60: return("H1");

case 240: return("H4");

case 1440: return("D1");

case 10080: return("W1");

case 43200: return("MN1");

default: return("MN1");

}

}

//+------------------------------------------------------------------+

@Mladen,

Pouvez-vous m'aider à donner un indice sur l'édition du rectangle ?

J'ai trouvé ceci :

*) Types d'objets - Documentation MQL4

*) Propriétés des objets - Documentation MQL4

Je peux obtenir les propriétés du rectangle (time1, price1, time2, price2, color), puis comparer le price1 ou price2 au prix actuel Ask/Bid. Si le prix Ask/Bid touche le prix 1 ou 2, alors je dois faire ce qui suit :

a) Je n'ai pas besoin d'un tableau, mais juste de regarder chaque objet rectangle.

Supprimer l'objet, le recréer en utilisant new time2 et newcolor.

b) Comment connaître la position de la bougie à OBJPROP_PRICE1 ? Nous utilisons normalement la boucle "for" comme

for (i=limit ; i>0 ; i--)

comment pouvons-nous obtenir le "i" de la barre qui a le prix 1 ?

c) Si je ne supprime pas et ne recrée pas le rectangle, puis-je simplement utiliser ObjectSet pour changer le temps 2 et la couleur du rectangle ?

Merci.

 
paradise77:
@Mladen,

Pouvez-vous m'aider à donner un indice sur l'édition du rectangle ?

J'ai trouvé ceci :

*) Types d'objets - Documentation MQL4

*) Propriétés des objets - Documentation MQL4

Je peux obtenir les propriétés du rectangle (time1, price1, time2, price2, color), puis comparer le price1 ou price2 au prix actuel Ask/Bid. Si le prix Ask/Bid touche le prix 1 ou 2, alors je dois faire ce qui suit :

a) Je n'ai pas besoin de tableau, mais juste de regarder chaque objet rectangle.

Supprimer l'objet, le recréer en utilisant new time2 et newcolor.

b) Comment connaître la position de la bougie à OBJPROP_PRICE1 ? Nous utilisons normalement la boucle "for" comme

comment pouvons-nous obtenir le "i" de la barre qui a le prix 1 ?

c) Si je ne supprime pas et ne recrée pas le rectangle, puis-je simplement utiliser ObjectSet pour changer le temps 2 et la couleur du rectangle ?

Merci.

Dans votre cas, vos prix sont corrects. Vous devez utiliser les temps pour limiter les cases de gauche à droite.

 

Cosmiclifeform,

Merci pour cette pièce, en fait j'ai utilisé instaforex demo.j'ai téléchargé le 1M prix fiest comme la méthode normale.je fais ensuite le réglage, en utilisant EURUSD, voir les copies d'écran ci-dessous de l'onglet rapport et le journal .

//rapports, notant mais zerp, pourquoi ?

cosmiclifeform:
Bonjour Mastercash,

J'ai exécuté l'EA sur un compte de démonstration FXDD...et n'ai rien fait de spécial...j'ai juste exécuté l'EA dans le Strategy Tester avec les paramètres par défaut.

J'aimerais pouvoir vous aider davantage... mais sans indices spécifiques à rechercher (journaux d'erreurs, captures d'écran et autres conditions), il sera impossible de savoir pourquoi vous obtenez des résultats vides.

Tout ce que je peux vous recommander est...

Essayez d'abord un bon EA dans le testeur, dont vous savez qu'il fonctionne bien.

Cela vous permettra de vérifier que vos comptes de démonstration et vos procédures sont corrects.

Obtenez d'abord la confiance que tout fonctionne comme il se doit.

Ensuite, essayez votre TraderEA de Nice... et notez exactement ce qui se passe. Même un écran vide devrait avoir des logs à vérifier.

Essayez d'ajouter des instructions PRINT et COMMENTAIRES partout... puis vérifiez à nouveau vos journaux... à la fois dans l'onglet EA et dans l'onglet Journal...

Vos COMMENTAIRES s'afficheront également à l'écran... vous devriez donc voir si votre EA fonctionne ou non.

L'essentiel pour obtenir une bonne aide au codage...

est de fournir le plus d'indices possible sur ce qui se passe avec votre EA...

Continuez à essayer tout ce qui est possible... et faites-nous part des résultats.

Prenez soin de vous,

Robert
Dossiers :
backtest1.png  14 kb
backtest2.png  3 kb
 
mladen:
Dans votre cas, vos prix sont corrects. Vous devez utiliser les temps pour limiter les cases de gauche et de droite.

Merci mladen. Voulez-vous dire que je dois utiliser le Time2 dynamiquement ? Le temps 1, le prix 1 et le prix 2 sont fixes. Mais Time2 dépend de la barre courante (i), et se déplace, jusqu'à ce que le prix touche le rectangle, ou qu'il dépasse le temps de réglage par défaut du rectangle.

En d'autres termes, il est impossible de changer la couleur et le temps 2 d'un rectangle ?

Merci

 
paradise77:
Merci mladen. Voulez-vous dire que je dois utiliser le Time2 dynamiquement ? Time1, price1 & price2 sont fixes. Mais Time2 dépend de la barre courante (i), et se déplace, jusqu'à ce que le prix touche le rectangle, ou qu'il dépasse le temps de réglage du rectangle par défaut.

En d'autres termes, il est impossible de changer la couleur et le temps2 d'un rectangle ?

Merci

paradise77

Oui, vous devez

De cette façon, vous ajusterez toujours la bordure droite de la boîte (si elle a besoin d'ajustement, bien sûr)

 

Bonjour Monsieur Mladen et Mrtools.

Je n'aime vraiment pas trop les alertes car j'aime plutôt un système visuel, donc tout ce bruit et ces fenêtres popup ne font que me distraire. Je ne mets que quelques alertes du CCI quand il y a survente ou surachat, c'est tout.

Mais il y a une alerte que j'aimerais avoir, c'est lorsque "mon" SSA + MA fait un croisement avec la MA, soit vers le haut, soit vers le bas.

Autre chose, j'ajoute toujours trois niveaux à ce bel outil ; bien sûr la zeroline, 0.0, mais aussi -0.3 et 0.3.

J'aimerais également obtenir une alerte lorsque le SSA franchit le niveau -0.3 et le niveau 0.3. Le niveau 0.0 n'est pas nécessaire.

Comme alerte un simple son et un popup, c'est tout.

Merci !

Dossiers :
ssa__ma.mq4  5 kb
 
Wulong10:
Bonjour Monsieur Mladen et Mrtools.

Je n'aime vraiment pas trop les alertes car j'aime plutôt un système visuel, donc tout ce bruit et ces fenêtres popup ne font que me distraire. Je n'active que quelques alertes du CCI en cas de survente ou de surachat, c'est tout.

Mais il y a une alerte que j'aimerais avoir, c'est quand "mon" SSA + MA fait un croisement avec la MA, soit vers le haut soit vers le bas.

Autre chose, j'ajoute toujours trois niveaux à ce bel outil ; bien sûr la zeroline, 0.0, mais aussi -0.3 et 0.3.

J'aimerais également obtenir une alerte lorsque le SSA franchit le niveau -0.3 et le niveau 0.3. Le niveau 0.0 n'est pas nécessaire.

Comme alerte un simple son et une popup, c'est tout.

Merci à vous !

Wulong10

Le problème avec le SSA est qu'il s'agit d'un algorithme de recalcul. Ajouter des alertes à cet algorithme n'est pas judicieux, du moins à mon avis, car il changera toujours l'emplacement des croisements et parfois les croisements disparaîtront complètement. Il est préférable de l'utiliser en mode non-signal (estimation seulement).

 

Bonjour Mladen,

Je sais que le SSA recalcule sur les échéances supérieures.

Quand je l'utilise sur le M5, il change un peu, sur le M15 beaucoup plus, mais sur le M1 j'ai beaucoup testé cet indy et j'en suis très satisfait. Avec mes réglages, il ne s'adapte vraiment pas beaucoup, en fait il est très précis.

Bien sûr, quand il y a une longue hausse ou une longue baisse du prix, il n'est pas très fiable, mais n'est-ce pas le cas pour beaucoup d'indicateurs ?

Ensuite, vous utilisez une moyenne mobile simple sur le graphique pour des questions de sécurité ...

Peut-être que quelqu'un d'autre ne peut pas utiliser les alertes, mais moi je peux.

Les alertes du CCI ne sont pas toujours justes non plus, mais ce n'est qu'une indication de ce qui pourrait se passer ensuite.

Donc, si l'ASS émet une alerte, c'est à moi de décider ce qu'il faut faire et je commence à y arriver.

D'ailleurs, je pense que je ne suis pas le seul à aimer le SSA ...

Des croix qui disparaissent ? Pas très souvent sur la M1 et je regarde ce graphique depuis des jours ...

Donc, j'aimerais vraiment avoir des alertes, si possible.

Merci beaucoup !

 
Wulong10:
Bonjour Mladen,

Je sais que le SSA recalcule sur des échelles de temps plus élevées.

Lorsque je l'utilise sur le M5, il change un peu, sur le M15 beaucoup plus, mais sur le M1 j'ai beaucoup testé cet indy et j'en suis très satisfait. Avec mes réglages, il ne s'adapte vraiment pas beaucoup, en fait il est très précis.

Bien sûr, quand il y a une longue hausse ou une longue baisse du prix, il n'est pas très fiable, mais n'est-ce pas le cas pour beaucoup d'indicateurs ?

Ensuite, vous utilisez une moyenne mobile simple sur le graphique pour des questions de sécurité ...

Peut-être que quelqu'un d'autre ne peut pas utiliser les alertes, mais moi je peux.

Les alertes du CCI ne sont pas toujours justes non plus, mais ce n'est qu'une indication de ce qui pourrait se passer ensuite.

Donc, si l'ASS émet une alerte, c'est à moi de décider ce qu'il faut faire et je commence à y arriver.

D'ailleurs, je pense que je ne suis pas le seul à aimer le SSA ...

Des croix qui disparaissent ? Pas très souvent sur la M1 et je regarde ce graphique depuis des jours ...

Donc, j'aimerais vraiment avoir des alertes, si possible.

Danke schön !

Wulong10

Le SSA recalcule toujours (croyez-moi puisque c'est moi qui ai fait cette dll pour le calculer). Il n'y a pas d'exception à cette règle (peu importe la période sur laquelle vous l'utilisez).

De plus, si le nombre de calculs est défini à > 1, il recalculera toutes les barres. Si le nombre de calculs est fixé à 1, alors au moins les barres "lag" seront recalculées.

Raison: