DPO
Forums › ProRealTime forum Français › Support ProOrder › DPO
- This topic has 11 replies, 4 voices, and was last updated 4 years ago by rama.
Tagged: dpo
-
-
06/05/2016 at 10:10 PM #885206/06/2016 at 7:14 AM #8862
Le DPO peut se calculer de 2 façons :
1/ avec les données du futur (ce qui n’est pas possible à récupérer pour le trading automatique)
2/ avec les données du passé (là oui on le peut mais il faudra utiliser la formule du DPO directement dans le code et non pas l’indicateur embarqué dans la plateforme).
Voici la formule du DPO :
12345678910// **** DPO of past moving average and not future ones :p = 14avg = average[p](customclose)r = round(p/2) +1b = customclose - avg[r]myDPO = bRETURN myDPO as "Detrented Price Oscillator of past datas", 0 coloured(10,10,255) as "0"06/06/2016 at 12:50 PM #888406/20/2016 at 11:27 AM #9583Bonjour, malgré mes nombreuses tentatives, je fais choux blanc.
Mon but est de rendre opérant les “DARVAS BOXES” en temps réel, et non pas en “statique”, et je n’arrive à intégrer le bout de code que tu m’as transmis ci-dessus dans le code original.
Merci pour ton aide, si cela est possible bien entendu.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657rem from hk_lisse blogk=55once tth=undefinedonce ttl=undefinedn=(k*2)-4p=(n/2)-1h1=dpo[n](high)moyh=high-h1hi=(moyh-moyh[1]+(high[p])/n)*nhi=(round(hi*100))/100l1=dpo[n](low)moyl=low-l1lo=(moyl-moyl[1]+(low[p])/n)*nlo=(round(lo*100))/100low1=(round(low*100))/100high1=(round(high*100))/100if barindex > 100 thenif box=1 and (high1>tth or low1<ttl) thenbox=0flag=0endifif box=0 and flag=0 and high1>=hi[46] and high1>=hi[45] and high1>=hi[44] thenth=high1flag=1endifif box=0 and flag=1 thenfor zz=0 to 44if hi[47-zz-1]>th or hi[47-zz-2]>th or hi[47-zz-3]>th thenflag=0breakendifif lo[47-zz]<lo[47-zz-1] and lo[47-zz]<lo[47-zz-2] and lo[47-zz]<lo[47-zz-3] thenbox=1tth=thttl=lo[47-zz]breakendifnextendifelsetth=undefinedttl=undefinedendifif box=1 thenba=ttlelseba=tthendifif box=1 thencol=1elsecol=-1endifreturn ba coloured by col , tth coloured by col,ttl coloured by col06/20/2016 at 12:52 PM #958806/20/2016 at 1:44 PM #960106/20/2016 at 3:19 PM #9603J’obtiens donc un début de code comme suit, mais il y a forcément quelque chose qui cloche, au niveau de “h1″ et ” l1″, par rapport au code de base?
Navré pour mon insistance, mais ce DARVAS me semble une excellente base de backtest, et j’aimerais vraiment arriver à quelque chose de tangible.
1234567891011121314151617181920p = 55avg = average[p](customclose)r = round(p/2) +1b = customclose - avg[r]myDPO = bk=55once tth=undefinedonce ttl=undefinedn=(k*2)-4p=(n/2)-1h1=mydpomoyh=high-h1hi=(moyh-moyh[1]+(high[p])/n)*nhi=(round(hi*100))/100l1=mydpomoyl=low-l1lo=(moyl-moyl[1]+(low[p])/n)*nlo=(round(lo*100))/100low1=(round(low*100))/100high1=(round(high*100))/10006/20/2016 at 3:26 PM #960406/20/2016 at 4:48 PM #960807/26/2016 at 8:28 AM #10874Victorio je ne pense pas qu’il soit possible d’obtenir les mêmes box comme ça. Même si je suis d’accord avec le bout de code à insérer de Nicolas pour représenter le dpo avec les moyennes mobiles passées, il suffit d’afficher le dpo existant de PRT et de cocher tour à tour “utiliser les moyennes mobiles passées”/”utiliser les moyennes mobiles futures” pour voir que ça donne des dpo vraiment très différents. Et ensuite dans le code de Darvas box les différences dues au dpo se propagent comme une boule de neige en créant des différences encore plus grandes dans le calcul de hi et lo. Il en résulte des box très différentes.
Enfin, si je puis me permettre, dans l’insertion du bout de code de Nicolas sur le dpo, tu as un “customclose”, qui te laisse librement choisir en fenêtre de l’indicateur si tu veux l’appliquer à high , low, close, autre… Mais dans le code de Darvas box tu as 2 fois un calcul de dpo avec du high et avec du low. Or si tu laisses customclose comme tu l’as fait, et qu’après en fenêtre tu choisis high, tu vas calculer 2 fois en high (respectivement si tu choisis low tu vas calculer 2 fois en low), ça va créer des erreurs qui vont s’ajouter aux différences dues au mode de calcul des dpo. Donc tu dois adapter le code de Nicolas en traitant 2 calculs séparés de dpo, un avec high, et un autre avec low. En remplaçant le p de Nicolas par pprc pour pas confondre avec le p déjà pris dans le code de Darvas box et faciliter la lecture des 2 codes fusionnés, ça donnerait quelque chose comme ça:
123456789101112131415161718192021222324rem from hk_lisse blogk=48once tth=undefinedonce ttl=undefinedn=(k*2)-4p=(n/2)-1pprc=navg1 = average[pprc](high)r = round(pprc/2) +1myDPO1 = high - avg1[r]avg2 = average[pprc](low)myDPO2 = low - avg2[r]h1=myDPO1moyh=high-h1hi=(moyh-moyh[1]+(high[p])/n)*nhi=(round(hi*100))/100l1=myDPO2moyl=low-l1lo=(moyl-moyl[1]+(low[p])/n)*nlo=(round(lo*100))/100low1=(round(low*100))/100high1=(round(high*100))/100etc…
en ayant mis ici pprc = n puisque le code de Darvas box utilisait les n périodes pour son calcul, mais j’ai laissé pprc en intermédiaire pour éventuellement jouer avec en mettant pprc = plus ou moins que n et voir bouger les tailles de box. Mais je pense que la conclusion sera de toute façon que quel que soit le réglage, les box sont beaucoup moins pertinentes, parce que les dpo sont trop différents au départ pour que mathématiquement on puisse retomber sur les mêmes box.
07/26/2016 at 10:40 AM #1087704/17/2020 at 8:09 PM #126641I am t
buysell123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869once rr=1mb=average[20](typicalprice)k=48n=(k*2)-4p=(n/2)-1h1=DPO[n](high)moyh=high-h1hi=(moyh-moyh[1]+(high[p])/n)*nhi=(round(hi*100))/100l1=dpo[n](low)moyl=low-l1lo=(moyl-moyl[1]+(low[p])/n)*nlo=(round(lo*100))/100clo1=dpo[n](close)moyc=close-clo1clot=(moyc-moyc[1]+(close[p])/n)*nclot=(round(clot*100))/100cond1=(high>high[1] and high>high[2])cond2=(cond1 and high>hi[46]) and (barindex>bari or rr=-1)if cond1 and cond2 thenflagg=1targeth=hightargetl=lo[46]elseflagg=0signa=mbendiffor zz=0 to 45if clot[45-zz]<targetl and hi[45-zz]<=targeth and flagg=1 thensigna=high+(averagetruerange[20](close))*.5rr=1bari=barindex+zz+2breakelsif hi[45-zz]>targeth thensigna=mbbreakendifnextcondi=(low<low[1] and low<low[2]) and low<lo[46] and (barindex>bar or rr=1)if condi thenfflag=1target1=lowtarget2=hi[46]elsefflag=0siigna=mbendiffor kk=0 to 45if clot[45-kk]>target2 and lo[45-kk]>=target1 and fflag=1 thensiigna=low-(averagetruerange[20](close))*.5rr=-1bar=barindex+kk+2breakelsif lo[45-kk]<target1 thensiigna=mbbreakendifnextif barindex < 100 thensigna=undefinedsiigna=undefinedendifgolong = (siigna < mb)goshort = (signa > mb)*-1return golong as "LONG",goshort as "SHORT",0I am trying to use the above indicator in my code I get the error attached. what need to be replaced for DPO
-
AuthorPosts