Proprietà strategia

Ogni strategia Pine dispone di alcune proprietà specifiche che ne determinano il comportamento: 

  1. Capitale iniziale
  2. Valuta base
  3. Dimensione ordine
  4. Piramidare
  5. Commissione
  6. Verifica prezzo per ordini limite
  7. Slippage
  8. Margine
  9. Ricalcola

Sono tutte presenti nella sezione Proprietà delle impostazioni:


Ognuno dei parametri specificato nelle proprietà della strategia può essere modificato mettendo mano agli argomenti della funzione strategy() nello script Pine corrispondente:

strategy(title, initial_capital, currency, default_qty_value, default_qty_type, pyramiding, commission_type, commission_value, backtest_fill_limits_assumption, slippage, process_orders_on_close, margin_long, margin_short, calc_on_order_fills, calc_on_every_tick)

Analizziamo nel dettaglio i vari parametri menzionati:

1 - Capitale iniziale (parametro: initial_capital) rappresenta il bilancio di partenza della strategia, stabilito nella Valuta base. Di default, questo valore è uguale a 100.000, ma puoi cambiarlo nel caso in cui reputi più opportuno partire con un capitale maggiore / minore.

2 - Valuta base (parametro: currency) specifica la valuta da usare per i calcoli. I risultati che appaiono nella sezione Tester strategia (profitto, perdita, drawdown, ecc) sono espressi con tale unità di misura. Le valute disponibili sono:

Default, USD, EUR, AUD, GBP, NZD, CAD, CHF, HKD, JPY, NOK, SEK, SGD, TRY, ZAR. Selezionando l'opzione Default, la strategia utilizzerà la valuta predefinita per quello strumento finanziario, senza applicare alcuna conversione.

3 - Dimensione ordine (parametri: default_qty_value, default_qty_type). Richiede un valore ed un'unità di misura. Tieni a mente che i valori calcolati saranno comunque soggetti ad alcune limitazioni a seconda della minima quantità negoziabile per il simbolo in questione:

  • Contratti (argomento: strategy.fixed) - la strategia aprirà posizioni con quel numero di contratti/azioni/lotti.
  • Ammontare in valuta (argomento: strategy.cash) - la strategia aprirà posizioni il più vicino possibile a quel controvalore pecuniario, nella valuta base selezionata prima.
  • Percentuale di equity (argomento: strategy.percent_of_equity) - le dimensioni degli ordini saranno calcolate come percentuale dell'equity disponibile nel momento dell'apertura del trade.

4 - Piramidare (parametro: pyramiding) specifica il numero massimo di operazioni che possono essere aperte nello stesso lato (long/short) consecutivamente. Quando è disabilitato, la strategia può aprire al massimo una operazione per lato, anche se le condizioni vengono soddisfatte più di una volta. Questo parametro influenza solo le operazioni eseguite usando la funzione strategy.entry(). Non ha alcun effetto sugli ordini creati usando strategy.order().

5 - Commissione (parametri: commission_typecommission_value) rappresenta l'ammontare di commissioni da pagare per ogni operazione. Richiede un valore ed un'unità di misura. Tieni a mente che questo fattore si applica alle operazioni di entrata e di uscita allo stesso modo, e che quando si usa una percentuale l'importo sarà differenze a seconda dei costi della transazione:

  • Percentuale del transato (argomento: strategy.commission.percent) - imposta una commissione su ogni ordine pari ad una percentuale del volume d'acquisto o di vendita.
  • Valuta per contratto (argomento: strategy.commission.cash_per_contract) - imposta una commissione variabile sulla base del numero di contratti acquistati o venduti.
  • Valuta per ordine (argomento: strategy.commission.cash_per_order) - imposta una commissione fissa per ogni ordine.

6 - Verifica prezzo per ordini limite (parametro: backtest_fill_limits_assumption) rende le condizioni per aprire una posizione con ordine limite più stringenti. Di default, il valore è 0, ed implica che gli ordine limite sono eseguiti sullo storico delle barre non appena il prezzo indicato è raggiunto. Se invece il valore è diverso da 0, significa che l'ordine è eseguito solo se il prezzo di mercato ha superato la soglia di un certo numero di tick.

7 - Slippage (parametro: slippage) specifica il valore in tick da aggiungere al prezzo di esecuzione degli ordini a mercato o degli ordini stop. Viene usato per tenere conto dello spread.

8 - Margine per posizioni long e short (parametri: margin_long, margin_short) sta ad indicare il margine richiesto per mantenere una posizione, ovvero la percentuale della posizione che il trader deve coprire con il capitale. Se, ad esempio, il margine è fissato al 25%, il trader deve avere fondi liberi pari ad un quarto del valore di quella posizione. Di conseguenza, la perdita massima possibile equivale al 400% della propria equity per ogni singola operazione.

Se un'operazione viene aperta e va in perdita fino al punto in cui il capitale del trader non riesce più a coprire la posizione, si va incontro ad una Margin Call, con conseguente liquidazione della posizione. Il numero preciso di unità che saranno liquidate corrisponde a 4 volte l'ammontare necessario a coprire la perdita. Il calcolo esatto è il seguente:

1. Calcolo del capitale speso, ovvero l'ammontare di denaro che il trader ha speso per aprire la posizione.

Dimensione posizione * Prezzo d'entrata

2. Calcolo dell'MVS (Market Value of Security).

Dimensione posizione * Prezzo corrente

3. Calcolo per profitto corrente. Se l'operazione è short ed il profitto corrente è un numero positivo, il risultato dovrebbe comunque risultare negativo, quindi si moltiplica il valore assoluto per -1.

ABS(MVS - Capitale speso) * -1

4. Calcolo dell'equity, ovvero il denaro a disposizione del trader nel momento corrente.

Capitale iniziale + Profitto netto + Profitto corrente

5. Conversione percentuale margine a rapporto.

Percentuale margine / 100

6. Calcolo del margine, ovvero l'esatto valore di denaro necessario per coprire la posizione aperta.

MVS * Rapporto margine

7. Calcolo dei fondi disponibili, ovvero la perdita che il trader può sopportare con l'equity corrente.

Equity - Margine

8. Calcolo della quantità totale di denaro che il trader ha perso.

Fondi disponibili / Rapporto margine

9. Calcolo del numero di unità che il trader dovrebbe vendere per coprire la perdita. Il valore è troncato allo stesso decimale utilizzato per la dimensione minima del contratto per il simbolo corrente.

TRUNCATE(Step #8 / Prezzo corrente)

10. Calcolo del numero di unità che il broker dovrebbe vendere per coprire la perdita. Il nostro emulatore broker vende 4 volte la quantità di unità necessarie per assicurarsi che non ci siano troppe margin call una dietro l'altra. Questo valore è positivo per le operazioni short, dato che l'operazione di copertura prevederebbe l'acquisto (non la vendita) delle unità.

Step #9 * 4

Per esaminare questo calcolo nel dettaglio, proviamo ad aggiungere la strategia integrata Supertrend Strategy al grafico giornaliero di NASDAQ:TSLA. La Dimensione ordine corrisponde al 300% dell'equity, mentre il Margine per posizioni long equivale al 25%.

La prima entrata si verifica in apertura, nella barra del 16 Sett 2010: vengon comprate 682438 unità (Dimensione posizione) a 4.43 USD (Prezzo entrata). Poi il 23 Sett 2010, quando il prezzo raggiunge i 3.9 dollari (Prezzo corrente), vengono vendute 111052 unità a causa di una margin call.

1. Capitale speso: 682438 * 4.43 = 3023200.34

2. MVS: 682438 * 3.9 = 2661508.2

3. Profitto corrente: −361692.14

4. Equity: 1000000 + 0 − 361692.14 = 638307.86

5. Rapporto margine: 25 / 100 = 0.25

6. Margine: 2661508.2 * 0.25 = 665377.05

7. Fondi disponibili: 638307.86 - 665377.05 = -27069.19

8. Denaro perso: -27069.19 / 0.25 = -108276.76

9. Azioni per coprire la perdita: TRUNCATE(-108276.76 / 3.9) = TRUNCATE(-27763.27) = -27763

10. Dimensione margin call: -27763 * 4 = - 111052

9 - Ricalcola specifica in che modo la strategia debba essere ricalcolata. Di default, il ricalcolo avviene alla chiusura di ogni barra, ma ci sono alcune opzioni addizionali descritte qui sotto:

  • Dopo l'esecuzione dell'ordine (parametro: calc_on_order_fills). Consente alla strategia di effettuare un calcolo addizionale all'interno della barra subito dopo l'esecuzione dell'ordine. Avviene sia sulle barre storiche che su quelle in tempo reale.
  • Ad ogni tick (parametro: calc_on_every_tick). Di default, le strategie eseguono il calcolo alla chiusura delle barre in tempo reale. Questo parametro permette alla strategia di effettuare un calcolo ad ogni aggiornamento della barra in formazione. Tieni a mente però che i dati tick vengono persi non appena si aggiorna il grafico (poiché le barre vengono storicizzate), e questo causerà un repaint sulle barre formate prima del refresh (non su quelle che erano già storicizzate). Inoltre, considerando che le barre storiche non contengono i dati tick, i risultati non saranno realistici.