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
- This topic has 57 replies, 4 voices, and was last updated 6 years ago by etienne-charles75.
-
-
04/29/2017 at 2:32 PM #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 !!
+++++++
04/30/2017 at 10:13 AM #34007Rapidement, 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.
04/30/2017 at 10:25 AM #3400804/30/2017 at 10:48 AM #34009Je 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 !
04/30/2017 at 12:13 PM #3402304/30/2017 at 12:48 PM #34025Merci 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 2input 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++;}}}
04/30/2017 at 12:50 PM #34029Et 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 2input 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++;}}}
04/30/2017 at 6:28 PM #3405204/30/2017 at 7:30 PM #34072Je 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 !
04/30/2017 at 9:17 PM #34083Les 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!)+++++
+++
05/13/2017 at 9:20 AM #35387Bonjour 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..
05/13/2017 at 9:38 AM #35388Premiè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..
05/13/2017 at 9:54 AM #35393Deuxiè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…
05/13/2017 at 2:34 PM #35418Merci 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 🙁
05/13/2017 at 2:41 PM #35419La 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%)
-
AuthorPosts
Find exclusive trading pro-tools on