Stratégie-Zones transitoires/récurrentes et séries temporelles

Forums ProRealTime forum Français Discussions générales sur le Trading Stratégie-Zones transitoires/récurrentes et séries temporelles

Viewing 15 posts - 16 through 30 (of 58 total)
  • #33970

    Infos indicateur de statistiques sur les zones transitoires/récurrentes: Cet indicateur permet de déterminer, pour un nombre choisie H (Hleft/Hright), un intervalle pendant lequel le prix ne sera pas amené a revisiter la zone (zone qui deviendra donc une zone transitoire).

    Cet indicateur fournira des données statistiques sur notamment, la fréquence des zones transitoires confirmées/vraies (non revisitées par le prix),, ainsi que les probabilités sur les zones revisitées/transgressées (c’est à dire une zone potentielle transitoire non confirmée car le prix revisite et qui devient une zone récurrente), ainsi que des données sur la largeur moyenne d’un intervalle appelé K (principe détaillé plus bas). Cet indicateur en jouant avec l’intervalle H permet de trouver la fréquence des zones transitoires réelles et les fréquences sur les retracements avec la période de négociation et la fenêtre de négociation (à partir de K). Il permet donc en scrutant le passé d’établir des probabilités à partir de statistiques analysées.

    Voici les données traitées par l’indicateur:

    Nombre de barres : nombre total de barres sur lesquelles les stats sont calculées

    Barres de problèmes : nombre de barres transitoires réelles (souhaité: le moins possible tout en ayant un temps de négociation suffisant)

    Barres entièrement résolues: nombres de zones potentiellement transitoires qui deviennent par le suite récurrentes

    Fréquence de barres de problèmes réelles): barres de problèmes + barres entièrement résolues (souhaité: le moins possible)

    Fréquence de barres de problèmes possibles: (Barres de problèmes + barres entièrement résolues/ nombre de barres totales)

    Probabilités de résolution complète : fréquence des barres de problèmes possibles moins la fréquence des barres de problèmes réelles/ fréquence des barres de problèmes possibles  (utile quand PTZ formé donne la probabilité que la zone devient récurrente)

    L’indicateur différencient les zones fractales des zones transitoires et fait les stats séparément. Il calcule la largeur moyenne des barres de problèmes non résolues (probabilités élevées avec un gain plus modeste). C’est là qu’intervient le k, en gros cette donnée sert à déterminer par exemple, pour une zone qui deviendra (de fortes chances) à terme récurrente(revisitée) la probabilité pour que le prix retrace vers un objectif donné (en pips/ les probailités peuvent parfois atteindre des taux élevés)

    Enfin, l’indicateur trace des flèches sur les bougies où il existe des zones transitoires potentielles ou des zones entièrement résolues (couleur blanche) ou des zones transitoires confirmées/rélles (en bleu pour les bas et en rouge pour les hauts)

    Bonne lecture !!

    +++++++

     

     

    #34007

    Rapidement, voilà ce que j’en ai compris, et je comprends aussi pourquoi ce concept a été décrié par certains comme presque inutile et illusoire (ou même être du scam..). Mais puisque tous les chemins mènent à Rome en trading, et qu’il n’y a pas vraiment de route toute tracée, toute nouvelle idée peu potentiellement en amener d’autres et ainsi de suite.

    Ces zones sont détectées par des fractals trouvés après X périodes, avec des quantités de bars différentes à droite et à gauche (donc des pivots hi/lo plutôt). Si le prix retrace sur ces zones de supports / résistances ou si il les traversent, alors on les comptabilise et on peu évidemment en faire des statistiques. Puis, pour définir des probabilités futures sur le possible comportement du prix sur ces niveaux, on utilise la méthode de loi binomiale qui consiste à créer un arbre statistique des chances de succès d’un rebond ou d’un breakout.

    Je veux bien jeter un oeil à cet indicateur de statistique si son code course est disponible, mais d’emblée je pense que sans création de tableaux possibles, ça sera difficile de le reproduire.

     

    #34008

    Bonjour Nicolas,

    merci pour ton retour, souhaites tu que je le post ici ou dans la partie probuilder?

     

    #34009

    Je viens de réfléchir à ce que tu as dit sur la création des tableaux, si ce n’est pas possible, tu as raison mettons cela de côté pour l’instant :))

    Est ce que, comme tu me l’avais proposé au départ, je peux te demander ton aide pour convertir un code M T 4 concernant le théoreme des sous séquences, cela me paraît plus ‘essentiel’ à comprendre?

    Merci pour ton retour Nicolas !

    #34023

    Tu peux le poster dans ce fil pour ne pas disperser les informations.

    #34025

    Merci Nicolas ! Voici le code pour le theoreme de sous sequences (j’ ai aussi une autre version), merci pour ton aide !!

    #property indicator_chart_window
    #property indicator_buffers 2

    input uchar                 LongArrowCode                    = 225;
    input uchar                 ShortArrowCode                   = 226;
    input int                   ArrowSize                        = 10;
    input int                   LineWidth                        = 1;
    input ENUM_LINE_STYLE       LineStyle                        = STYLE_SOLID;
    input color                 LongColour                       = clrDeepSkyBlue;
    input color                 ShortColour                      = clrPeru;
    input bool                  ShowComments                     = true;
    input bool                  ShowLineInfo                     = true;
    input int                   MinLineBarsInfo                  = 20;

    double UpBuff[];
    double DownBuff[];

    double Vd[],AvgDistance[10],MaxDistance[10],AvgBars[10],MaxBars[10],mult;
    int Vi[150][150],Lines[10],LabelFontSize;
    bool Vb[10];
    color Colour[9];
    datetime MaxBarsDate[10],MaxDistanceDate[10],NewCandle;
    string Vs[150][150],TradeComment,LabelFontType;

    void OnInit()
    {int t1;

    SetIndexBuffer(0,UpBuff);
    SetIndexBuffer(1,DownBuff);
    SetIndexStyle(0,DRAW_NONE);
    SetIndexStyle(1,DRAW_NONE);
    SetIndexEmptyValue(0,0.0);
    SetIndexEmptyValue(1,0.0);

    mult=MathPow(10,(MathRound(Digits()*0.5)!=Digits()*0.5));

    LabelFontSize=10; LabelFontType=”Segoe UI”;
    Colour[1]=LongColour; Colour[2]=ShortColour; Colour[3]=16777215;
    TradeComment=”SS”; t1=0; while(t1<=100) {Vs[41][t1]=StringConcatenate(TradeComment,” “,t1); t1++;}

    Vs[32][1]=”Long”; Vs[32][2]=”Short”;}

    void OnDeinit(const int reason) {if (!IsTesting()) {RemoveObjects(TradeComment);}}

    int OnCalculate(const int rates_total,
    const int prev_calculated,
    const datetime &time[],
    const double &open[],
    const double &high[],
    const double &low[],
    const double &close[],
    const long &tick_volume[],
    const long &volume[],
    const int &spread[])

    {int t1,t2,t6,t7,t8;
    bool b1,b5;
    datetime h1=0;
    double d1,d6,d7,d8;
    string s1,s2;

    b5=(NewCandle!=time[0]); t1=0; while(t1<=b5*(rates_total-6))
    {Vb[1]=((high[t1+1]>high[t1+3] && high[t1+3]>high[t1+5]) ||
    (high[t1+3]>high[t1+4] && high[t1+4]>high[t1+5]) ||
    (high[t1+1]>high[t1+2] && high[t1+2]>high[t1+3]) ||
    (high[t1+2]>high[t1+3] && high[t1+3]>high[t1+4]));
    Vb[2]=((low[t1+1]<low[t1+3] && low[t1+3]<low[t1+5]) ||
    (low[t1+3]<low[t1+4] && low[t1+4]<low[t1+5]) ||
    (low[t1+1]<low[t1+2] && low[t1+2]<low[t1+3]) ||
    (low[t1+2]<low[t1+3] && low[t1+3]<low[t1+4]));

    Vb[3]=(Vb[1] || Vb[2]); UpBuff[t1]=0; DownBuff[t1]=0;

    if (!Vb[3]) {if (open[t1+1]<close[t1+1]) {UpBuff[t1]=low[t1+1];} if (open[t1+1]>=close[t1+1]) {DownBuff[t1]=high[t1+1];}} t1++;}

    if (b5) {ArrayInitialize(Lines,0); ArrayInitialize(AvgBars,0); ArrayInitialize(MaxBars,0);
    ArrayInitialize(AvgDistance,0); ArrayInitialize(MaxDistance,0); ArrayInitialize(MaxBarsDate,0); ArrayInitialize(MaxDistanceDate,0);}

    t7=0; t8=0; d7=0; d8=0; t1=0; while(t1<=b5*(rates_total-6))

    {d1=low[t1]; if (UpBuff[t1]>0) {Lines[1]+=(t1>0); s1=StringConcatenate(TradeComment,” long arrow “,TimeToString(time[t1]));
    DrawText(s1,CharToString(LongArrowCode),time[t1],d1,ArrowSize,”Wingdings”,Colour[1],ANCHOR_UPPER);
    b1=false; d6=0; t2=t1-1; while(t2>0 && !b1) {b1=(low[t2]<=d1); d6=MathMax(d6,high[t2]-low[t1]); t2–;}
    if (b1 || t2==0) {Lines[3]+=(int)(t1>0 && h1==time[0]);
    d6*=(t1>0); d7+=d6; if (d6>MaxDistance[1]) {MaxDistance[1]=d6; MaxDistanceDate[1]=Time[t1];}
    t6=(t1>0)*(t1-t2); t7+=t6; if (t6>MaxBars[1]) {MaxBars[1]=t6; MaxBarsDate[1]=Time[t1];}
    s1=StringConcatenate(TradeComment,” long line “,TimeToString(time[t1]));
    h1=time[t2+(t2>0)]; DrawTrendLine(s1,0,h1,d1,time[t1],d1,Colour[1],LineStyle,LineWidth);
    if (ShowLineInfo && t6>=MinLineBarsInfo) {s1=StringConcatenate(TradeComment,” long info “,TimeToString(time[t1]));
    s2=StringConcatenate(t6,” bars, “,DoubleStr(d6/(mult*Point())),” pips”);
    DrawText(s1,s2,Time[t1-2],d1,LabelFontSize,LabelFontType,Colour[1],ANCHOR_LEFT_UPPER);}}}

    d1=high[t1]; if (DownBuff[t1]>0) {Lines[2]+=(t1>0); s1=StringConcatenate(TradeComment,” short arrow “,TimeToString(time[t1]));
    DrawText(s1,CharToString(ShortArrowCode),time[t1],d1,ArrowSize,”Wingdings”,Colour[2],ANCHOR_LOWER);
    b1=false; d6=0; t2=t1-1; while(t2>0 && !b1) {b1=(high[t2]>=d1); d6=MathMax(d6,high[t1]-low[t2]); t2–;}
    if (b1 || t2==0) {Lines[4]+=(int)(t1>0 && h1==time[0]);
    d6*=(t1>0); d8+=d6; if (d6>MaxDistance[2]) {MaxDistance[2]=d6; MaxDistanceDate[2]=Time[t1];}
    t6=(t1>0)*(t1-t2); t8+=t6; if (t6>MaxBars[2]) {MaxBars[2]=t6; MaxBarsDate[2]=Time[t1];}
    s1=StringConcatenate(TradeComment,” short line “,TimeToString(time[t1]));
    h1=time[t2+(t2>0)]; DrawTrendLine(s1,0,h1,d1,time[t1],d1,Colour[2],LineStyle,LineWidth);
    if (ShowLineInfo && t6>=MinLineBarsInfo) {s1=StringConcatenate(TradeComment,” short info “,TimeToString(time[t1]));
    s2=StringConcatenate(t6,” bars, “,DoubleStr(d6/(mult*Point())),” pips”);
    DrawText(s1,s2,Time[t1-2],d1,LabelFontSize,LabelFontType,Colour[2],ANCHOR_LEFT_LOWER);}}}

    t1++;}

    if (b5) {AvgBars[0]=(double)(t7+t8)/(Lines[1]+Lines[2]); AvgBars[1]=(double)t7/Lines[1]; AvgBars[2]=(double)t8/Lines[2]; MaxBars[0]=MathMax(MaxBars[1],MaxBars[2]);
    AvgDistance[0]=(d7+d8)/((Lines[1]+Lines[2])*mult*Point()); AvgDistance[1]=d7/(Lines[1]*mult*Point()); AvgDistance[2]=d8/(Lines[2]*mult*Point());
    MaxDistance[1]/=(mult*Point()); MaxDistance[2]/=(mult*Point()); MaxDistance[0]=MathMax(MaxDistance[1],MaxDistance[2]);}

    NewCandle=time[0]; ScreenInfo();

    return(rates_total);}

    void DrawText(string r6,string r7,datetime x6,double f7,int x5,string r8,color x3,int x7)
    {if (r7==”” && ObjectFind(0,r6)!=-1) {ObjectDelete(0,r6);}
    if (r7!=””) {if (ObjectFind(0,r6)==-1) {ObjectCreate(0,r6,OBJ_TEXT,0,0,0);} ObjectSetString(0,r6,OBJPROP_TEXT,r7); ObjectSetInteger(0,r6,OBJPROP_TIME,x6);
    ObjectSetDouble(0,r6,OBJPROP_PRICE,f7); ObjectSetInteger(0,r6,OBJPROP_FONTSIZE,x5); ObjectSetString(0,r6,OBJPROP_FONT,r8); ObjectSetInteger(0,r6,OBJPROP_COLOR,x3);
    ObjectSetInteger(0,r6,OBJPROP_ANCHOR,x7);}}

    void DrawTrendLine(string r6,int x1,datetime x6,double f6,datetime x7,double f7,color x3,int x4,int x5)
    {if (f6==0 && f7==0 && ObjectFind(0,r6)!=-1) {ObjectDelete(0,r6);}
    if (f6>0 || f7>0) {if (ObjectFind(0,r6)==-1) {ObjectCreate(0,r6,OBJ_TREND,x1,0,0,0,0); ObjectSetInteger(0,r6,OBJPROP_RAY,false);}
    ObjectSetInteger(0,r6,OBJPROP_TIME,x6); ObjectSetInteger(0,r6,OBJPROP_TIME,1,x7); ObjectSetDouble(0,r6,OBJPROP_PRICE,f6); ObjectSetDouble(0,r6,OBJPROP_PRICE,1,f7);
    ObjectSetInteger(0,r6,OBJPROP_COLOR,x3); ObjectSetInteger(0,r6,OBJPROP_STYLE,x4); ObjectSetInteger(0,r6,OBJPROP_WIDTH,x5);}}

    void RemoveObjects(string r6)
    {int t1;

    t1=ObjectsTotal(); while(t1>=0) {if (StringFind(ObjectName(t1),r6,0)!=-1) {ObjectDelete(0,ObjectName(t1));} t1–;}}

    string DoubleStr(double f7)
    {double d1;
    string s7;

    d1=NormalizeDouble(f7,1); s7=DoubleToString(d1,(MathFloor(d1)!=d1)); return(s7);}

    void DrawLabel(string r6,string r7,ENUM_BASE_CORNER x4,int x1,int x2,int x5,string r8,color x3,bool b6)
    {if (r7==”” && ObjectFind(0,r6)!=-1) {ObjectDelete(0,r6);}
    if (r7!=””) {if (ObjectFind(0,r6)==-1) {ObjectCreate(0,r6,OBJ_LABEL,0,0,0);} ObjectSetInteger(0,r6,OBJPROP_CORNER,x4); ObjectSetString(0,r6,OBJPROP_TEXT,r7);
    ObjectSetInteger(0,r6,OBJPROP_FONTSIZE,x5); ObjectSetString(0,r6,OBJPROP_FONT,r8); ObjectSetInteger(0,r6,OBJPROP_COLOR,x3); ObjectSetInteger(0,r6,OBJPROP_BACK,b6);
    ObjectSetInteger(0,r6,OBJPROP_XDISTANCE,x1); ObjectSetInteger(0,r6,OBJPROP_YDISTANCE,x2);}}

    void ScreenInfo()
    {int t1,t2,t7;
    double d1;

    if (ShowComments) {t1=0; while(t1<=100) {Vs[40][t1]=””; Vi[32][t1]=Colour[3]; t1++;}
    d1=(double)(Lines[3]+Lines[4])*100/(Lines[1]+Lines[2]);
    t7+=1; Vs[40][t7]=StringConcatenate(“Total lines “,Lines[1]+Lines[2],”, open lines “,Lines[3]+Lines[4],”, “,DoubleToString(d1,3),”%”);
    t7+=1; Vs[40][t7]=StringConcatenate(“Average line duration “,DoubleStr(AvgBars[0]),” bars”);
    t7+=1; Vs[40][t7]=StringConcatenate(“Maximum line duration “,DoubleStr(MaxBars[0]),” bars”);
    t7+=1; Vs[40][t7]=StringConcatenate(“Average line distance “,DoubleStr(AvgDistance[0]),” pips”);
    t7+=1; Vs[40][t7]=StringConcatenate(“Maximum line distance “,DoubleStr(MaxDistance[0]),” pips”);
    t7+=1; Vs[40][t7]=” “;
    t1=1; while(t1<=2) {if (Lines[t1]>0) {d1=(double)Lines[t1+2]*100/Lines[t1];
    t7+=1; Vs[40][t7]=StringConcatenate(Vs[32][t1],” lines “,Lines[t1],”, open lines “,Lines[t1+2],”, “,DoubleToString(d1,3),”%”);
    t7+=1; Vs[40][t7]=StringConcatenate(“Average line duration “,DoubleStr(AvgBars[t1]),” bars”);
    t7+=1; Vs[40][t7]=StringConcatenate(“Maximum line duration “,DoubleStr(MaxBars[t1]),” bars at “,TimeToString(MaxBarsDate[t1]));
    t7+=1; Vs[40][t7]=StringConcatenate(“Average line distance “,DoubleStr(AvgDistance[t1]),” pips”);
    t7+=1; Vs[40][t7]=StringConcatenate(“Maximum line distance “,DoubleStr(MaxDistance[t1]),” pips at “,TimeToString(MaxDistanceDate[t1]));
    t7+=1; Vs[40][t7]=” “;}
    t1++;}

    t2=14; t1=0; while(t1<=100) {DrawLabel(Vs[41][t1],Vs[40][t1],CORNER_LEFT_UPPER,2,t2,LabelFontSize,LabelFontType,Vi[32][t1],false);
    t2+=(Vs[40][t1]!=””)*14; t1++;}}}

    #34029

    Et pour les lignes fractales :

    #property description “An indicator that alerts and draws a horizontal line to mark whenever a fractal is engulfed by a candle close before another fractal prints in the same direction.”

    #property strict
    #property indicator_chart_window
    #property indicator_buffers 2

    input uchar                 LongArrowCode                    = 217;
    input uchar                 ShortArrowCode                   = 218;
    input int                   ArrowSize                        = 8;
    input int                   LineWidth                        = 1;
    input ENUM_LINE_STYLE       LineStyle                        = STYLE_SOLID;
    input color                 LongColour                       = clrBlue;
    input color                 ShortColour                      = clrPeru;
    input bool                  ShowComments                     = true;
    input bool                  SendEmail                        = false;
    input bool                  SendNotifications                = false;
    input bool                  Alerts                           = false;
    input string                AlertSound                       = “alert.wav”;
    input bool                  ScreenShots                      = false;

    double UpBuff[];
    double DownBuff[];

    double Vd[];
    int Vi[150][150],Lines[10],LabelFontSize,tf;
    color Colour[9];
    datetime NewCandle;
    ENUM_TIMEFRAMES TF[]={PERIOD_CURRENT,PERIOD_M1,PERIOD_M2,PERIOD_M3,PERIOD_M4,PERIOD_M5,PERIOD_M6,PERIOD_M10,PERIOD_M12,PERIOD_M15,PERIOD_M20,PERIOD_M30,PERIOD_H1,PERIOD_H2,PERIOD_H3,PERIOD_H4,PERIOD_H6,PERIOD_H8,PERIOD_H12,PERIOD_D1,PERIOD_W1,PERIOD_MN1};
    string TimeFr[]={“0″,”M1″,”M2″,”M3″,”M4″,”M5″,”M6″,”M10″,”M12″,”M15″,”M20″,”M30″,”H1″,”H2″,”H3″,”H4″,”H6″,”H8″,”H12″,”D1″,”W1″,”MN”};
    string Vs[150][150],TradeComment,LabelFontType,Prefix,Suffix;

    void OnInit()
    {int t1,t2,t3,t4;
    uchar Char[];
    string s7;

    SetIndexBuffer(0,UpBuff);
    SetIndexBuffer(1,DownBuff);
    SetIndexStyle(0,DRAW_NONE);
    SetIndexStyle(1,DRAW_NONE);
    SetIndexEmptyValue(0,0.0);
    SetIndexEmptyValue(1,0.0);

    tf=0; t1=1; while(t1<=21 && tf==0) {tf=(PeriodSeconds(PERIOD_CURRENT)==PeriodSeconds(TF[t1]))*t1; t1++;}

    Colour[1]=LongColour; Colour[2]=ShortColour; Colour[3]=16777215;

    TradeComment=”LineFractal”; LabelFontSize=10; LabelFontType=”Segoe UI”; t2=StringToCharArray(Symbol(),Char,0,-1,CP_UTF8)-2;
    t3=-1; t4=-1; t1=0; while(t1<=t2) {if (t3==-1 && Char[t1]>=65 && Char[t1]<=90) {t3=t1;} if (t3!=-1 && t4==-1 && (Char[t1]<65 || Char[t1]>90)) {t4=t1;} t1++;}
    Prefix=””; if (t3>0) {Prefix=StringSubstr(Symbol(),0,t3);} Suffix=””; if (t4>0) {Suffix=StringSubstr(Symbol(),t4,0);}
    t1=StringLen(Symbol())-StringLen(Prefix)-StringLen(Suffix); Vs[30][1]=StringSubstr(Symbol(),StringLen(Prefix),t1);
    s7=StringConcatenate(” “,Vs[30][1],” “,TimeFr[tf]); Vs[30][4]=StringConcatenate(StringSubstr(TradeComment,0,27-StringLen(s7)),s7);
    t1=0; while(t1<=100) {Vs[41][t1]=StringConcatenate(TradeComment,” “,t1); t1++;}

    Vs[32][1]=”Long”; Vs[32][2]=”Short”; Vs[32][3]=”Up”; Vs[32][4]=”Down”;

    }

    void OnDeinit(const int reason) {if (!IsTesting()) {RemoveObjects(TradeComment);}}

    int OnCalculate(const int rates_total,
    const int prev_calculated,
    const datetime &time[],
    const double &open[],
    const double &high[],
    const double &low[],
    const double &close[],
    const long &tick_volume[],
    const long &volume[],
    const int &spread[])

    {int t1,t2,t3;
    bool b1,b2,b3;
    datetime h1;
    double d1;
    string s1,s2;

    b2=(NewCandle!=time[0]); if (b2) {t1=1; while(t1<=4) {Lines[t1]=0; t1++;}} t1=1; while(t1<=rates_total-1 && b2)
    {UpBuff[t1]=0; d1=iFractals(Symbol(),PERIOD_CURRENT,MODE_UPPER,t1); s1=StringConcatenate(TradeComment,” up arrow “,TimeToString(time[t1]));
    s2=StringConcatenate(TradeComment,” up line “,TimeToString(time[t1]));
    if (d1==0) {if (ObjectFind(0,s1)!=-1) {ObjectDelete(0,s1);} if (ObjectFind(0,s2)!=-1) {ObjectDelete(0,s2);}}
    if (d1>0) {DrawText(s1,CharToString(LongArrowCode),time[t1],d1,ArrowSize,”Wingdings”,Colour[1],ANCHOR_LOWER);
    b1=false; b3=false; t2=t1-1; while(t2>0 && !b3 && !b1) {b1=(close[t2]>=d1); b3=(iFractals(Symbol(),PERIOD_CURRENT,MODE_UPPER,t2)>0); t2–;}
    t3=t2+b1; if (!b1 && t2>0 && ObjectFind(0,s2)!=-1) {ObjectDelete(0,s2);}
    if (b1 || t2==0) {Lines[1]+=1; UpBuff[t1]=d1; if (t2==0 && b1) {OrderAlert(1,t2+1);}
    h1=time[t3]; Lines[3]+=(int)(t2==0); DrawTrendLine(s2,0,h1,d1,time[t1],d1,Colour[1],LineStyle,LineWidth);}}

    DownBuff[t1]=0; d1=iFractals(Symbol(),PERIOD_CURRENT,MODE_LOWER,t1); s1=StringConcatenate(TradeComment,” down arrow “,TimeToString(time[t1]));
    s2=StringConcatenate(TradeComment,” down line “,TimeToString(time[t1]));
    if (d1==0) {if (ObjectFind(0,s1)!=-1) {ObjectDelete(0,s1);} if (ObjectFind(0,s2)!=-1) {ObjectDelete(0,s2);}}
    if (d1>0) {DrawText(s1,CharToString(ShortArrowCode),time[t1],d1,ArrowSize,”Wingdings”,Colour[2],ANCHOR_UPPER);
    b1=false; b3=false; t2=t1-1; while(t2>0 && !b3 && !b1) {b1=(close[t2]<=d1); b3=(iFractals(Symbol(),PERIOD_CURRENT,MODE_LOWER,t2)>0); t2–;}
    t3=t2+b1; if (!b1 && t2>0 && ObjectFind(0,s2)!=-1) {ObjectDelete(0,s2);}
    if (b1 || t2==0) {Lines[2]+=1; DownBuff[t1]=d1; if (t2==0 && b1) {OrderAlert(2,t2+1);}
    h1=time[t3]; Lines[4]+=(int)(t2==0); DrawTrendLine(s2,0,h1,d1,time[t1],d1,Colour[2],LineStyle,LineWidth);}}

    t1++;} NewCandle=time[0]; ScreenInfo();

    return(rates_total);}

    void DrawText(string r6,string r7,datetime x6,double f7,int x5,string r8,color x3,int x7)
    {if (r7==”” && ObjectFind(0,r6)!=-1) {ObjectDelete(0,r6);}
    if (r7!=””) {if (ObjectFind(0,r6)==-1) {ObjectCreate(0,r6,OBJ_TEXT,0,0,0);} ObjectSetString(0,r6,OBJPROP_TEXT,r7); ObjectSetInteger(0,r6,OBJPROP_TIME,x6);
    ObjectSetDouble(0,r6,OBJPROP_PRICE,f7); ObjectSetInteger(0,r6,OBJPROP_FONTSIZE,x5); ObjectSetString(0,r6,OBJPROP_FONT,r8); ObjectSetInteger(0,r6,OBJPROP_COLOR,x3);
    ObjectSetInteger(0,r6,OBJPROP_ANCHOR,x7);}}

    void DrawTrendLine(string r6,int x1,datetime x6,double f6,datetime x7,double f7,color x3,int x4,int x5)
    {if (f6==0 && f7==0 && ObjectFind(0,r6)!=-1) {ObjectDelete(0,r6);}
    if (f6>0 || f7>0) {if (ObjectFind(0,r6)==-1) {ObjectCreate(0,r6,OBJ_TREND,x1,0,0,0,0); ObjectSetInteger(0,r6,OBJPROP_RAY,false);}
    ObjectSetInteger(0,r6,OBJPROP_TIME,x6); ObjectSetInteger(0,r6,OBJPROP_TIME,1,x7); ObjectSetDouble(0,r6,OBJPROP_PRICE,f6); ObjectSetDouble(0,r6,OBJPROP_PRICE,1,f7);
    ObjectSetInteger(0,r6,OBJPROP_COLOR,x3); ObjectSetInteger(0,r6,OBJPROP_STYLE,x4); ObjectSetInteger(0,r6,OBJPROP_WIDTH,x5);}}

    void RemoveObjects(string r6)
    {int t1;

    t1=ObjectsTotal(); while(t1>=0) {if (StringFind(ObjectName(t1),r6,0)!=-1) {ObjectDelete(0,ObjectName(t1));} t1–;}}

    void DrawLabel(string r6,string r7,ENUM_BASE_CORNER x4,int x1,int x2,int x5,string r8,color x3,bool b6)
    {if (r7==”” && ObjectFind(0,r6)!=-1) {ObjectDelete(0,r6);}
    if (r7!=””) {if (ObjectFind(0,r6)==-1) {ObjectCreate(0,r6,OBJ_LABEL,0,0,0);} ObjectSetInteger(0,r6,OBJPROP_CORNER,x4); ObjectSetString(0,r6,OBJPROP_TEXT,r7);
    ObjectSetInteger(0,r6,OBJPROP_FONTSIZE,x5); ObjectSetString(0,r6,OBJPROP_FONT,r8); ObjectSetInteger(0,r6,OBJPROP_COLOR,x3); ObjectSetInteger(0,r6,OBJPROP_BACK,b6);
    ObjectSetInteger(0,r6,OBJPROP_XDISTANCE,x1); ObjectSetInteger(0,r6,OBJPROP_YDISTANCE,x2);}}

    void OrderAlert(int x7,int x8)
    {string s1;

    s1=StringConcatenate(Vs[32][x7+2],” farctal has been engulfed at “,TimeToString(Time[x8]));
    if (SendEmail) {SendMail(Vs[30][4],s1);}
    if (SendNotifications) {SendNotification(StringConcatenate(s1,”, “,Vs[30][4]));}
    if (ScreenShots) {ChartScreenShot(0,StringConcatenate(TimeFr[tf],Vs[30][1],TimeToString(Time[x8])),1920,1080,ALIGN_RIGHT);}
    if (Alerts) {Alert(StringConcatenate(s1,”, “,Vs[30][4])); if (AlertSound!=””) {PlaySound(AlertSound);}}}

    void ScreenInfo()
    {int t1,t2,t7;
    double d1;

    if (ShowComments) {t1=0; while(t1<=100) {Vs[40][t1]=””; Vi[32][t1]=Colour[3]; t1++;}
    d1=(double)(Lines[3]+Lines[4])/(Lines[1]+Lines[2]); t7+=1; Vs[40][t7]=StringConcatenate(“Total lines “,Lines[1]+Lines[2]);
    t1=1; while(t1<=2) {d1=Lines[t1+2]/Lines[t1]; t7+=1; Vs[40][t7]=StringConcatenate(Vs[32][t1+2],” lines “,Lines[t1]); t1++;}

    t2=14; t1=0; while(t1<=100) {DrawLabel(Vs[41][t1],Vs[40][t1],CORNER_LEFT_UPPER,2,t2,LabelFontSize,LabelFontType,Vi[32][t1],false);
    t2+=(int)(Vs[40][t1]!=””)*14; t1++;}}}

     

    #34052

    Nicolas, j’attache un document qui explique les aspects théoriques du théorème…Encore merci pour ton temps et tes conseils !

    #34072

    Je vais voir ce que je peux faire mais rien n’est gagné ou même possible, j’y jetterai un oeil la semaine prochaine. Merci d’attacher les fichiers .mq4 plutôt que de copier/coller directement le code, je préfère les ouvrir dans l’IDE de MT4, c’est imbuvable de cette manière !

    #34083

    Les voici Nicolas !

    Est ce que je peux te demander stp de supprimer les posts où le code source apparaît, je pense que Google va les référencer et comme la plateforme de départ est, attentive….je suis pas sûr qu’il soit fan  ! (Merci beaucoup)

    (et Merci pour le temps que tu vas dédié à ce projet, j’espère qu’après coup il suscitera plus d’intérêt, une fois que l’on a aura des choses à montrer…tu m’as demandé d’être moteur sur ce fil, je le fais avec grand plaisir, je sens que ce sujet mérite de l’intérêt ! Je vais travailler pour compiler la plupart des approches/méthodes qui sont employées de manière à ce que je chacun puisse se faire son propre avis…j’ai déjà compiler pas mal d’infos, mais le sujet est vaste !!! Et comme tu dis si bien tous les chemins mènent à Rome, et je rajouterais que c’est aussi comme cela que le principe de sérendipité trouve tout son sens et que le travail collaboratif avec des cerveaux en ébullition peut parfois ouvrir des voies nouvelles, même à partir de choses que l’on ne pensait pas sur le moment pertinente, la perspective et la représentation de chacun compte!)+++++

    +++

    #35387

    Bonjour Nicolas,

    j’ai creusé les grands principes évoqués au début de ce fil pour mesurer si les concepts évoqués étaient fantaisistes ou au contraire basés sur une lecture pertinente. Aussi je me suis mis en quête de lire des publications sur le sujet et j’ai trouvé plusieurs études autour de la modélisation de séries financières à partir de processus d’autosimilarité stochastique et de processus invariants d’échelle ((Ecole Polytechnique :kozhemyak similarity stoch process.pdf  et CNRS: Anne siegel Neuchatel ). Ces études évoquent l’autosimilarité stochastique, en matière d’étude des variations de séries chronologiques financières, comme étant très utile pour parfaire la connaissance des processus à partir de corrélations d’échelles (étude sur une échelle pour en déduire le comportement à toute échelle, jusque là rien de nouveau:) Les études sur les statistiques des zones transitoires et récurrentes permettent d’étudier ces principes d’auto-similarité stochastique et ses propriétés préservées à différentes échelles. L’approche par les statistiques/probabilités sur la transgression/franchissement des zones récurrentes permettent selon ma compréhension de s’exonérer de la définition des règles combinatoires et des modèles de dynamique en matière d’auto-similarité (notamment construction des chaînes de markov à partir de variables aléatoires). Dans ces lectures, je me suis perdu quand ils évoquent l’étude des exposants de queues de distribution, et des modèles MRW log normaux :))) Cependant j’ai pu constater que ces sujets intéressent beaucoup et que les statistiques sur les comportements des valeurs extrêmes multi-fractales et autres prédictions de volatilité sont des sujets très regardés par différentes communautés et je me suis dit pour quoi pas la nôtre (avec toute la modestie qui s’impose:)))

    A la suite de quoi j’ai repris la lecture de la majeure partie des posts du forum en question et j’ai réalisé un simple travail de compilations de leurs travaux pour essayer de les réunir et de les assembler dans une approche globale en 4 étapes, que je présente succinctement ci dessous..

    #35388

    Première étape : Etablir la feuille de route à partir de l’indicateur “théorème des sous séquences” et le tracé des fractales

    Cette indicateur permet d’établir des probabilités d’orientation à la hausse et à la baisse des cours, que ce soit sur du très court terme ou du moyen long terme à partir des tracés des lignes fractales (selon les auteurs la probabilité que les lignes soient touchées à l’avenir est élevée, chacun se fera son propre avis…Voici ci dessous les images de deux variantes de cet indicateur..

    #35393

    Deuxième étape : Etude des statistiques de récurrence et probabilités sur les zones transitoires et récurrentes

    A partir de la feuille de route transmise par l’indicateur du théorème des sous séquences, il s’agit maintenant de compléter l’approche en étudiant à partir de l’indicateur de récurrence statistique, la bonne variable pour H (cf page 1 du fil) sur un timeframe donné (optimal en fonction des résultats transmis par l’indic) de manière à identifier les “véritables” zones transitoires qui en théorie dévraient constituées des évènements rares (se produisant à hauteur de 3% en moyenne sur un grand échantillon ex: 5000 bars). Les prix sur ces zones devraient alors êtres rejetés et les probabilités que les futures zones “potentielles” tranitoires soient transgressées/ franchies devraient alors être élevées, c’est là une des logiques à laquelle répond l’indicateur (le taux de succès élevés du franchissement des PTZ, zones potentielles transitoires). Autre intérêt de l’indicateur, la détermination d’une valeur K (zone fine au dessus ou en dessous de la zone potentielle transitoire) qui permet de jouer les retracements après ou avant franchissement de la PTZ avec des taux (toujours selon les auteurs) élevés de succès.

    Je pense que cet indicateur est pour l’instant peu applicable sous PRT mais que les backtests (à partir d’indicateurs à réfléchir) pourraient aider à déterminer les meilleurs valeurs pour la valeur H sur différents timeframe, ce qui serait déjà intéressant. Voici des images de l’indicateur ci dessous…

    #35418

    Merci Share78 pour ton enthousiasme. Le problème de taille est la non possibilité d’écrire des informations en mémoire, à la volée et en processus continu et dynamique car nous n’avons pas de tableau de donnée possible pour la création de nos propres variables sous ProBuilder.

    L’indicateur du théorème des sous-séquences “SS-XUX99” en possède un certain nombre, dont des variables à tableau multi dimensionnel (plusieurs colonnes). Je crains que l’on ne puisse pas avancer beaucoup sur ce projet 🙁

    #35419

    La 3ème étape : La 3ème étape est la suite logique de la seconde où l’idée principale est de surveiller l’apparition d’une PTZ (pour une variable définie de H et sur un timeframe donnée et avec une valeur K qui marque la hauteur du PTZ) puis de surveiller le retracement pour une entrée dans la direction de la vague (celle d’ avant retracement). C’est à ce stade que le principe d’auto-similarité entre en jeu, puisqu’il s’agit de prendre  en compte deux timeframes (un TF supérieur qui donne l’orientation de la vague et un timeframe inférieur qui permet après la constatation d’une dissemblance, d’attendre la reprise potentielle dans le sens de la vague de l’UT supérieure, cf 2ème image ci dessous). Cette exploitation de l’invariance d’échelle avec deux unités de temps (supérieure/inférieure),  peut s’effectuer à partir de différents indicateurs avec des réglages appropriés pour câler la similarité et attendre le phénomène de dissimilarité (je pourrais développer ce principe d’un autre fil). Le profit target et la gestion des stop loss étant propres à chaque trader en fonction de la gestion des risques.

    A noter que les zones transitoires peuvent aussi être exploitées avec les bandes de bollinger (à partir des extrêmes de bandes cf image 3) ou à partir de franchissements de niveaux de retracements de Fibonacci ( le réglage de la variable H étant donc complétement différent par rapport à ce qui a été évoqué plus haut/recherche des 3%)

     

     

Viewing 15 posts - 16 through 30 (of 58 total)

Create your free account now and post your request to benefit from the help of the community
Register or Login