Richiesta creazione indicatore RunUp-DrawDown
Forums › ProRealTime forum Italiano › Supporto ProOrder › Richiesta creazione indicatore RunUp-DrawDown
- This topic has 9 replies, 3 voices, and was last updated 3 years ago by MauroPro.
Tagged: dd, drawdown, equity, positionperf, rapporto, ratio, ru, runup, strategyprofit
-
-
04/08/2021 at 8:31 AM #166462
E’ possibile creare una condizione da aggiungere ad un qualsiasi TS (da utilizzare come filtro di Performance Decay della EquityLine) che visualizzi su X trades il rapporto tra RunUp (RU) e DrawDown (DD)? (quindi penso si debba utilizzare strategyProfit per conoscere i profitti dei vari trades)
In pratica vorrei mettere in standBy un TS quando negli ultimi X trades, il rapporto tra RU e DD scenda sotto il 20%.
Esempio: se un TS negli ultimi 50 trades ha un RU di 1000 euro, voglio, per continuare ad utilizzarlo, che il DD sia minore-uguale a 200 euro. Grazie
04/08/2021 at 11:39 AM #166515Si, si può fare, però devi avere un pò di pazienza perché devo farlo a “bocconi”, quando ho qualche momento libero.
04/08/2021 at 11:50 AM #166518Grazie Roberto.
Dopo molti test su molti TS ho notato che uno dei requisiti più importanti per evitare la perdita di performance è il rapporto RU su DD.
Ideale sarebbe che il DD non superi il 10% di RU. Fino al 20% è accettabile, sopra il TS non genera più profitti in quel periodo. Se questo rapporto peggiora, inizia una fase di decadenza della equity line.
Quindi prima di stoppare il TS perchè ha raggiunto il massimo DD, si potrebbe intervenire prima.
Quando lo hai costruito lo puoi provare anche nei tuoi TS cosi mi dici come ti sembra come idea e se si può migliorare. CIAO
04/09/2021 at 7:11 PM #166654Eccolo, ci sono le formule e per ultima il DDRUratio che ti da la percentuale, più è bassa migliore è il rapporto. Dopo c’è un codice che ho usato per i test.
Ci sono delle differenze tra i dati calcolati così e quelli di PRT (anche se non molto grandi), sia considerando il profitto/perdita in corso che non. Sarà una differenza di calcolo di cui non ho capito l’origine. Però il rapporto tra i due valori non cambia di molto:
DrawDown/RunUp ratio12345678910111213141516171819202122232425262728293031323334353637383940414243ONCE Capital = 10000ONCE MinPoint = CapitalONCE MaxPoint = 0ONCE MaxRU = 0ONCE MaxDD = 0//------------------------------------------// EQUITYEquity = Capital + StrategyProfitTempProfit = PositionPerf * PositionPrice / PipSizeTempEquity = Equity + TempProfit//------------------------------------------// DrawDownMaxPoint = max(MaxPoint,TempEquity)DD = MaxPoint - TempEquityMaxDD = max(MaxDD,DD)////------------------------------------------// RunUpMinPoint = min(MinPoint,TempEquity)RU = TempEquity - MinPointMaxRU = max(MaxRU,RU)//------------------------------------------// DD/RU ratioDDRUratio = (MaxDD / MaxRU) * 100//------------------------------------------//// test code (Dax,2 min,25K units)//avg = Average[38,1](close)if close crosses over Avg and Not OnMarket thenbuy at Marketelsif close crosses under Avg and Not OnMarket thensellshort at Marketendifset target pprofit 2000set stop ploss 2000//if positionperf > 0.0006 thensell at marketexitshort at marketendif//graph DDRUratioL’esempio l’ho creato apposta per un buon rapporto, non è un codice che abbia molto senso!
1 user thanked author for this post.
04/09/2021 at 7:30 PM #16665604/12/2021 at 12:41 PM #166849Ciao Roberto, lo ho provato ed è utile da alcuni test.
Ho provato ad usarlo in questo modo: se il DDRUratio è maggiore di 20 allora vario l’ampiezza dello stoploss (ad esempio, ma può essere anche il take profit…). Si riescono così ad avere diversi parametri di rischio autoadattivi con l’andamento della equityline.
Un difetto tuttavia è che è cumulativo (caricati periodi differenti si hanno valore differenti).
Per renderlo pienamente efficiente bisognerebbe sommare un numero a scelta di operazioni sui cui calcolare il DDRUratio, es. 50 (ottimizzabile), ed avere così una curva progressiva simile ad una media mobile semplice, per cui dopo 50 operazioni si aggiunge la 51e si toglie la 1 della serie…
É complicato apportare questa modifica?04/12/2021 at 1:59 PM #166856Si, non è semplicissimo. Occurre usare i vettori per salvare i 50 (o più o meno) valori di ciascun dato ed ogni volta ricalcolare il rapporto.
Non è comunque impossibile.
Con un pò di rtempo a disposizione riuscirò a farlo.
04/13/2021 at 10:56 AM #166936Eccolo:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586// test code (DAX,1 hour,50K units) on PERIODS bars//ONCE Periods = 10ONCE Capital = 10000ONCE MinPoint = CapitalONCE MaxPoint = 0ONCE MaxRU = 0ONCE MaxDD = 0ONCE j = 0//IF BarIndex < 1 THENFOR i = 1 TO Periods$Equity[i] = 0$TempProfit[i] = 0$TempEquity[i] = 0$MaxPoint[i] = 0$MinPoint[i] = Capital$DD[i] = 0$RU[i] = 0NEXTENDIF//z1 = OnMarket[1] AND Not OnMarketz2 = LongOnMarket AND ShortOnMarket[1]z3 = ShortOnMarket AND LongOnMarket[1]z4 = (Not OnMarket[1] AND Not OnMarket) AND (StrategyProfit <> StrategyProfit[1])Cambio = z1 OR z2 OR z3 OR z4 //OR 1//IF Cambio THENj = min(Periods,j + 1)//------------------------------------------// EQUITY$Equity[j] = Capital + StrategyProfit$TempProfit[j] = PositionPerf * PositionPrice / PipSize$TempEquity[j] = $Equity[j] + $TempProfit[j]//------------------------------------------// DrawDown$MaxPoint[j] = max($MaxPoint[j],$TempEquity[j])$DD[j] = $MaxPoint[j] - $TempEquity[j]////------------------------------------------// RunUp$MinPoint[j] = min($MinPoint[j],$TempEquity[j])$RU[j] = $TempEquity[j] - $MinPoint[j]//------------------------------------------// DD/RU ratioMaxDD = 0MaxRU = 0IF j = Periods THENFOR i = 1 TO PeriodsMaxDD = max(MaxDD,$DD[i])MaxRU = max(MaxRU,$RU[i])NEXTDDRUratio = (MaxDD / MaxRU) * 100FOR i = Periods DOWNTO 2$Equity[i - 1] = $Equity[i]$TempProfit[i - 1] = $TempProfit[i]$TempEquity[i - 1] = $TempEquity[i]$MaxPoint[i - 1] = $MaxPoint[i]$MinPoint[i - 1] = $MinPoint[i]$DD[i - 1] = $DD[i]$RU[i - 1] = $RU[i]NEXTENDIFENDIF//------------------------------------------//// test code (Dax,1 hour,50K units)//avg = Average[100,1](close)if close crosses over Avg and Not OnMarket thenbuy at Marketelsif close crosses under Avg and Not OnMarket thensellshort at Marketendifset target pprofit 2000set stop ploss 2000//if positionperf > 0.0005 thensell at marketexitshort at marketendif//graph DDRUratiograph MaxDDgraph MaxRUfa questi due tipi di calcoli:
- sulle operazioni effettuate, non sulle barre (ed è quello che ho postato, con le barre dei commenti verso la fine della riga 27 per identificare quando un’operazione è terminata), quindi se indichi 10 PERIODI in realtà intendi 10 operazioni
- sulle barre chiuse (basta che togli il commento dalla riga 27), quindi se indichi 10 PERIODI sono 10 barre (non operazioni)
ho scritto queste due regole perché:
- la prima ti assicura che il calcolo sia fatto effettivamente sull’importo dell’Equity aggiornato, altrimenti se hai messo 10 periodi e ci sono 50 barre senza nessuna operazione, il rapporto sarà ZERO (linea piatta)
- il secondo fa il calcolo sulle barre, ma ha lo svantaggio di diventare piatto quandio ci sono molte barre senza nessuna operazione (più di quelle indicate nei PERIODI)
Se, a parte il discorso delle barre o operazioni fatte sopra, vedi che il rapporto DDRUratio è zero, è perché in quel periodo ci sono state TUTTE operazioni positive (100%).
Com’è adesso la riga 79 (con 0.0005), succederà questo. Basta che la modifichi in 0.0500 e vedrai subito la differenza!
1 user thanked author for this post.
04/13/2021 at 12:11 PM #166945Sopra aggiunto come registro 281 qui …
1 user thanked author for this post.
04/13/2021 at 2:50 PM #166959 -
AuthorPosts
Find exclusive trading pro-tools on