Rejoindre la communauté
banner_forum
Devenez membre de la plus grande
communauté francophone sur le Forex
Partagez, échangez et apprenez en gagnant des crédits sur votre compte de trading

Comment faire un indic qui ne repeint pas

  • furynick

    Beaucoup d'entre vous ont déjà été confrontés aux indicateurs qui repeignent, pour certain c'est voulu mais pour la plupart c'est un bug et ça fausse les signaux.

    Pire, ces indicateurs sont inexploitables dans un EA.

    Comment reconnaitre un indicateur qui repeint :
    - visuellement, lorsque vous affichez un indicateur sur un graphique en train de tourner (soit en forward soit en backtest), les informations affichées juste avant l'apparition d'une nouvelle barre devraient être identiques une fois que la nouvelle barre est apparue. Pour être plus précis, si le cours de fermeture de la barre N-1 est égal au cours d'ouverture de la barre courante, la valeur affichée par l'indicateur avant et après l'affichage de la nouvelle barre doit être identique.
    Dans tous les cas, seule la barre courante doit varier (puisque le cours actuel de la paire fluctue), l'ensemble des barres précédentes ne doivent jamais subir d'altération.

    - d'un point de vue du codage c'est très simple, le code correct pour un indicateur est le suivant (Cf. http://docs.mql4.com/customind/IndicatorCounted - l'exemple donné est correct bien que manque un peu de rigueur) :
    Code
    int start() { int limit; int counted_bars=IndicatorCounted(); // nombre de barres déjà représentées if(counted_bars<0) return(-1); // le nombre de barres déjà dessinées ne peut pas être inférieur à 0 if(counted_bars>0) counted_bars--; // la dernière barre - la barre courante - doit toujours être recalculée limit=Bars-counted_bars; // le nombre de barre à calculer est le nombre totale de barres contenues dans l'historique du graphique moins le nombre de barres déjà dessinées // boucle principale for(int i=limit; i>=0; i--) { //---- ma_shift set to 0 because SetIndexShift called abowe ExtBlueBuffer[i]=iMA(NULL,0,JawsPeriod,0,MODE_SMMA,PRICE_MEDIAN,i); ExtRedBuffer[i]=iMA(NULL,0,TeethPeriod,0,MODE_SMMA,PRICE_MEDIAN,i); ExtLimeBuffer[i]=iMA(NULL,0,LipsPeriod,0,MODE_SMMA,PRICE_MEDIAN,i); } //---- done return(0); }
  • Djmisterjon

    defenie repeint ?
  • furynick

    repeindre = repaint

    les valeurs précédemment affichées sont modifiées après coup. Un exemple d'indicateur qui repeint est le CdG de Belkhayate (et c'est normal).
    J'ai récemment vu que le THV Ichimoku Cloud Histo repeint très subtilement (l'avant dernière barre).

    Par exemple, sur EURUSD M15 à 11:00, un indicateur affiche la séquence suivante :
    achat, achat, rien, rien, rien, vente, rien, vente, rien, [barre en cours]
    à 11:15 il devrait afficher
    achat, achat, rien, rien, rien, vente, rien, vente, rien, vente, [barre en cours]
    mais il affiche
    achat, achat, rien, rien, rien, vente, rien, vente, vente, vente, [barre en cours]

    Ici l'avant dernière valeur à été modifié après la clôture de la barre à laquelle elle se réfère, l'indicateur à "repeint", recalculé et réaffiché une autre valeur à la place de celle qui avait été précédemment calculée et affichée.

    J'espère avoir été assez compréhensible.
  • Lorka85

    merci de ton parage de connaisance

    comme tu parle du thv cloud, tu sais si le thv4 Trix mtf repeint beaucoup aussi ? tu doit l'avoir dans ton metatrader je suppose, c'est dans le pack thv. changer les 4 unité de periode en 15 30 60 240 et met en 1 pour que ca suive la MA fast du trix THV basique.

    car je mise pas mal sur cette trix mtf en ce moment après ton verdict sanguinaire (et juste) sur le fisher :)
  • furynick

    Bien que le THV4 Trix MTF ne soit pas "philosophiquement" parfait il ne repeint pas et le THV4 Trix Called sur lequel il s'appuie est quant à lui dans le pur respect d'un indicateur qui ne repeint pas.

    Aucun problème donc, les THV4 Trix sont fiables à 100%
  • Lorka85

    GENIAL fury :) Merci.
    C'est justement ces 2 indicateurs précisément que j'utilise pour le moment.
    Par contre c'est a partir du changement de pente d'une des 2 lignes (rapide ou lente) que le trix mtf gere les signaux, pas au croisement, mais c'est peu être lieux.
    et tu connais d'autre indicateur trix a part la trix SwingMan et THV ? juste de nom ?
  • furynick

  • Djmisterjon

    un merci a google et funyick
  • Yougo76

    J'ai pas exactement compris le codage correct pour un indicateur, pourriez vous davantage expliquer ?
    J'avais lu quelque par qu'à un endroit du code, il ne devait pas y avoir un certain i=0.
    J'ai trouvé des indicateurs qui m'ont permis de finir une méthode qui me parait pas mal mais comme les signaux en visuel sur le passé sont excellent, j'ai peur que lesdits indicateurs repeignent.

    Merci
  • thebud49

    On va prendre comme exemple le semafor qui parait le must quand on regarde le graphique en arriere. Mais en live........

    Si l'indication de ton indicateur bouge encore après la clôture de la bougie en cours c'est qu'il repeint.
    Le semafor pour exemple t'indique les point Haut et bas quand tu regarde en arrière tu te dit c'est le St graal ce truc il a toujours raison mais en vrai si il indc un point haut et qu'un nouveau point haut apparaît en cour de route il modifie l'existant


    Si tu n'est pas sur test le en M1 et regarde en live comment il réagit
  • kopakabana

    Sil y avait un indicateur qui prédit l'avenir alors tout le monde le saurait mais il y existe la projection du kumo sur l ichimoku. Elle est assez efficace
  • alixbis — en réponse à furynick dans son message #20781

    Bonjour le code est à rajouter à l indicateur mais à quel endroit ! Merci pour ton post
  • mikroub

    Plop, déterrage de post.

    alixbis, le 14/07/2013 dit :
    Bonjour le code est à rajouter à l indicateur mais à quel endroit ! Merci pour ton post

    Furynick t'a donné un exemple, un simple copier-coller ne suffira pas... Il faut adapter le concept à l'indicateur que tu veux modifier... Mon avis est que c'est peine perdue, car la plupart du temps, les indicateurs miracles repeignent tous... Un indicateur est là pour indiquer le passé... pas pour te dire: "c'est maintenant, vas y fonces !", wrong way...

    Pour info, même l'indicateur posté par Furynick repeint entre les bougies [i] et [i+1]. Ce n'est pas prédictif, c'est l'analyse que tu en fais...
    Modifié le 2013-10-28 19:17:40 par mikroub
  • goldy_40

    Bonjour,
    J'ai moi aussi ce problème. J'utilise une méthode basée sur 2 indicateurs bricolés maison"...

    1. Le premier donne des flèches de tendance et des points d'engagement. Soit le meilleur moment pour un engagement. Son code est basé sur les clotures des chandelles précédentes, il ne repaint pas. Sauf qu'un engagement sur deux est un faux départ si on l'utilise seul. Non rentable à programmer seul, donc.

    2. Le second ressemble à une moyenne mobile lissée et idéalisée, bicolore de plus.

    a. Sur le graphisme, après coup, il suffirait de trouver une flèche et une courbe de tendance de la même couleur pour trouver un vrai point d'engagement.

    b. Et le point de sortie se situe au moment où la courbe de tendance change de sens et de couleur... Sauf qu'avec ce problème de correction, je n'arrive pas à l"automatiser.vJe reconnais aussi que mon expérience en programmation ne remonte qu'à quelques mois...

    Les points d'entrée et de sortie idéaux ont été rajoutés sur le graph par des lignes verticales (Vert pour Buy, Magenta pour Sell, et discontinues de chaque couleur correspondante pour les points de sortie, lors d'un changement de couleur dela courbe de tendance).

    Quelqu'un a t-il une idée à leur propos pour les transformer en formules Buy, Sell, BuyStop et SellStop de EA ?
    Et aussi éliminer du graphisme, dans ce cas, les flèches qui ne sqont pas de la même couleur que celle de la courbe de tendance.

    Ce serait là l'indicateur idéal pour trader sans jamais se tromper et avoir des trades positifs au moins 9 fois sur 10.

    Merci d'avance.
    ========================================================================================================
    1er indicateur :
    Code
    //********************************** #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 SpringGreen #property indicator_color2 DeepPink #property indicator_width1 4 #property indicator_width2 4 //================================== extern int p=6; extern int s=3; extern int cb=10000; //300 //================================== double fx[],fxL[],za[]; double z1,z2,ki; int fs; //********************************** int init() { IndicatorBuffers(3); //------------------- SetIndexBuffer(0,fx); SetIndexEmptyValue(0,0.0); SetIndexBuffer(1,fxL); SetIndexEmptyValue(1,0.0); //------------------- SetIndexBuffer(2,za); //-------------------------- ki=2.0/(p+1); //-------------------------- return(0); } //*************************************************************************** int start() { SetIndexDrawBegin(0,Bars-cb); SetIndexDrawBegin(1,Bars-cb); for (int i=cb; i>=0; i--) {fx[i]=Close[i];} for (int m=0; m<=s; m++) { z1=fx[0]; for (i=0; i<=cb; i++) {z1=z1+(fx[i]-z1)*ki; za[i]=z1;} z2=fx[cb]; for (i=cb; i>=0; i--) {z2=z2+(fx[i]-z2)*ki; fx[i]=(za[i]+z2)/2;} } fs=0; for (i=cb; i>=0; i--) { if (fx[i]>fx[i+1]) fs=1; if (fx[i]<fx[i+1]) {if (fs==1) fxL[i+1]=fx[i+1]; fs=2;} if (fs==2) fxL[i]=fx[i]; else fxL[i]=0.0; } return(0); } //************************************************************
    ================================================

    2ème indicateur :

    Code
    //+------------------------------------------------------------------+ //| This MQL is generated by Expert Advisor Builder | //| http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ | //| | //| In no event will author be liable for any damages whatsoever. | //| Use at your own risk. | //| | //+------------------- DO NOT REMOVE THIS HEADER --------------------+ // Cet indicateur donne des résultats exceptionnels relié à l'indicateur de courbe de tendance at_ZDnsw_MODIFIE // Si flèche + at_ZSnsw même couleur = point d'engagement confirmé. // Si at_ZSnsw change de couleur (sens) ou repaint = point de sortie. // Si at_ZDnsw et flèche de couleur différente = pas d'engagement. #property copyright "Expert Advisor Builder" #property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/" #property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 SpringGreen #property indicator_color2 Magenta extern int arrowSize = 2; double upArrow[], dnArrow[]; // points d'engagement si confirmés par at_ZDnsw double Dir[]; int init() { IndicatorBuffers(3); SetIndexBuffer(0,upArrow); SetIndexBuffer(1,dnArrow); SetIndexBuffer(2,Dir); SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,arrowSize); SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,arrowSize); SetIndexArrow(0,233); SetIndexArrow(1,234); IndicatorDigits(Digits+1); return(0); } int start() { int limit; int counted_bars=IndicatorCounted(); if(counted_bars>0) counted_bars--; if(counted_bars<1) ArrayInitialize(Dir,0.0); limit=Bars-counted_bars; for(int i=limit; i>0; i--) { int Current = i; int Order = 0; // Positions chandelles précédentes pour Buy double Buy1_1 = iClose(NULL, 0, Current + 1); double Buy1_2 = iHigh(NULL, 0, Current + 2); double Buy2_1 = iClose(NULL, 0, Current + 0); double Buy2_2 = iHigh(NULL, 0, Current + 1); double Buy3_1 = iClose(NULL, 0, Current + 0); double Buy3_2 = iHigh(NULL, 0, Current + 2); // Positions chandelles précédentes pour Sell double Sell1_1 = iClose(NULL, 0, Current + 1); double Sell1_2 = iLow(NULL, 0, Current + 2); double Sell2_1 = iClose(NULL, 0, Current + 0); double Sell2_2 = iLow(NULL, 0, Current + 1); double Sell3_1 = iClose(NULL, 0, Current + 0); double Sell3_2 = iLow(NULL, 0, Current + 2); if (Buy1_1 > Buy1_2 && Buy2_1 > Buy2_2 && Buy3_1 > Buy3_2) Order = 1; // Condition Buy if (Sell1_1 < Sell1_2 && Sell2_1 < Sell2_2 && Sell3_1 < Sell3_2) Order = -1; // Condition Sell if(Order==0) Dir[i] = Dir[i+1]; else Dir[i] = Order; if(Dir[i]!=Dir[i+1]){ if(Dir[i]==1) upArrow[i] = Low[i]-0.5*iATR(NULL,0,10,i+1); // Buy si confirmé par at_ZDnsw else if(Dir[i]==-1) dnArrow[i] = High[i]+0.5*iATR(NULL,0,10,i+1); // Sell si confirmé par at_ZDnsw } } return(0); } //+------------------------------------------------------------------+
    Modifié le 2013-12-07 15:07:42 par goldy_40
    goldy_40 a joint une image
    comment-faire-un-indic-qui-ne-repeint-pas-8324
  • goldy_40 — en réponse à goldy_40 dans son message #87854

    Et sinon, solution ultime si je n'arrive pas à empêcher l'indicateur de courbe de tendance de repeindre, le conserver simplement pour éviter les biais psychologiques, et le remplacer éventuellement par le résultat donné par cet indicateur de tendance qui, lui, ne repeint pas et dont je joins le code.

    Code
    #property indicator_separate_window // #property indicator_chart_window #property indicator_color1 Blue #property indicator_color2 Red #property indicator_width1 1 #property indicator_width2 1 #property indicator_color3 Blue #property indicator_color4 Red #property indicator_width3 1 #property indicator_width4 1 #property indicator_buffers 4 double TrendUp[], TrendDown[]; double UpBuffer[]; double DnBuffer[]; int changeOfTrend; extern int Nbr_Periods = 10; extern double Multiplier = 1.0; // 4.0 //---- input parameters extern int sidFontSize = 30; extern string sidFontName = "Ariel"; extern string NoteRedGreenBlue = "Red/Green/Blue each 0..255"; extern int sidRed = 30; extern int sidGreen = 30; extern int sidBlue = 30; extern int sidXPos = 30; extern int sidYPos = 150; extern bool tagDisplayText = true; extern string tagText = "www.marketcalls.in"; extern int tagFontSize = 10; extern string tagFontName = "Ariel"; extern int tagRed = 30; extern int tagGreen = 30; extern int tagBlue = 30; extern int tagXPos = 200; extern int tagYPos = 300; //---- data string SID = "Symbol"; int sidRGB = 0; string TAG = "Tag"; int tagRGB = 0; string tf; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexBuffer(0, TrendUp); SetIndexStyle(0, DRAW_LINE, 1, 1); SetIndexLabel(0, "Trend Up"); SetIndexBuffer(1, TrendDown); SetIndexStyle(1, DRAW_LINE, 1, 1); SetIndexLabel(1, "Trend Down"); SetIndexStyle(2,DRAW_ARROW,EMPTY); SetIndexStyle(3,DRAW_ARROW,EMPTY); SetIndexBuffer(2,UpBuffer); SetIndexBuffer(3,DnBuffer); SetIndexArrow(2,233); SetIndexArrow(3,234); SetIndexLabel(3,"Up Signal"); SetIndexLabel(4,"Down Signal"); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- ObjectDelete(SID); ObjectDelete(TAG); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { double ClosePrice=Close[0]; // watermark(TAG, tagText, tagFontSize, tagFontName, tagRGB, tagXPos, tagYPos); string str=StringConcatenate("www.marketcalls.in LTP : ",ClosePrice); watermarkclose(TAG,str,10, tagFontName, tagRGB, 80, 20); int limit, i, flag, flagh, trend[5000]; double up[5000], dn[5000], medianPrice, atr; int counted_bars = IndicatorCounted(); //---- check for possible errors if(counted_bars < 0) return(-1); //---- last counted bar will be recounted if(counted_bars > 0) counted_bars--; limit=Bars-1-counted_bars; //Print(limit); //---- for (i = Bars; i >= 1; i--) { TrendUp[i] = EMPTY_VALUE; TrendDown[i] = EMPTY_VALUE; atr = iATR(NULL, 0, Nbr_Periods, i); //Print("atr: "+atr[i]); medianPrice = (High[i]+Low[i])/2; //Print("medianPrice: "+medianPrice[i]); up[i]=medianPrice+(Multiplier*atr); //Print("up: "+up[i]); dn[i]=medianPrice-(Multiplier*atr); //Print("dn: "+dn[i]); trend[i]=1; if (Close[i]>up[i+1]) { trend[i]=1; if (trend[i+1] == -1) changeOfTrend = 1; //Print("trend: "+trend[i]); } else if (Close[i]<dn[i+1]) { trend[i]=-1; if (trend[i+1] == 1) changeOfTrend = 1; //Print("trend: "+trend[i]); } else if (trend[i+1]==1) { trend[i]=1; changeOfTrend = 0; } else if (trend[i+1]==-1) { trend[i]=-1; changeOfTrend = 0; } if (trend[i]<0 && trend[i+1]>0) { flag=1; //Print("flag: "+flag); } else { flag=0; //Print("flagh: "+flag); } if (trend[i]>0 && trend[i+1]<0) { flagh=1; //Print("flagh: "+flagh); } else { flagh=0; //Print("flagh: "+flagh); } if (trend[i]>0 && dn[i]<dn[i+1]) dn[i]=dn[i+1]; if (trend[i]<0 && up[i]>up[i+1]) up[i]=up[i+1]; if (flag==1) up[i]=medianPrice+(Multiplier*atr); if (flagh==1) dn[i]=medianPrice-(Multiplier*atr); //-- Draw the indicator if (trend[i]==1) { TrendUp[i]=dn[i]; if (changeOfTrend == 1) { TrendUp[i+1] = TrendDown[i+1]; changeOfTrend = 0; } } else if (trend[i]==-1) { TrendDown[i]=up[i]; if (changeOfTrend == 1) { TrendDown[i+1] = TrendUp[i+1]; changeOfTrend = 0; } } if (trend[i]==1 && trend[i+1]==-1) { UpBuffer[i] = iLow(Symbol(),0,i)-(3*Point); DnBuffer[i] = EMPTY_VALUE; } if (trend[i]==-1 && trend[i+1]==1) { UpBuffer[i] = EMPTY_VALUE; DnBuffer[i] = iHigh(Symbol(),0,i)+(3*Point); } } WindowRedraw(); //---- return(0); } //+------------------------------------------------------------------+ void watermarkclose(string obj, string text, int fontSize, string fontName, color colour, int xPos, int yPos) { ObjectCreate(obj, OBJ_LABEL, 0, 0, 0); ObjectSetText(obj, text, fontSize, fontName, Red); ObjectSet(obj, OBJPROP_CORNER, 0); ObjectSet(obj, OBJPROP_XDISTANCE, xPos); ObjectSet(obj, OBJPROP_YDISTANCE, yPos); ObjectSet(obj, OBJPROP_BACK, true); }
  • goldy_40

    Autre alternative à cette courbe de tendance ingérable (toujours à coupler avec les flèches de tendance qui donnent les points d'entrée. Les points de sortie sont donnés par le renversement de tendance. Cette contrainte de stratégie qui oblige à attendre une flèche dans le même sens pour prendre un engagement évite tous les faux départs ou ceux qui ne seraient pas productifs en pips... :
    Si quelqu'un sait reproduire ce double résultat (Flèches d'indication + tendance dans une formule de EA, il est le bienvenu. Qu'il me contacte en privé pour m'en avertir.

    Code
    * //+------------------------------------------------------------------+ //| SuperTrend.mq4 v1.2 | //| Copyright © 2008, Jason Robinson (jnrtrading). | //| http://www.spreadtrade2win.com | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008, Jason Robinson." #property link "http://www.spreadtrade2win.com" #property indicator_chart_window #property indicator_color1 Lime #property indicator_color2 Red #property indicator_width1 2 #property indicator_width2 2 #property indicator_buffers 2 double TrendUp[], TrendDown[]; int changeOfTrend; extern int Nbr_Periods = 10; extern double Multiplier = 3.0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexBuffer(0, TrendUp); SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2); SetIndexLabel(0, "Trend Up"); SetIndexBuffer(1, TrendDown); SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 2); SetIndexLabel(1, "Trend Down"); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int limit, i, flag, flagh, trend[5000]; double up[5000], dn[5000], medianPrice, atr; int counted_bars = IndicatorCounted(); //---- check for possible errors if(counted_bars < 0) return(-1); //---- last counted bar will be recounted if(counted_bars > 0) counted_bars--; limit=Bars-counted_bars; //Print(limit); //---- for (i = Bars; i >= 0; i--) { TrendUp[i] = EMPTY_VALUE; TrendDown[i] = EMPTY_VALUE; atr = iATR(NULL, 0, Nbr_Periods, i); //Print("atr: "+atr[i]); medianPrice = (High[i]+Low[i])/2; //Print("medianPrice: "+medianPrice[i]); up[i]=medianPrice+(Multiplier*atr); //Print("up: "+up[i]); dn[i]=medianPrice-(Multiplier*atr); //Print("dn: "+dn[i]); trend[i]=1; if (Close[i]>up[i+1]) { trend[i]=1; if (trend[i+1] == -1) changeOfTrend = 1; //Print("trend: "+trend[i]); } else if (Close[i]<dn[i+1]) { trend[i]=-1; if (trend[i+1] == 1) changeOfTrend = 1; //Print("trend: "+trend[i]); } else if (trend[i+1]==1) { trend[i]=1; changeOfTrend = 0; } else if (trend[i+1]==-1) { trend[i]=-1; changeOfTrend = 0; } if (trend[i]<0 && trend[i+1]>0) { flag=1; //Print("flag: "+flag); } else { flag=0; //Print("flagh: "+flag); } if (trend[i]>0 && trend[i+1]<0) { flagh=1; //Print("flagh: "+flagh); } else { flagh=0; //Print("flagh: "+flagh); } if (trend[i]>0 && dn[i]<dn[i+1]) dn[i]=dn[i+1]; if (trend[i]<0 && up[i]>up[i+1]) up[i]=up[i+1]; if (flag==1) up[i]=medianPrice+(Multiplier*atr); if (flagh==1) dn[i]=medianPrice-(Multiplier*atr); //-- Draw the indicator if (trend[i]==1) { TrendUp[i]=dn[i]; if (changeOfTrend == 1) { TrendUp[i+1] = TrendDown[i+1]; changeOfTrend = 0; } } else if (trend[i]==-1) { TrendDown[i]=up[i]; if (changeOfTrend == 1) { TrendDown[i+1] = TrendUp[i+1]; changeOfTrend = 0; } } } WindowRedraw(); //---- return(0); } //+------------------------------------------------------------------+
    Modifié le 2013-12-09 12:50:54 par goldy_40
  • goldy_40 — en réponse à goldy_40 dans son message #87947

    Ci-joint l'explication de la formule recherchée (selon moi).
    Extrait :

    Code
    if (trend[i]==1) { // Tendance haussière TrendUp[i]=dn[i]; if (changeOfTrend == 1) { // Signal de changement de tendance (-à convertir en point de cloture si engagement en cours) TrendUp[i+1] = TrendDown[i+1]; changeOfTrend = 0; // Neutralisation du signal de changement de tendance } } else if (trend[i]==-1) { // Tendance baissière TrendDown[i]=up[i]; if (changeOfTrend == 1) { // Signal de changement de tendance (-à convertir en point de cloture si engagement en cours) TrendDown[i+1] = TrendUp[i+1]; changeOfTrend = 0; // Neutralisation du signal de changement de tendance

    J'espère ne pas avoir inversé les tendances (pas encore vérifié sur graphisme)
    Modifié le 2013-12-09 13:37:21 par goldy_40
  • forexensemble

    Si j'ai bien compris, dans l'idéal, tu souhaiterais utiliser les deux premiers indicateurs pour les intégrer à un robot de trading. Comme le 1er repeint, tu hésites entre celui-là et le 3 ou 4ème. C'est bien cela ?
  • forexensemble

    Juste une tentative "no repaint" pour ton indicateur.

    Remplace cette partie du code.
    Tu verras que l'indicateur ne "lisse" que l'historique, ce qui s'explique par le fait que seule la dernière bougie est calculée sur le live.
    Malgré cela, il garde sa pertinence si tu le combine avec l'indicateur fléché.

    C'est juste une modif "pour voir"...
    Code
    //*************************************************************************** int start() { int cb=Bars-1-IndicatorCounted(); Print(cb," ",Bars); if(cb < 0) return(-1); //SetIndexDrawBegin(0,Bars-cb);//cb //SetIndexDrawBegin(1,Bars-cb);//cb for (int i=cb; i>=0; i--) {fx[i]=Close[i];} for (int m=0; m<=s; m++) { z1=fx[0]; for (i=0; i<=cb; i++) {z1=z1+(fx[i]-z1)*ki; za[i]=z1;} z2=fx[cb]; for (i=cb; i>=0; i--) {z2=z2+(fx[i]-z2)*ki; fx[i]=(za[i]+z2)/2;} } fs=0; for (i=cb; i>=0; i--) { if (fx[i]>fx[i+1]) fs=1; if (fx[i]<fx[i+1]) {if (fs==1) fxL[i+1]=fx[i+1]; fs=2;} if (fs==2) fxL[i]=fx[i]; else fxL[i]=0.0; } return(0); } //************************************************************
    Modifié le 2013-12-10 21:28:01 par forexensemble
  • goldy_40 — en réponse à forexensemble dans son message #88064

    Encore merci pour cette précieuse aide. Je vais tester ça au plus tôt. Et si ça marche, c'est jackpot pour un EA performant avec seulement 2 indicateurs.