Formula per tradare le valute con un rischio fisso calcolato
Forums › ProRealTime forum Italiano › Supporto ProOrder › Formula per tradare le valute con un rischio fisso calcolato
- This topic has 9 replies, 2 voices, and was last updated 5 years ago by robertogozzi.
-
-
02/20/2019 at 8:00 PM #91861
Buonasera,
avrei bisogno di una indicazione su come impostare una formula per poter rischiare una somma (euro) sempre fissa indipendentemente dalla coppia di valute negoziate.
mi spiego meglio:
all’inizio del codice vorrei memorizzare due parametri del tipo:
MyCash = 10000 //importo versato sul conto destinato al trading
MyRisk% = 1 // percentuale del mio capitale che voglio rischiare ad ogni operazione
L’ 1% di 10000 è 100 ed io vorrei impostare automaticamente il valore di 100 euro come perdita massima per ogni operazione andando ad agire sul quantitativo di valuta acquistata.
il parametro di base dovrebbe essere in numero di Pips che intercorrono tra il mio valore Buy Stop (prezzo di apertura della posizione) ed il valore dello Stop Loss, qualora l’operazione venisse chiusa in perdita che conosco ancor prima di aprire la posizione, appena si è completato il pattern.
inoltre come posso calcolare sempre i soliti 100 euro di perdita massima anche quando le valute tradate non sono contro euro ma, ad esempio, AUD/USD, JPY/CHF, GBP/USD….
Grazie mille.
02/21/2019 at 5:32 PM #91950Puoi usare
1SET STOP %LOSS MyRisk //MyRisk% sull'operazione in corso (sul prezzo d'entrata) espresso in percentuale (senza indicare %)oppure
1SET STOP $LOSS MyCash * (MyRisk / 100) //MyRisk% del tuo capitaleespresso in denaro (senza indicare il simbolo della valuta, è quella del tuo conto)02/21/2019 at 8:28 PM #91976ok, grazie. Conoscevo già il comando $LOSS, ma temo che la soluzione che mi hai proposto non sia quella che volevo…
faccio un esempio per spiegarmi meglio e cercare di ottenere il risultato che desidero.
io ho un pattern (un qualsiasi pattern, in questo caso non importa quale…) che al suo completamento mi fornisce un prezzo di ingresso e contemporaneamente anche un prezzo di SL al di sotto del quale chiudo l’operazione in perdita.
ipotizziamo che voglio tradare EUR/USD, il mio BuyStop è a 1,1330 ed il mio SL è a 1,1290 (40 Pips di differenza tra entry e stop che sarebbero la mia perdita se l’operazione andasse male)
io vorrei acquistare un quantitativo “x” di valuta affinché i miei 40 Pips, qualora li perdessi, corrispondessero a 100 euro ad esempio.
se poi trado USD/JPY con Buy a 110,80 e SL a 110,65 vorrei che i miei 15 Pips in questo caso, se dovessi perderli, corrispondessero sempre a 100 euro, acquistando di conseguenza un quantitativo di valuta adeguato ad avere 15Pips=100 euro.
il numero di Pips tra Buy e SL è sempre diverso da operazione ad operazione ed è una variabile.
il valore del cross delle due valute è l’altra variabile e la perdita che sono disposto a subire in caso di operazione andata male è fisso ed è scritto in cima al codice.
penso che in questo caso ci voglia una formula un po’ più articolata di un semplice $LOSS (o mi sbaglio ?)
Grazie mille come sempre.
🙂
02/22/2019 at 12:39 AM #91995Già avevi fatto questa domanda qui https://www.prorealcode.com/topic/calcolo-della-positionsize/#post-88457.
Cos’è che non ti ha funzionato di quella formula?
02/22/2019 at 8:54 AM #92013ciao,
più che riproporre la stessa domanda avevo risposto chiedendo all’utente “StefanoCG” se era poi riuscito ad ottenere ciò che desiderava e che pensavo fosse ciò che desideravo anche io (ma senza ricevere risposta).
ho provato ad inserire il codice ma qualcosa non ha funzionato e pensando di essere stato in a non spiegarmi bene o a non aver compreso bene l’utilizzo della formula ho pensato di essere più “preciso” aprendo un topic specifico inserendo un mio esempio pratico.
ti chiedo scusa se ho involontariamente duplicato un argomento.
per ogni nuovo post che scrivo ne leggo decine di quelli già esistenti proprio per evitare di riproporre domande/argomenti già trattati, come giustamente indicato nelle regole del forum.
adesso riprovo a vedere la formula e a capire dove sbagliavo e poi posterò il codice.
grazie mille.
02/22/2019 at 11:23 AM #92052Non preoccuparti, magari può esserci un errore, fammi sapere.
Se c’è qualcosa che non va, oltre a dirmi i dettagli allega anche il codice, così che possa replicare tutto sul mio PC.
02/22/2019 at 10:15 PM #92087123456789101112131415161718192021222324252627282930313233// Definizione dei parametri del codiceDEFPARAM CumulateOrders = True // Posizioni cumulate disattivate//DEFPARAM FlatAfter = 220000//DEFPARAM FLATBEFORE = 090000// Condizioni per entrare su posizioni long//indicator6 = CurrentDayOfWeek = 1ONCE CapitaleMassimo = 10000ONCE MaxLoss = 1 / 100PositionSize = Round(CapitaleMassimo/(Close - Close*MaxLoss)/PointValue*PointSize)Graph PositionSizeIF OnMarket OR Close < low[3] THEN //Azzerare il prezzo serve a non inserire ancora l'ordine pendente...Prezzo = 0 //... una volta entrato oppure quando non ci sono più le condizioniENDIFIF LOW[0] > LOW[2] AND LOW[1] > LOW[2] AND LOW[1] > LOW[0] AND HIGH[1] > HIGH[2] AND HIGH [1] > HIGH[0] THENPrezzo = HIGH[1] //Salvo il prezzo d'entrataStopLoss = abs(LOW[2] - Prezzo) //SL sul minimo del patternTargetProfit = (Prezzo + StopLoss) //Target Profit pari all'ampiezza del patternENDIFIF Prezzo AND Not OnMarket THEN //Inserire l'ordine pendente ad ogni candelaBUY positionsize SHARES AT Prezzo STOPSET STOP LOSS StopLossSET TARGET PROFIT TargetProfitENDIFBuonasera,
sto procedendo (parallelamente all’altro topic) anche con il test del position size però non riesco ad ottenere i risultati sperati
indipendentemente dal fatto che il pattern utilizzato ancora non funziona, mi trovo ad avere tutta una serie di operazioni in perdita (anche se molte dovrebbero essere in utile 😉 ) che se rispettassero la formula dovrebbero avere tutte una perdita di 100 euro ognuna.
ma questo non avviene.
Potresti cortesemente verificare e correggermi il codice oppure dirmi le modifiche che devo apportare ?
allego la videata ottenuta con il backtest (EUR/USD). Se il position size funzionasse, è corretto che per tutte le operazioni in perdita nella colonna ABS PERF dovrei trovarmi tutti valori uguali a -100 euro ??
grazie mille.
02/23/2019 at 10:50 AM #92101Per favore, fornisci sempre TUTTE le informazioni per potere ripetare i test:
- strumento usato (EurUsd)
- TF usato
- periodo di backtest usato
- foto esplicative (manca quella dove sono indicati i quantitativi tradati)
Tra l’altro i conti demo hanno qualche problema di connessione stamani, mi sa che ci stanno lavorando per fare prove o aggiornamenti.
Buon fine settimana.
02/23/2019 at 6:26 PM #92142ciao,
il test è stato effettuato su EUR/USD, 1000 unita dal gennaio 2013 a ieri e con TF daily.
ti allego l’elenco delle operazioni con i quantitativi tradati. sembra che la formula calcoli un qualche valore probabilmente con base 100 euro perché quando nel 2013 il cambio valeva 1,30 ne venivano tradati 7700 circa mentre quando nel 2017 il cambio valeva 1,06 ne venivano tradati 9500 circa (ovviamente di più).
bisognerebbe però partire con il calcolo prendendo in considerazione il numero di Pips che intercorrono tra il prezzo di SL ed il prezzo di ingresso long e far valere questo numero di Pips (che varia di volta in volta per ogni operazione) 100 euro agendo sul quantitativo di valuta acquistato. Cosi che ogni eventuale perdita subita vale sempre 100 euro, ovvero l’1% del mio capitale.
Grazie mille.
ciao.
02/27/2019 at 1:25 AM #92429La formula per il dimensionamento della posizione (position sizing) è:
PositionSize = (CapitaleMassimo * MaxLoss) * Leva / ValoreContratto
Se ti restituisce un numero intero è il numero di contratti regolari che puoi acquistare, se è un decimale indica quanti mini contratti puoi acquistare.
Ti allego il codice modificato con la formula corretta:
12345678910111213141516171819202122DEFPARAM CumulateOrders = True // Posizioni cumulate disattivateONCE CapitaleMassimo = 10000ONCE MaxLoss = 1 / 100ONCE Leva = 10ONCE ValoreContratto = 100000//PositionSize = Round(CapitaleMassimo/(Close - Close*MaxLoss)/PointValue*PointSize)PositionSize = (CapitaleMassimo * MaxLoss) * Leva / ValoreContratto//PositionSize = max(1,(CapitaleMassimo * MaxLoss) * Leva / ValoreContratto)graph PositionSizeIF OnMarket OR Close < low[3] THENPrezzo = 0ENDIFIF LOW[0] > LOW[2] AND LOW[1] > LOW[2] AND LOW[1] > LOW[0] AND HIGH[1] > HIGH[2] AND HIGH [1] > HIGH[0] THENPrezzo = HIGH[1] //Salvo il prezzo d'entrataStopLoss = abs(LOW[2] - Prezzo) //SL sul minimo del patternTargetProfit = (Prezzo + StopLoss) //Target Profit pari all'ampiezza del patternENDIFIF Prezzo AND Not OnMarket THEN //Inserire l'ordine pendente ad ogni candelaBUY positionsize SHARES AT Prezzo STOPSET STOP LOSS StopLossSET TARGET PROFIT TargetProfitENDIFLa riga 8 puoi usarla al posto della 7 per avere la certezza che la posizione minima sia 1.
-
AuthorPosts