top of page
"There's no certitude, only opportunities."   

Aide à la programmation

Public·1 membre

Anomalie non expliquée

Malheureusement, je n'arrive toujours pas à t"envoyer la capture d'écran,

en attendant voici le reste,

Ci-joint une capture d’écran où il y a un trade (paper) sur FDax visible le vendredi 7/07/2022 de 11h37 à 11h39,

mais d’après le graphique qui est montant on devrait avoir un achat,

ce qui d’ailleurs est confirmé par le relevé visible de ShowTip, DifGex71= 4,49

DifGex7 =4.04

position = 1

OK = 1 RSI = 96,67

Or il y a eu une vente et je n’ai toujours pas trouvé pourquoi,


Je t’envoie donc le programme tel qu’il est resté in extenso depuis ce trade, afin d’avoir ton diagnostic,


J’y joins bien qu’apparemment ils n’y soient pour rien les Stop et Target,

BreakEven 30,16 Fixed Stop 20,20 Click Target 16

A noter que ce qui a fonctionné c’est le Fixed Stop, ce qui est aussi anormal,


Quant aux paramètres trading système tous sont encliquetés sauf « afficher les contrôles backtest,


Accessoirement j’ai lu dans les manuels que tant le BreakEven que le Click Stop ou Click Target ne sont valables qu’en cas de Trade ou Live Évaluation, et j’avoue ne pas comprendre de quoi il s’agit,


Express Dax_Crosses_G5_Gex5_HA_OrdreAuto_29062022

VARS

series i,G,cbi,OK,senti;

series Gex7,Gex7up,Gex7dw,DifGex7,DifGex71,DGex7,Gex7h;

series X,Xup,Xdw,RSI10,G8,G8h,D,D20;

series haOpn,haClo,haHgh,haLow;

series Gha,Ghaex7,Ghaex7h;

series Gex5,Gex5up,Gex5dw,Gex5h,DifGex5,DifGex51;

series G5,G5h,Kup,Kdw;

series Gha5,Gha5h,Ghaex5,Ghaex5h;

numeric position,equity;

input $DGex7(1.0,3.0,1.2,0.1,1);

//--------------------------------------------

CALCULATION

if IsFirstBar() then

begin

CalculateAtEveryTick(false);

SetYscaleformat(GetPriceFormat());

//HA 1/2

haOpn=(Open);

haClo=(Open+High+Low+Close)/4 ;

haHgh=Max(high,Max(haOpn,haClo)) ;

haLow=Min(Low,Min(haOpn,haClo)) ;

end

//--------------------------------------------

//HA 2/2

else

begin

haOpn=(Open[1]+Close[1])/2;

haClo=(Open+High+Low+Close)/4 ;

haHgh=Max(high,Max(haOpn,haClo)) ;

haLow=Min(Low,Min(haOpn,haClo)) ;

end

//--------------------------------------------

RSI(close,RSI10,7);

for i=CurrentBarIndex() downto 0

begin

Gha=(haHgh+haLow+haClo)/3; // cours de base

ExpMovingAverage(Gha,Ghaex5,5);Ghaex5h=Ghaex5+30; // moyenne mobile

MovingAverage(Gha,Gha5,5);Gha5h=Gha5+30;


G=(h+L+C)/3; // cours de base

ExpMovingAverage(G,Gex5,5);Gex5h=Gex5+30; // moyenne mobile

MovingAverage(Gha,Gha5,5);Gha5h=Gha5+30;

ExpMovingAverage(G,Gex7,7);Gex7h=Gex7+25;


DifGex5=AbsValue(Gex5)-AbsValue(Gex5[1]); // direction instantanée de Gex7

DifGex51=AbsValue(Gex5[1])-AbsValue(Gex5[2]);//direction instantanée de Gex7 précédent

end

//-------------------------------------------

if Gex5>=Gex5[1] then //coloration de tendance moyenne 7

begin Gex5up=Gex5;Gex5up[1]=Gex5[1];

end else Gex5up=void;

if Gex5<Gex5[1] then

begin Gex5dw=Gex5;Gex5dw[1]=Gex5[1];

end else Gex5dw=void;

//--------------------------------------------

if Gex5>=Gex5[1] then //coloration précédente déplacée

begin Xup=Gex5+30;Xup[1]=Gex5[1]+30;

end else Xup=void;

if Gex5<Gex5[1] then

begin Xdw=Gex5+30;Xdw[1]=Gex5[1]+30;

end else Xdw=void;

//--------------------------------------------

if Gex7>=Gex7[1] then //coloration de tendance moyenne 7

begin Kup=Gex7+25;Kup[1]=Gex7[1]+25;

end else Kup=void;

if Gex7<Gex7[1] then

begin Kdw=Gex7+25;Kdw[1]=Gex7[1]+25;

end else Kdw=void;

//-------------------------------------------

if (DifGex71<-1) AND (DifGex7>=$DGex7) then OK=1;

//entrée long sur le marché dès changement de direction de Gex7

//if (Gex7[1]<Gex7[2]) AND (Gex7[2]<Gex7[3]) AND (DifGex7>0) then OK=1;


if (DifGex71>-1) AND (DifGex7>$DGex7) then OK=1;

// entrée long sur le marché ultérieurement

else

if (DifGex71>1) AND (DifGex7<=-$DGex7) then OK=-1 ;

//entrée short sur le marché dès changement de direction de Gex7

//if (Gex5[1]>Gex7[2]) AND (Gex7[2]>Gex7[3]) AND (DifGex7<0) then OK=-1;


if (DifGex71<1) AND (DifGex7<-$DGex7) then OK=-1;

//entrée short sur le marché ultérieurement ultérieurement(2)

//------------------------------------------------

if (OK=1) AND (position<>1) AND (RSI10>63) then //entrée long sur le marché

begin

senti=100;

playsound("gong");

position=1;

end

else

if (OK=-1) AND (position<>-1) AND (RSI10<35) then //entrée short sur le marché

begin

senti=0;

playsound("corkpop");

position=-1;

end

//----------------------------------------------

ShowTip("DifGex51="+NumericToString(DifGex51,"%6.2f"

+"\n"+"DifGex5="+NumericToString(DifGex5,"%6.2f"

+"\n"+"position="+NumericToString(position,"%6.2f"

+"\n"+"OK="+NumericToString(OK,"%6.2f"

+"\n"+"RSI10="+NumericToString(RSI10,"%6.2f"))))));

// ---------------------------------------------

INTERPRETATION

begin

sentiment=senti;

end

//-------------------------------------------

plot(Gex5up,lightgreen,2);

plot(Gex5up,black,1);

plot(Gex5dw,lightred,2);

//-------------------------------------------

plot(Xup,lightgreen,2);

plot(Xup,black,1);

plot(Xdw,lightred,2);

//--------------------------- ---------------

//plot(Gha5h,red,1);

//-------------------------------------------

//plot(Ghaex5h,black,1);

//plot(Gex5up,black,1);

//plot(Gex5dw,lightred,2);

//-------------------------------------------

plot(Kup,lightgreen,2);

plot(Kup,black,1);

plot(Kdw,lightred,2);

//-------------



24 vues
philippe
Jul 16, 2022

En regardant le programme je vois déjà un problème d’optimisation dans le code. Si tu mets ce programme sur un graphique cela doit prendre plusieurs minutes pour 60 jours de données en 1-5 ou 10 mn.

La premiere partie est bonne lorsque tu calcules sur la premiere barre et sinon le calcul se fait sur les autres barres car une serie se reffere a une valeur precedente [1].

La boucle de calcul for i=CurrentBarIndex() downto 0 effectue a chaque nouvelle barre un calcul en arriere sur toutes les barres de ce qui est entre begin et end. Il faut utiliser cette boucle seulement pour un calcul qui a besoin de se faire sur les barres precedentes.

Tu as mis dans cette boucle le calcul de toutes les moyennes mobiles ce qui consomment beaucoup de CPU et cette boucle fait qu'a chaque nouvelle barre nous recalculons pour toutes les moyennes mobiles. Ce n'est pas necessaire, la seule partie qui a besoin d'une boucle pour le calcul en arriere est:

Gha=(haHgh+haLow+haClo)/3; // cours de base a cause de haHgh.

Tout le reste peut etre sortie de la boucle et place en dessous dans le programme, tu verras la vitesse d'execution multipliee par 1000.


Pour le probleme du trade le 7-7-2022 il faut dans le parametrage du trading cocher la case display backtest controls. Ensuite clicquez sur le troisieme bouton avec les deux fleches vers l'exterieur. Cela permet de prendre en compte tout l'historique pour le calcul de simulation. Tu as maintenant des millier de trades. Il faut changer les valeurs de stop et target qui sont trop pres.


L'autre probleme est que sentiment est toujours a zero trade short, il n'y a pas de 50 ou 100 trade long. La declaration de la variable senti doit toujours se faire avec une valeur par defaut a 50.




Eric Lefort trader français

© 2010 - 2025 Eric Lefort    MOGALEF is a registered trademark

Eric s'est retiré.
Il n'y aura plus de newsletter.

CONNECT WITH US

  • YouTube Basic Black
bottom of page