Creazione Graph Equity Line con slippage
Forums › ProRealTime forum Italiano › Supporto ProOrder › Creazione Graph Equity Line con slippage
- This topic has 13 replies, 2 voices, and was last updated 3 years ago by robertogozzi.
Tagged: equity, equity line, graph, line, operazioni, slippage, spread, trade
-
-
04/26/2021 at 5:21 PM #168097
Ciao Roberto, e’ possibile creare un graph che indichi il profitto netto di un Ts depurato dallo slippage?
Sarebbe da calcolare il numero di eseguiti del Ts, moltiplicarli per i pips di slippage (diversi da strumento a strumento ed orario, ma questo ora è secondario), il tutto da sottrarre al profitto della strategia (strategyProfit).
Il problema principale che ho è come determinare il numero di eseguiti complessivi, anche perchè alcuni derivano da ordini a mercato, altri da ordini pendenti.
Riesci a creare questo graph? Grazie
04/26/2021 at 5:31 PM #168101Se è utile per semplificare il calcolo gli ordini pendenti individuati dalle funzioni SET STOP… si potrebbero anche eliminare e riscrivere nelle condizioni di entrata in forma equivalente.
Es.. al posto di: set stop %loss 0.7, si potrebbe scrivere dopo le mie condizioni:
stopLoss =close*0.993
buy 1 contract at market
sell at stopLoss STOP
endif
…
04/26/2021 at 5:42 PM #168106Lo slippage non si può sapere, quindi non è possibile tenerne conto.
STRATEGYPROFIT è il risultato, aggiornato all’ultima operazione chiusa, del totale dei profitti/perdite di ogni operazione, a mercato o pendente che sia.
Se vuoi puoi aggiungerci, ogni barra, il profitto temporaneo dato da:
12345// Pips (per posizione) = PositionPerf * PositionPrice / PipSize// Pips (totali) = PositionPerf * PositionPrice / PipSize * abs(CountOfPosition)//// Money (per posizione) = PositionPerf * PositionPrice / PipSize * pipvalue / abs(CountOfPosition)// Money (totale) = PositionPerf * PositionPrice / PipSize * pipvalueè più precisa, poi puoi farci una media, oppure una percentuale di variazione tra la barra corrente e N barre precedenti, ecc…
04/26/2021 at 5:54 PM #168108Lo so che lo slippage preciso non si può sapere, ma a me basta una cifra indicativa. Es, se sul Nasdaq c’è un punto di spread (che corrisponde a 10 pips), mi basta togliere 10 pips ad eseguito. Poi sottrarre da strategyProfit il numero di operazioni per questa cifra indicativa di slippage.
Non si avrà un equityLine perfetta, ma abbastanza indicativa (del resto anche gli stop, se non garantiti possono essere diversi….).
E’ fattibile in questo modo creare una formula non troppo complessa?
04/26/2021 at 6:44 PM #168110Se vuoi puoi usare una media puoi farlo. La formula è:
1Slippage = X * Y * PipValuedove:
- X è il numero di pips per operazione
- Y è il numero di operazioni eseguite
Calcolare Y non è sempre perfetto; questo metodo è il più preciso che sia riuscito a codificare:
1234567891011If not OnMarket thenY = 0ElseTemp = abs(Countofposition) - abs(Countofposition[1])If Temp = 0 thenIf StrategyProfit <> StrategyProfit[1] thenTemp = 1EndifEndifY = Y + max(0,Temp)Endif04/26/2021 at 8:01 PM #168120Non funziona il contatore di operazioni Y. Se lo si visualizza con un graph si vede che non si sommano le posizioni di un certo periodo di backTest. Inoltre anche all’interno dei singoli giorni non funziona correttamente (non somma le operazioni).
04/26/2021 at 8:09 PM #168121Ho capito, ho sbagliato ad azzerare Y.
Sostituisci la riga 2 con:
1ONCE Y = 0Verrà eseguita una sola volta.
04/26/2021 at 9:43 PM #168126Ho modificato un pò il codice per renderlo più flessibile e trasparente. Controlla se va bene. Grazie
1234567891011121314151617181920onePipValue = 0.10 //(es. cfd Nasdaq) // valore in euro di 1 pippipsPointRatio = 10 //(es. cfd Nasdaq) // numero di pips che compongono 1 puntonContracts = 1 // numero di contratti utilizzati dal TSonePointValue = onePipValue*pipsPointRatioIf not OnMarket thenONCE A = 0 // A = numero di operazioniElseTemp = abs(Countofposition) - abs(Countofposition[1])If Temp = 0 thenIf StrategyProfit <> StrategyProfit[1] thenTemp = 1EndifEndifA = A + max(0,Temp)B = 2 * A // B = numero di eseguitiC = 2 * A * nContracts * onePointValue // C = numero di eseguiti * numero di contrattiEndifnetEquity=strategyProfit-(C*pointValue)Ecco i due graph:
12graph strategyProfit //profitto lordograph netEquity coloured(0,191,255) //profitto netto con slippage incorporato04/26/2021 at 9:51 PM #16812804/26/2021 at 11:02 PM #168129Il calcolo va bene, non penso possa essere migliorato. Il problema dell’assoluta precisione c’è, perché se tu sei a mercato con 4 posizioni e ad un certo punto 1 esce e ne entrano altre due (tutto sulla stessa barra), lo vedrai come un’operazione in più mentre in realtà sono due in più. Però questo NON può essere corretto perché non si sa quante sono le operazioni chiuse e quelle aperte. Forse si potrebbe SEMPRE aggiungere 1 quando STRATEGYPROFIT è <> dal precedente, invece che metterlo solo quando la differenza delle operazioni è zero. Si, credo questa variazione possa rendere quasi preciso al 100% il conteggio (ho spostato anche ONCE), resterebbero fuori solo doppie/triple posizioni chiuse, cioè se ne chiudono 2 e ne entrano 3 te ne segnala due e non tre (ma credo sia rarissimo):
12345678ONCE Y = 0If OnMarket thenTemp = abs(Countofposition) - abs(Countofposition[1])Y = Y + max(0,Temp)If StrategyProfit <> StrategyProfit[1] thenY = Y + 1EndifEndifE’ ovvio che è un valore medio, non può essere preciso ma credo possa darti un’idea concreta.
L’Equity Curve è quasi identica, si discosta leggermente sempre di più prioprio a causa dello slippage calcolato.
Su una cosa ho un dubbio, ma lo slippage influisce davvero? Se gestisci te, con ordini pendenti, sia lo SL che il TP allora si perché tu metti un ordine Stop e Limit ad un certo prezzo e se l’entrata è diversa ottieni uno Stop maggiore ed un TP minore, però se usi SET STOP LOSS X e SET TARGET PROFIT Y, non cambia niente con lo slippage, perché se hai messo 100 punti di SL e TP, che entri a mercato a 20000 o 20002 non fa differenza, avrai sempre X e Y punti di perdita o profitto alla fine in quanto è ProOrder che li gestisce automaticamente.
04/26/2021 at 11:26 PM #168131Sono d’accordo che con SET STOP LOSS e SET TARGET PROFIT cambia poco per quanto riguarda lo slippage.
Forse è più utile utilizzare la formula per calcolare soprattutto l’impatto dello spread sulla equityLine (come ho fatto involontariamente nel mio esempio in cui ho messo uno slippage predeterminato ad ogni operazione).
Questo (lo spread) è noto, ma SEMPRE largamente sottostimato nella equityLine fino a che non si calcola precisamente!
Se la curva del proBackTest venisse depurata dallo spread, da qualche slippage, e si tenesse conto dell’impatto del capital gain (considerato poi il regime dichiarativo, altrimenti l’impatto dell’amministrato è anche esso nettamente sottostimato) curve molto belle cambierebbero aspetto!
04/27/2021 at 9:59 AM #168161Alla fine penso di utilizare il tuo codice per visualizzare un equityLine senza spread (lo slippage come dicevi è poco influente e non si conosce mai). Per me è un codice utile.
Ho sistemato le due formule, guarda se vanno bene nel caso le volesse utilizzare qualche utente . CIAO
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657A)onePipValue = 0.10 //(es. cfd Nasdaq) // valore in euro di 1 pipnPipsSpread = 10 //(es. cfd Nasdaq) //inserire lo spread dello strumento tradatonContracts = 1 // inserire il numero dei contratti utilizzati dal TSspread=onePipValue*nPipsSpreadIf not OnMarket thenONCE A = 0 // A = numero di operazionielseTemp = abs(Countofposition) - abs(Countofposition[1])if Temp = 0 thenIf StrategyProfit <> StrategyProfit[1] thenTemp = 1endifendifA = A + max(0,Temp)B = 2 * A // B = numero di eseguitiC = nContracts * B * spread // C = numero di eseguiti * numero di contratti * spread medioEndifnetEquity=strategyProfit-(C*pointValue) // equityLine netta depurata dallo spread medio//-------------------------------------------graph strategyProfit //profitto lordograph netEquity coloured(0,191,255) //profitto netto con slippage incorporato// ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------B) “Forse si potrebbe SEMPRE aggiungere 1 quando STRATEGYPROFIT è <> dal precedente, invece che metterlo solo quando la differenza delle operazioni è zero.Si, credo questa variazione possa rendere quasi preciso al 100% il conteggio (ho spostato anche ONCE), resterebbero fuori solo doppie/triple posizioni chiuse, cioè se ne chiudono 2 e ne entrano 3 te ne segnala due e non tre (ma credo sia rarissimo)” (Roberto Gozzi)onePipValue = 0.10 //(es. cfd Nasdaq) // valore in euro di 1 pipnPipsSpread = 10 //(es. cfd Nasdaq) //inserire lo spread dello strumento tradatonContracts = 1 // inserire il numero dei contratti utilizzati dal TSspread=onePipValue*nPipsSpreadONCE A = 0 // A = numero di operazioniIf OnMarket thenTemp = abs(Countofposition) - abs(Countofposition[1])A = A + max(0,Temp)If StrategyProfit <> StrategyProfit[1] thenA = A + 1B = 2 * A // B = numero di eseguitiC = nContracts * B * spread // C = numero di eseguiti * numero di contratti * spread medioEndifEndifnetEquity=strategyProfit-(C*pointValue) // equityLine netta depurata dallo spread medio//---------------------------------------------graph strategyProfit //profitto lordograph netEquity coloured(0,191,255) //profitto netto con slippage incorporato//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------04/27/2021 at 10:02 AM #16816204/27/2021 at 2:34 PM #168207Perfetto, in un test le due equity erano identiche, in un altro con più accumuli, entrate ed uscite, la equity line nera era uguale, mentre quella celeste leggermente peggiore (ma di poco più di 100 euro).
Bene, credo sia molto utile per tutti.
Grazie per l’idea e per avere pubblicato un codice “chiavi in mano” che ognuno può aggiungere al proprio senza modificare niente (a parte i due valori iniziali)!
-
AuthorPosts
Find exclusive trading pro-tools on