Le rasoir d’ockham

J’ai pris conscience hier que mon indicateur OHCL de la veille et dans une moindre mesure celui sur les points pivots présentaient une malfaçon assez gênante sur le principe mais heureusement sans incidence sur ma pratique.

L’erreur reposait sur une mauvaise utilisation de la valeur temps, où en définitive, à trop compliquer le code en fonctions inutiles, certaines données n’étaient pas prises en compte. En l’occurrence, il était possible de modifier les plus hauts et bas de la veille mais pas les ouvertures et clôture de la veille…
Je me suis donc amusé à tout reprendre depuis le début afin de chercher où pouvait se situer le problème.

Finalement, après bien des détours, et comme d’habitude, le déclic est intervenu en considérant que l’hypothèse la plus simple était la plus vraisemblable.
J’ai supprimé 4 fonctions inutiles et presque raccourcit le code.
Ce dernier étant identique d’un indicateur à l’autre, autant en profiter pour faire une compilation des deux.

Les plus avertis d’entre vous jugeront très certainement qu’il y a une façon bien plus élégante de coder tout cela mais je ne suis qu’un amateur. Aussi tout avis éclairé sur le sujet sera le bienvenu.

L’indicateur est téléchargeable (format rar) sur la page « indicateurs easylanguage » et répond au doux nom d’Ykarius Surprise… Euh! Concernant sa dénomination, je manquais un peu d’inspiration. Totalement libre de droit. Je ne puis en revendiquer la pleine paternité car ses origines sont multiples. En fait, c’est la compilation de la compilation d’une compilation de tout un tas d’autres compilations.

Voici ce que cela donne:

OHCL & Pivots Points by Ykarius

Si vous craignez de télécharger un fichier depuis mon blog, voici le code en question:

//Ykarius OHCL & PIVOTS POINTS CLASSIQUES

Inputs:
POINTS_PIVOTS(0),
StartTime (0900),
EndTime (2200),
PlaceTextRight (true),
PlotDailyMidPts (true),
PivColor (yellow),
R1Color (darkgray),
R2Color (darkgray),
R3Color (darkgray),
S1Color (darkgray),
S2Color (darkgray),
S3Color (darkgray),
Mcolor (darkgray),

OHCL_Yesterday_ET_WEEKLY(0),
StartTime2 (0800),
EndTime2 (2200),
YOpenColor (green),
YCloseColor (red),
YHighColor (cyan),
YLowColor (magenta),
WOpenColor (RGB(60,179,113)),
WCloseColor (RGB(187,0,0)),
WHighColor (RGB(0,183,183)),
WLowColor (RGB(117,0,117)),

STYLE_LIGNES(0),
decimales (1),
TLSize (1),
TLStyle (2),
WTLSize (1),
WTLStyle (1);

Variables:
//OHCL
var0 (0),
var1 (0),
var2 (0),
var3 (0),
var4 (0),
var5 (0),
var6 (0),
var7 (0),
var8 (0),
var9 (0),
var10 (0),
var11 (0),
var12 (0),
var13 (0),
var14 (0),
var15 (0),
var16 (0),
var17 (0),
var20 (0),
var21 (0),
var22 (0),
var23 (0),
var24 (0),
var25 (0),
var26 (0),
var27 (0),
YOpenTL (0),
YCloseTL (0),
YHighTL (0),
YLowTL (0),
WOpenTL (0),
WCloseTL (0),
WHighTL (0),
WLowTL (0),
YOpenTxt (0),
YCloseTxt (0),
YHighTxt (0),
YLowTxt (0),
WOpenTxt (0),
WCloseTxt (0),
WHighTxt (0),
WLowTxt (0),
WOpenTxt2 (0),
WCloseTxt2 (0),
WHighTxt2 (0),
WLowTxt2 (0),

//POINTS PIVOTS
RR1 (0),
RR2 (0),
RR3 (0),
SS1 (0),
SS2 (0),
SS3 (0),
PP (0),
M1 (0),
M2 (0),
M3 (0),
M4 (0),
M5 (0),
M6 (0),
RR1TL (0),
RR2TL (0),
RR3TL (0),
SS1TL (0),
SS2TL (0),
SS3TL (0),
PPTL (0),
M1TL (0),
M2TL (0),
M3TL (0),
M4TL (0),
M5TL (0),
M6TL (0),
HaveTLs (false),
R1Txt (0),
R2Txt (0),
R3Txt (0),
S1Txt (0),
S2Txt (0),
S3Txt (0),
PPTxt (0),
M1Txt (0),
M2Txt (0),
M3Txt (0),
M4Txt (0),
M5Txt (0),
M6Txt (0),

TextStyleHoriz (1), //0: texte droite de la barre; 1: texte gauche de la barre; 2: texte centre de la barre
TextStyleVert (2); //0: texte en dessous de la barre; 1: texte au-dessus de la barre; 2: texte sur la barre

//##########OHCL DAILY#################
If Date <> Date[1] then begin
If PlaceTextRight then TextStyleVert = 1;
HaveTLs = false;
var0 = var0 + 1 ;
var1 = var2 ;
var3 = var4 ;
var5 = var6 ;
var7 = Close[1] ;
var2 = Open ;
var4 = High ;
var6 = Low ;
end
else begin
If Time > StartTime2 and Time <= EndTime2 then begin
if High > var4 then var4 = High ;
if Low < var6 then var6 = Low ;
end;
end;

//##########OHCL WEEKLY###############################
If DayOfWeek( Date ) < DayOfWeek( Date[1] ) then begin
If PlaceTextRight then TextStyleVert = 1;
HaveTLs = false;
var9 = var9 + 1 ;
var10 = var11 ;
var12 = var13 ;
var14 = var15 ;
var16 = Close[1] ;
var11 = Open ;
var13 = High ;
var15 = Low ;
end
else begin

if High > var13 then var13 = High ;
if Low < var15 then var15 = Low ;
end;

//##########POINTS PIVOTS DAILY#################
If Date <> Date[1] then begin
If PlaceTextRight then TextStyleVert = 1;
HaveTLs = false;
var20 = var20 + 1 ;
var21 = var22 ;
var23 = var24 ;
var25 = var26 ;
var27 = Close[1] ;
var22 = Open ;
var24 = High ;
var26 = Low ;

PP = (var23 + var25 + var27)/3 ;
RR1 = Roundinst(PP * 2 - var25);
RR2 = Roundinst(PP + var23 - var25);
RR3 = Roundinst(RR2 + var23 - var25);
SS1 = Roundinst(PP * 2 - var23);
SS2 = Roundinst(PP - var23 + var25);
SS3 = Roundinst(SS2 - var23 + var25);
M1 = (RR2 + RR3)*0.5;
M2 = ((RR1 + RR2)*0.5);
M3 = ((PP + RR1)*0.5);
M4 = ((SS1 + PP)*0.5);
M5 = ((SS1 + SS2)*0.5);
M6 = ((SS2 + SS3)*0.5);
end
else begin
If Time > StartTime and Time <= EndTime then begin
if High > var24 then var24 = High ;
if Low < var26 then var26 = Low ;
end;
end;

//##########################################################################################################################

If HaveTLs = false then begin
HaveTLs = true;

//#######################POINTS PIVOTS DAILY####################
RR1TL = TL_New(Date, StartTime, RR1, Date, EndTime, RR1);
TL_SetColor(RR1TL, R1Color);
TL_SetSize(RR1TL, TLSize);
TL_SetStyle(RR1TL, TLStyle);

RR2TL = TL_New(Date, StartTime, RR2, Date, EndTime, RR2);
TL_SetColor(RR2TL, R2Color);
TL_SetSize(RR2TL, TLSize);
TL_SetStyle(RR2TL, TLStyle);

RR3TL = TL_New(Date, StartTime, RR3, Date, EndTime, RR3);
TL_SetColor(RR3TL, R3Color);
TL_SetSize(RR3TL, TLSize);
TL_SetStyle(RR3TL, TLStyle);

SS1TL = TL_New(Date, StartTime, SS1, Date, EndTime, SS1);
TL_SetColor(SS1TL, S1Color);
TL_SetSize(SS1TL, TLSize);
TL_SetStyle(SS1TL, TLStyle);

SS2TL = TL_New(Date, StartTime, SS2, Date, EndTime, SS2);
TL_SetColor(SS2TL, S2Color);
TL_SetSize(SS2TL, TLSize);
TL_SetStyle(SS2TL, TLStyle);

SS3TL = TL_New(Date, StartTime, SS3, Date, EndTime, SS3);
TL_SetColor(SS3TL, S3Color);
TL_SetSize(SS3TL, TLSize);
TL_SetStyle(SS3TL, TLStyle);

PPTL = TL_New(Date, StartTime, PP, Date, EndTime, PP);
TL_SetColor(PPTL, PivColor);
TL_SetSize(PPTL, TLSize);
TL_SetStyle(PPTL, TLStyle);

R1Txt = Text_New(Date, StartTime, RR1, "R1=" + NumToStr(RR1,decimales));
Text_SetStyle(R1Txt, TextStyleHoriz, TextStyleVert);
Text_SetColor(R1Txt, R1Color);

R2Txt = Text_New(Date, StartTime, RR2, "R2=" + NumToStr(RR2,decimales));
Text_SetStyle(R2Txt, TextStyleHoriz, TextStyleVert);
Text_SetColor(R2Txt, R2Color);

R3Txt = Text_New(Date, StartTime, RR3, "R3=" + NumToStr(RR3,decimales));
Text_SetStyle(R3Txt, TextStyleHoriz, TextStyleVert);
Text_SetColor(R3Txt, R3Color);

S1Txt = Text_New(Date, StartTime, SS1, "S1=" + NumToStr(SS1,decimales));
Text_SetStyle(S1Txt, TextStyleHoriz, TextStyleVert);
Text_SetColor(S1Txt, S1Color);

S2Txt = Text_New(Date, StartTime, SS2, "S2=" + NumToStr(SS2,decimales));

Text_SetStyle(S2Txt, TextStyleHoriz, TextStyleVert);
Text_SetColor(S2Txt, S2Color);

S3Txt = Text_New(Date, StartTime, SS3, "S3=" + NumToStr(SS3,decimales));

Text_SetStyle(S3Txt, TextStyleHoriz, TextStyleVert);
Text_SetColor(S3Txt, S3Color);

PPTxt = Text_New(Date, StartTime, PP, "PP=" + NumToStr(PP,decimales));
Text_SetStyle(PPTxt, TextStyleHoriz, TextStyleVert);
Text_SetColor(PPTxt, PivColor);

//#################OHCL DAILY####################
YOpenTL = TL_New(Date, StartTime2, var1, Date, EndTime2, var1);
TL_SetColor(YOpenTL, YOpenColor);
TL_SetSize(YOpenTL, TLSize);
TL_SetStyle(YOpenTL, TLStyle);

YCloseTL = TL_New(Date, StartTime2, var7, Date, EndTime2, var7);
TL_SetColor(YCloseTL, YCloseColor);
TL_SetSize(YCloseTL, TLSize);
TL_SetStyle(YCloseTL, TLStyle);

YHighTL = TL_New(Date, StartTime2, var3, Date, EndTime2, var3);
TL_SetColor(YHighTL, YHighColor);
TL_SetSize(YHighTL, TLSize);
TL_SetStyle(YHighTL, TLStyle);

YLowTL = TL_New(Date, StartTime2, var5, Date, EndTime2, var5);
TL_SetColor(YLowTL, YLowColor);
TL_SetSize(YLowTL, TLSize);
TL_SetStyle(YLowTL, TLStyle);

YOpenTxt = Text_New(Date, StartTime2, var1, "YestOpen=" + NumToStr(var1,decimales));
Text_SetStyle(YOpenTxt, TextStyleHoriz, TextStyleVert);
Text_SetColor(YOpenTxt, YOpenColor);

YCloseTxt = Text_New(Date, StartTime2, var7, "YestClose=" + NumToStr(var7,decimales));
Text_SetStyle(YCloseTxt, TextStyleHoriz, TextStyleVert);
Text_SetColor(YCloseTxt, YCloseColor);

YHighTxt = Text_New(Date, StartTime2, var3, "YestHigh=" + NumToStr(var3,decimales));
Text_SetStyle(YHighTxt, TextStyleHoriz, TextStyleVert);
Text_SetColor(YHighTxt, YhighColor);

YLowTxt = Text_New(Date, StartTime2, var5, "YestLow=" + NumToStr(var5,decimales));
Text_SetStyle(YLowTxt, TextStyleHoriz, TextStyleVert);
Text_SetColor(YLowTxt, YLowColor);

//#############OHCL WEEKLY########################################
WOpenTL = TL_New(Date, StartTime2, var10, Date, EndTime2, var10);
TL_SetColor(WOpenTL, WOpenColor);
TL_SetSize(WOpenTL, WTLSize);
TL_SetStyle(WOpenTL, WTLStyle);

WCloseTL = TL_New(Date, StartTime2, var16, Date, EndTime2, var16);
TL_SetColor(WCloseTL, WCloseColor);
TL_SetSize(WCloseTL, WTLSize);
TL_SetStyle(WCloseTL, WTLStyle);

WHighTL = TL_New(Date, StartTime2, var12, Date, EndTime2, var12);
TL_SetColor(WHighTL, WHighColor);
TL_SetSize(WHighTL, WTLSize);
TL_SetStyle(WHighTL, WTLStyle);

WLowTL = TL_New(Date, StartTime2, var14, Date, EndTime2, var14);
TL_SetColor(WLowTL, WLowColor);
TL_SetSize(WLowTL, WTLSize);
TL_SetStyle(WLowTL, WTLStyle);

WOpenTxt = Text_New(Date, StartTime2, var10, "LastWeekOpen=" + NumToStr(var10,decimales));
Text_SetStyle(WOpenTxt, TextStyleHoriz, TextStyleVert);
Text_SetColor(WOpenTxt, WOpenColor);

WCloseTxt = Text_New(Date, StartTime2, var16, "LastWeekClose=" + NumToStr(var16,decimales));
Text_SetStyle(WCloseTxt, TextStyleHoriz, TextStyleVert);
Text_SetColor(WCloseTxt, WCloseColor);

WHighTxt = Text_New(Date, StartTime2, var12, "LastWeekHigh=" + NumToStr(var12,decimales));
Text_SetStyle(WHighTxt, TextStyleHoriz, TextStyleVert);
Text_SetColor(WHighTxt, WHighColor);

WLowTxt = Text_New(Date, StartTime2, var14, "LastWeekLow=" + NumToStr(var14,decimales));
Text_SetStyle(WLowTxt, TextStyleHoriz, TextStyleVert);
Text_SetColor(WLowTxt, WLowColor);

if PlotDailyMidPts then begin

M1TL = TL_New(Date, StartTime, M1, Date, EndTime, M1);
TL_SetColor(M1TL, MColor);
TL_SetSize(M1TL, TLSize);
TL_SetStyle(M1TL, TLStyle);

M2TL = TL_New(Date, StartTime, M2, Date, EndTime, M2);
TL_SetColor(M2TL, MColor);
TL_SetSize(M2TL, TLSize);
TL_SetStyle(M2TL, TLStyle);

M3TL = TL_New(Date, StartTime, M3, Date, EndTime, M3);
TL_SetColor(M3TL, MColor);
TL_SetSize(M3TL, TLSize);
TL_SetStyle(M3TL, TLStyle);

M4TL = TL_New(Date, StartTime, M4, Date, EndTime, M4);
TL_SetColor(M4TL, MColor);
TL_SetSize(M4TL, TLSize);
TL_SetStyle(M4TL, TLStyle);

M5TL = TL_New(Date, StartTime, M5, Date, EndTime, M5);
TL_SetColor(M5TL, MColor);
TL_SetSize(M5TL, TLSize);
TL_SetStyle(M5TL, TLStyle);

M6TL = TL_New(Date, StartTime, M6, Date, EndTime, M6);
TL_SetColor(M6TL, MColor);
TL_SetSize(M6TL, TLSize);
TL_SetStyle(M6TL, TLStyle);

M1Txt = Text_New(Date, StartTime, M1, "M1=" + NumToStr(M1,decimales));
Text_SetStyle(M1Txt, TextStyleHoriz, TextStyleVert);
Text_SetColor(M1Txt, MColor);

M2Txt = Text_New(Date, StartTime, M2, "M2=" + NumToStr(M2,decimales));
Text_SetStyle(M2Txt, TextStyleHoriz, TextStyleVert);
Text_SetColor(M2Txt, MColor);

M3Txt = Text_New(Date, StartTime, M3, "M3=" + NumToStr(M3,decimales));
Text_SetStyle(M3Txt, TextStyleHoriz, TextStyleVert);
Text_SetColor(M3Txt, MColor);

M4Txt = Text_New(Date, StartTime, M4, "M4=" + NumToStr(M4,decimales));
Text_SetStyle(M4Txt, TextStyleHoriz, TextStyleVert);
Text_SetColor(M4Txt, MColor);

M5Txt = Text_New(Date, StartTime, M5, "M5=" + NumToStr(M5,decimales));
Text_SetStyle(M5Txt, TextStyleHoriz, TextStyleVert);
Text_SetColor(M5Txt, MColor);

M6Txt = Text_New(Date, StartTime, M6, "M6=" + NumToStr(M6,decimales));
Text_SetStyle(M6Txt, TextStyleHoriz, TextStyleVert);
Text_SetColor(M6Txt, MColor);

end;

end //If HaveTLs = false then begin...
else begin
//########POINTS PIVOTS#############
TL_SetEnd(RR1TL, Date, EndTime, RR1);
TL_SetEnd(RR2TL, Date, EndTime, RR2);
TL_SetEnd(RR3TL, Date, EndTime, RR3);
TL_SetEnd(SS1TL, Date, EndTime, SS1);
TL_SetEnd(SS2TL, Date, EndTime, SS2);
TL_SetEnd(SS3TL, Date, EndTime, SS3);
TL_SetEnd(PPTL, Date, EndTime, PP);
TL_SetEnd(M1TL, Date, EndTime, M1);
TL_SetEnd(M2TL, Date, EndTime, M2);
TL_SetEnd(M3TL, Date, EndTime, M3);
TL_SetEnd(M4TL, Date, EndTime, M4);
TL_SetEnd(M5TL, Date, EndTime, M5);
TL_SetEnd(M6TL, Date, EndTime, M6);
//##########OHCL####################
TL_SetEnd(YOpenTL, Date, EndTime2, var1);
TL_SetEnd(YCloseTL , Date, EndTime2, var7);
TL_SetEnd(YHighTL, Date, EndTime2, var3);
TL_SetEnd(YLowTL, Date, EndTime2, var5);
TL_SetEnd(WOpenTL, Date, EndTime2, var10);
TL_SetEnd(WCloseTL , Date, EndTime2, var16);
TL_SetEnd(WHighTL, Date, EndTime2, var12);
TL_SetEnd(WLowTL, Date, EndTime2, var14);

If PlaceTextRight then begin
//########POINTS PIVOTS#############
Text_SetLocation(R1Txt, Date, EndTime, RR1);
Text_SetLocation(R2Txt, Date, EndTime, RR2);
Text_SetLocation(R3Txt, Date, EndTime, RR3);
Text_SetLocation(S1Txt, Date, EndTime, SS1);
Text_SetLocation(S2Txt, Date, EndTime, SS2);
Text_SetLocation(S3Txt, Date, EndTime, SS3);
Text_SetLocation(PPTxt, Date, EndTime, PP);
Text_SetLocation(M1TXt, Date, EndTime, M1);
Text_SetLocation(M2TXt, Date, EndTime, M2);
Text_SetLocation(M3TXt, Date, EndTime, M3);
Text_SetLocation(M4TXt, Date, EndTime, M4);
Text_SetLocation(M5TXt, Date, EndTime, M5);
Text_SetLocation(M6TXt, Date, EndTime, M6);
//##########OHCL####################
Text_SetLocation(YOpenTxt, Date, EndTime2, var1);
Text_SetLocation(YCloseTxt, Date, EndTime2, var7);
Text_SetLocation(YHighTxt, Date, EndTime2, var3);
Text_SetLocation(YLowTxt, Date, EndTime2, var5);
Text_SetLocation(WOpenTxt, Date, EndTime2, var10);
Text_SetLocation(WCloseTxt, Date, EndTime2, var16);
Text_SetLocation(WHighTxt, Date, EndTime2, var12);
Text_SetLocation(WLowTxt, Date, EndTime2, var14);

end; //If PlaceTextRight then begin...
end; //If HaveTLs then begin...

Houla! Vous êtes arrivés jusque là! Vous avez lu tout le code???? C'est très impressionnant. Félicitations! C'était quand même plus simple de le télécharger, non?

Plus sérieusement, je pense vraiment qu'il y a plus simple que cette façon de procéder.
Si vous avez un avis, je suis preneur!

Oups! Petit oubli, la fonction RoundInst:

[LegacyColorValue = true];

{22515}
{ Round a number to a tradable value of a particular instrument }
{ 2/10/2004, eKam }
{ 2/11/2004, corrected thanks to chiasm }

input: x(NumericSimple);
value1 = pricescale/minmove;
{RoundInst = intPortion(x)+intPortion(fracPortion(x)*value1)/value1;} {old incorrect version}
RoundInst = Round(x*value1,0)/value1;

Indicateur ,

Comments are closed.