Bonjour,
Je souhaiterai obtenir le code de l’indicateur intégré à Proorder sur la STochastique Méthode Time Series
En effet, cette dernière est réactive au variation et je l’ai cherché sur tous les supports mais pas moyen de la trouver
Je ne suis pas assez sachant en programmation et mathématiques pour la créer
Pouvez-vous, s’il vous plait, m’aider ?
Ci-dessous le code de l’oscillateur Stochastique associé à la moyenne mobile de type TimeSeries:
p=14
q=3
r=5
plusHaut = HIGHEST[p](HIGH)
plusBas = LOWEST[p](LOW)
oscillateur = (CLOSE - plusBas) / (plusHaut - plusBas) * 100
ligneK = AVERAGE[q,6](oscillateur)
ligneD = AVERAGE[r,6](ligneK)
RETURN ligneK AS "%K", ligneD AS "%D"
Le résultat est bien le même que la version de la plateforme.
Bonjour Nicolas et merci pour votre aide.
Croyez-vous qu’il soit possible d’approcher par les résultats du code 2 fois ci-dessous quasi parfait qui triche avec le DPO
J’ai déjà essayé de remplacer le DPO par les MM mais celà ne donne que 25% du résultat avec le code suivant
Je l’ai testé sur le DAX 30 mon support favori
k=33
once rr=1
n=(k*2)-4
p=(n/2)-1
pprc=n
avg1 = average[pprc](high)
r = round(pprc/2) +1
myDPO1 = high - avg1[r]
avg2 = average[pprc](low)
myDPO2 = low - avg2[r]
avg3=average[pprc](close)
myDP03=close-avg3[r]
h1=myDPO1
moyh=high-h1
hi=(moyh-moyh[1]+(high[p])/n)*n
hi=(round(hi*100))/100
l1=myDPO2
moyl=low-l1
lo=(moyl-moyl[1]+(low[p])/n)*n
lo=(round(lo*100))/100
clo1=myDP03
moyc=close-clo1
clot=(moyc-moyc[1]+(close[p])/n)*n
clot=(round(clot*100))/100
Cependant j’ai observé sa façon d’agir et j’ai pu en dégager sa technique partielle :
OPEN[2]>OPEN AND LOW[1]<open pour les achats et
OPEN[2]<OPEN AND HIGH[1]>open pour les ventes et je pense lié à une sorte de stochastique Time Series …
Qu’en pensez-vous ?
DEFPARAM CUMULATEORDERS = FALSE
DEFPARAM FLATAFTER=163000
Positionsize = 3
once rr=1
mb=average[20](typicalprice)
k=48
n=(k*2)-4
p=(n/2)-1
h1=DPO[n](high)
moyh=high-h1
hi=(moyh-moyh[1]+(high[p])/n)*n
hi=(round(hi*100))/100
l1=dpo[n](low)
moyl=low-l1
lo=(moyl-moyl[1]+(low[p])/n)*n
lo=(round(lo*100))/100
clo1=dpo[n](close)
moyc=close-clo1
clot=(moyc-moyc[1]+(close[p])/n)*n
clot=(round(clot*100))/100
cond1=(high>high[1] and high>high[2])
cond2=(cond1 and high>hi[46]) and (barindex>bari or rr=-1)
if cond1 and cond2 then
flagg=1
targeth=high
targetl=lo[46]
else
flagg=0
signa=mb
endif
for zz=0 to 45
if clot[45-zz]<targetl and hi[45-zz]<=targeth and flagg=1 then
signa=high+(averagetruerange[20](close))*.5
rr=1
bari=barindex+zz+2
break
elsif hi[45-zz]>targeth then
signa=mb
break
endif
next
condi=(low<low[1] and low<low[2]) and low<lo[46] and (barindex>bar or rr=1)
if condi then
fflag=1
target1=low
target2=hi[46]
else
fflag=0
siigna=mb
endif
for kk=0 to 45
if clot[45-kk]>target2 and lo[45-kk]>=target1 and fflag=1 then
siigna=low-(averagetruerange[20](close))*.5
rr=-1
bar=barindex+kk+2
break
elsif lo[45-kk]<target1 then
siigna=mb
break
endif
next
if barindex < 100 then
signa=undefined
siigna=undefined
endif
// Conditions pour ouvrir une position acheteuse
IF siigna < mb THEN
BUY Positionsize CONTRACTS AT MARKET
ENDIF
//Conditions pour ouvrir une position vendeuse
IF signa > mb THEN
Sellshort Positionsize CONTRACTS AT MARKET
ENDIF
//STOP
SET STOP LOSS 94
L’utilisation du DPO dans l’indicateur n’a d’utilité que parce qu’il connaît le future, on en extrait donc les bonnes “coordonnées” pour tracer le canal (si je me souviens bien à quoi l’indicateur que tu as posté ressembles), et ainsi obtenir une parfaite visualisation de ce qui a était. Remplacer le DPO par des moyennes mobiles, c’est une idée mais, comme tu l’as constaté, n’amène pas grand chose au final, puisque il n’y a rien de mieux que de connaître le futur ! N’est ce pas ? 😆
Bonjour Nicolas,
Je souhaiterai dans mon code sur le Dax30 en 5 min, faire référence au DOW JONES, par exemple, si le Dow Jones descends depuis 10 bougies , ne faire que des ventes.
Ce que je ne sais pas c’est : est-ce que c’est possible et aussi comment faire appel au Cours du DOW JONES sur CFD
D’avance merci pour ta réponse.
Il n’est pas possible au jour d’aujourd’hui de tester un autre instrument que celui sur lequel l’indicateur est appliqué, désolé.
Bonjour Nicolas,
Je ne comprends pas pourquoi il y a des écarts si importants en Backtest lorsque je change l’horaire de l’affichage du Dax30 dans les options de la plateforme avec le code ci-dessous qui est pour le DAX30 en 5 min. Lorsque je règle en heure anglaise 8:40 jusque 19:00 j’ai un super résultat et si je passe à 19:30 j’ai un résultat beaucoup moins important alors que les ordres n’ont pas changé et que je suis flat à 16:30 (heure anglaise) dans le code. As-tu une idée ?
DEFPARAM CUMULATEORDERS = FALSE
DEFPARAM FLATAFTER=163000
defparam preloadbars = 300
Positionsize = 2
REM LE WEEK END C'EST FERME
if dayofweek=6 or dayofweek=7 then
repos=0
else
repos=1
endif
rem on arrete plus tot le vendredi
IF DayOfWeek=5 and time>150000 then
vendredi=1
else
vendredi=1
endif
rem on ne trade que la journée
if time<084000 and time>162500 then
journee=0
else
journee=1
endif
rem on ne trade pas le midi
if (time>105500 and time<120000) then
tradetime=1
else
tradetime=1
endif
rem on ne vends pas en début d'après midi entre 13h30 et 14h15
IF TIME >123000 and time <131500 then
vente=1
Else
vente=1
endif
rem on ne vends pas pas durant la phase haussière fin de séance
if time>152000 and time<163000 then
vente2=1
else
vente2=1
endif
rem on n'achète pas durant la phase baissière entre 12h55 et 13h25
if time>115500 and time<122500 then
achat=0
else
achat=1
endif
rem on n'achète pas durant la phase baissière de 16h00 à 16h35
if time>150000 and time<153500 then
achat2=0
else
achat2=1
endif
rem on ne vends pas entre 11h28 et 12h00
if time>102800 and time<110000 then
vente3=1
else
vente3=1
endif
rem on évite les extrêmes en cas de retournement brutal
IF (CLOSE[50]-close)>45 then
stopvente=1
else
stopvente=1
endif
if (close-close[50])>45 then
stopachat=1
else
stopachat=1
endif
condachat=(ACHAT2=1 and achat=1 and vendredi=1 and tradetime=1 and journee=1 and repos=1 and stopachat=1)
condivente=(VENTE2=1 AND VENTE=1 and vente3=1 and vendredi=1 and tradetime=1 and journee=1 and repos=1 and stopvente=1)
once rr=1
mb=average[10](medianprice)
k=28
n=(k*2)-4
p=(n/2)+1
avg = average[k](high)
r = round(k/2) +1
h4 = high - avg[r]
myDPO = h4
h1=myDPO
moyh=high-h1
hi=(moyh-moyh[1]+(high[p])/n)*n
hi=(round(hi*100))/100
avg1 = average[k](low)
r1 = round(k/2) +1
h1 = low - avg1[r1]
myDPOl = h1
l1=mydpol
moyl=low-l1
lo=(moyl-moyl[1]+(low[p])/n)*n
lo=(round(lo*100))/100
avg2 = average[k](close)
r4 = round(k/2) +1
h2 = close - avg2[r4]
myDPO2 = h2
clo1=mydpo2
moyc=close-clo1
clot=(moyc-moyc[1]+(close[p])/n)*n
clot=(round(clot*100))/100
cond1=(high>high[1] and high>high[2])
cond2=(cond1 and high>hi[46]) and (barindex>bari or rr=-1)
if cond1 and cond2 then
flagg=1
targeth=high
targetl=lo[46]
else
flagg=0
signa=mb
endif
for zz=0 to 45
if clot[45-zz]<targetl and hi[45-zz]<=targeth and flagg=1 then
signa=high+(averagetruerange[20](close))*.5
rr=1
bari=barindex+zz+2
break
elsif hi[45-zz]>targeth then
signa=mb
break
endif
next
condi=(low<low[1] and low<low[2]) and low<lo[46] and (barindex>bar or rr=1)
if condi then
fflag=1
target1=low
target2=hi[46]
else
fflag=0
siigna=mb
endif
for kk=0 to 45
if clot[45-kk]>target2 and lo[45-kk]>=target1 and fflag=1 then
siigna=low-(averagetruerange[20](close))*.5
rr=-1
bar=barindex+kk+2
break
elsif lo[45-kk]<target1 then
siigna=mb
break
endif
next
if barindex < 100 then
signa=undefined
siigna=undefined
endif
// Conditions pour ouvrir une position acheteuse
IF siigna < mb and condachat THEN
BUY Positionsize CONTRACTS AT MARKET
ENDIF
//Conditions pour ouvrir une position vendeuse
IF signa > mb and condivente THEN
Sellshort Positionsize CONTRACTS AT MARKET
ENDIF
//STOP
SET STOP LOSS 900
La modification des horaires pourrait influencer la valeur des indicateurs ? As-tu essayé de grapher tes variables à minima ?
Bonsoir Nicolas, je précise mon soucis, d’ailleurs je ne sais pas si tu travailles pour Prorealtime et si c’est à toi que je dois m’adresser ou directement au support technique, enfin bref : lorsque je code : if time<084000 or time>180000 afin de limiter le créneau horaire d’intervention, j’ai par exemple un profit de 700 € hors si je change les horaires d’affichage du dax dans les options de la plateforme, les résultats changent.
Pourtant , les horaires sont contraints et le robot n’intervient que dans cette plage horaire
Et par défaut, 200 bougies sont preload, alors que ma plus grande période est de 56 pour une moyenne mobile, même si je charge 300 bougies, celà ne change rien, c’est vraiment les horaires de la plateforme qui font tout changer au niveau du résultat
Alors je me dis que peut-être lorsque l’on contraint à une plage horaire, il n’y a de bougies preload et que l’algo utilise peut-être l’historique avant 18h00 de la veille lors du démarrage à 8h40
Je ne sais pas si je suis trés explicite
Aussi, je pense que les ingénieurs de prorealtime pourraient trés facilement coder une fonction qui fait appel au cours du Dow Jones dans un code qui s’exécute sur le Dax 30 5 min, car à partir de 15h30 ( heure française) et à plus forte raison à partir de 17h30, c’est bien le Dow Jones qui donne la tendance au Dax, tout comme le Dax donne la tendance au France 40 en journée…..
Peut-être que celà est possible en MQL4 sur Metatrader 4 ?????
D’avance merci pour tes réponses, si tu ne les as pas, je les transmettrai au support technique et je tiendrai informé
See You Soon
On s’éloigne vraiment beaucoup du sujet de base ici 🙄
Bref, rien qu’en utilisant l’instruction GRAPH, on débloque 90% des soucis de programmation et on apprend en même temps pourquoi on a eu ces problèmes pour ne plus les reproduire. Si tu as créé des horaires personnalisés, il est logique que les indicateurs ne se calculent plus de la même manière et donc tes résultats en ressortent différent.