backtrader-dimensione-posizione-Forex

Dimensionare una posizione Forex con Backtrader

In questo articolo descriviamo come implementare il codice per dimensionare una posizione Forex con Backtrader. Questo codice ha richiesto un po’ più di tempo per capire come gestire correttamente il position sizing, quindi ho pensato che sarebbe stato  utile condividere i miei risultati.

Scopo

Lo scopo di questo codice è restituire la corretta dimensione della posizione in base alla percentuale di capitale che siamo disposti a rischiare e alla distanza dello stop loss dal prezzo corrente.

Da notare che il codice è progettato per il trading su Oanda dove non ci sono lotti minimi. Su Oanda posso effettuare ordini da 10, 105 o 2.810.245 unità invece di essere vincolato da step fissi di 1.000 (Microlotti), 10.000 (Minilotti) o 100.000 (lotti interi) e così via. Questo è ottimale per chi ha account di piccole dimensioni.

Se vogliamo utilizzare questo codice con i vincoli di dimensioni minime del lotto, dobbiamo aggiungere un codice per arrotondare le unità al lotto minimo più vicino.

Requisiti

Questo script utilizza il framework di backtesting Backtrader, dove possiamo ricavare l’attuale capitale nel conto di trading tramite le chiamata alla seguente funzione:

				
					self.broker.getvalue()
				
			
Inoltre, lo script potrebbe essere ottimizzato in modo da includere un parametro in input per il valore del capitale nell’account del broker. In questo modo possiamo usare il codice all’interno di altri framework python. Se sei nuovo di backtrader o di Python in generale, questo potrebbe non essere l’articolo che fa per te. Per prima cosa dai un’occhiata a Backtrader: Primo Script o Setup di base per Python e BackTrader per contenuti più generali ed introduttivi.
 

Il codice

Senza ulteriori indugi, di seguito il codice che implementa come dimensionare una posizione Forex con Backtrader, completo di alcuni commenti:
				
					
def size_position(self, price, stop, risk, method=0, exchange_rate=None, JPY_pair=False):
    '''   
    Funzione di supporto per calcolare la dimensione della posizione 
    data una quantità nota di rischio.

    *Args*
    - price: Float, il prezzo corrente dello strumento
    - stop: Float, livello di prezzo dello stop loss
    - risk: Float, l'ammontare del capitale da rischiare

    *Kwarg*
    - JPY_pair: Bool, se lo strumento negoziato fa parte di una coppia JPY. Il moltiplicatore
     utilizzato per i calcoli verrà modificato di conseguenza.
    - method: Int,
        - 0: la valuta Acc e la controvaluta coincidono
        - 1: la valuta Acc è la stessa della valuta di base
        - 2: la valuta Acc non è la stessa della valuta di base o della controvaluta
    - exchange_rate: Float, è il tasso di cambio tra la valuta del conto e la controvaluta. 
      Obbligatorio per il metodo 2.
    '''

    if JPY_pair == True:  # Controllo se il cross contiene lo YEN e quindi modificare il multiplicatore
        multiplier = 0.01
    else:
        multiplier = 0.0001

    # Calcolo della quantità da rischiare
    acc_value = self.broker.getvalue()
    cash_risk = acc_value * risk
    stop_pips_int = abs((price - stop) / multiplier)
    pip_value = cash_risk / stop_pips_int

    if method == 1:
        # pip_value = pip_value * price
        units = pip_value / multiplier
        return units

    elif method == 2:
        pip_value = pip_value * exchange_rate
        units = pip_value / multiplier
        return units

    else:  # se method=0
        units = pip_value / multiplier
        return units
				
			

Dimensionare una posizione Forex

Abbiamo implementato una funzione per calcolare il position sizing. Per rendere riutilizzabile questa funzione, abbiamo aggiunto una logica per le coppie giapponesi e la valuta di base del conto. È qui che entrano in gioco gli argomenti method, exchange_rate e JPY_pair. Per le coppie giapponesi, il valore in pip sulla coppia ha solo a 2 cifre decimali. Ciò influisce sul moltiplicatore utilizzato nei calcoli.

La considerazione successiva è la valuta del conto. A seconda di quale sia la valuta del conto e di quali coppie si sta negoziando, abbiamo un effetto sul calcolo. Di seguito sono riportati esempi sulla logica di calcolo del valore dei pip. Questi esempi sono utili per capire il calcolo dei pip in modo da poter poi capire come calcolare la dimensione della posizione richiesta (unità).

Calcolo del valore del pip

  • Scenario 1: se la valuta del conto è la stessa della controvaluta (ad es. un conto in USD che scambia EUR/USD), il calcolo è il più semplice. La posizione è il valore del trade diviso per il moltiplicatore.
valore pip = dimensione posizione * moltiplicatore
valore pip = 10.000 * 0,0001
valore pip = 1 USD
 
  • Scenario 2: quando la valuta del conto è la valuta di quotazione. (Es. Un conto in EUR che scambia EUR/USD) dobbiamo aggiungere un passaggio in più.
valore pip = (dimensione posizione / prezzo corrente) * moltiplicatore
valore pip = (10.000 / 1,1950) * 0,0001
valore pip = 0,84 EUR
 
  • Scenario 3: nel caso dove la valuta del conto non è presente nelle coppie del cross (ad esempio un conto in EUR che negozia USD/JPY) dobbiamo ottenere il tasso di cambio tra la valuta del conto e la controvaluta. Una volta ottenuto il valore in pip, lo dividiamo per il tasso di cambio (come nel secondo esempio, utilizzando il tasso di cambio della valuta del conto). Questo lo rende potenzialmente il più complicato da implementare in una strategia poiché dobbiamo monitorare una coppia di valute extra.
valore pip = dimensione posizione * moltiplicatore
valore pip = 10.000 * 0,01
valore pip = 100 JPY
Valore pip = valore pip / tasso di cambio
Valore pip = 100 / 142,29
Valore pip = 0,70 EUR
 

Calcolo della dimensione della posizione

Come accennato in precedenza, conosciamo già il valore del pip target che vogliamo avere. È l’importo che siamo disposti a rischiare diviso per il numero di pip a cui abbiamo impostato lo stop. per esempio
 
valore pip = capitale a rischio / numero di pip per  lo stop loss
valore pip = $ 100 / 50
valore pip = $2
 
Quindi, se conosciamo il nostro valore in pip, quello che vogliamo capire è la nostra dimensione…
 
Unità = valore pip / moltiplicatore
Unità = 2 / 0,0001
Unità = 20.000
 
Tuttavia, dobbiamo anche tenere conto della valuta del conto di base e della controvaluta. Questo non è diverso da quando calcoliamo il valore del pip. In questo caso, dove prima dividevamo per il prezzo corrente o il tasso di cambio, ora moltiplichiamo. Ecco un esempio.
 
valore pip = valore pip * tasso di cambio
Valore pip = 2 * 1,1950
Valore pip = 2,39
Unità = valore pip / moltiplicatore
Unità = 2,39 / 0,0001
Unità = 23.900
 
 

Codice completo

In questo articolo abbiamo descritto come dimensionare una posizione Forex con Backtrader. Per il codice completo riportato in questo articolo, si può consultare il seguente repository di github:
https://github.com/datatrading-info/BackTrader

Scroll to Top