Sei sulla pagina 1di 96

Gli strumenti di programmazione di sistemi di trading ProRealTime permettono di

creare strategie di investimento che possono essere eseguite in backtest o con sistemi
automatici di trading.
Segui ProRealTime Programming su Google+ per le novit sul linguaggio di programmazione di ProRealTime.

V 5.1.1 20170303
SOMMARIO
Introduzione_____________________________________________________6
Accedere alla programmazione di sistemi di trading....................................................6
La finestra di creazione di sistemi di trading.................................................................7
Scorciatoie di tastiera....................................................................................................................8

La Programmazione di sistemi di trading______________________________9


Promemoria sulla programmazione ProBuilder............................................................9
Entrare e uscire dal mercato.........................................................................................................9
Gli Stop e Target..........................................................................................................12
Stop di protezione........................................................................................................................12
SET target profit...........................................................................................................................12
Trailing Stop.................................................................................................................................13
Uso di "Set Target" e "Set Stop" con istruzioni condizionali "IF".................................................13
Stop multipli e livelli di target.......................................................................................................14
Interrompere un sistema di trading con QUIT.............................................................17
Monitoraggio delle posizioni........................................................................................17
Variabili di stato delle posizioni....................................................................................................17
Grandezza delle variabili della posizione....................................................................................18
TradeIndex...................................................................................................................................18
TradePrice...................................................................................................................................18
PositionPerf.................................................................................................................................19
PositionPrice................................................................................................................................19
StrategyProfit...............................................................................................................................19
Definizione dei parametri di esecuzione di sistemi di trading.....................................20
Cumulo di ordini...........................................................................................................................20
PreLoadBars................................................................................................................................21
FlatBefore e FlatAfter..................................................................................................................22
NoCashUpdate (Backtest solamente).........................................................................................22
MinOrder and MaxOrder (backtest solamente)...........................................................................22
Richiamo d'indicatori...................................................................................................23
Indicatori ProRealTime................................................................................................................23
Indicatori personalizzati...............................................................................................................23
Suggerimenti per la programmazione.........................................................................23
Ridurre il numero di richiami agli indicatori ProRealTime............................................................23
Richiami d'indicatori personalizzati..............................................................................................24

ProBacktest Backtesting di sistemi di trading_______________________27


Money Management....................................................................................................28
Capitale iniziale...........................................................................................................................28
Brokeraggio: commissioni e gestione del rischio........................................................................28
Ottimizzazione delle variabili.......................................................................................30
Definizione del periodo di esecuzione del backtest....................................................32
Personalizzazione degli orari di trading per il backtest...............................................32
Ragioni di interruzione di un ProBacktest...................................................................34
Visualizzazione dei valori delle variabili backtest (a partire da ProRealTime v10.2)..35

Il metodo Walk Forward___________________________________________36


Esempio.......................................................................................................................36

AutoTrading ProOrder____________________________________________40
Preparate un sistema di trading per l'esecuzione automatica....................................41
Come iniziare un sistema di trading su ProOrder e controllarne i risultati..................43
Parametri del trading automatico e condizioni di esecuzione.....................................47
Parametri del sistema di trading..................................................................................................47
Stop automatico dei sistemi di trading.........................................................................................48
Coesistenza nella piattaforma del trading manuale e automatico..............................49
Sistemi di trading multipli in corso di esecuzione sullo stesso valore.........................50
Restrizioni per indicatori..............................................................................................51
Informazioni riguardanti il fuso orario e gli orari di trading personalizzati...................51

Allegato A: Risultati del sistema di trading___________________________52


Curva guadagni e perdite............................................................................................52
Grafico delle posizioni.................................................................................................53
Rapporto dettagliato....................................................................................................54

Allegato B: Esempi di codici dettagliati______________________________58


Sistema di trading basato su Heikin Ashi....................................................................................58
Sistema di trading basato sullo ZigZag.......................................................................................59
Sistema di trading Breakout Range con Trailing Stop.................................................................60
Sistema di trading basato sullo stocastico lisciato......................................................................61
Swing Trading, ADX e Media Mobile...........................................................................................62
Sistema di trading che utilizza un contatore di posizioni.............................................................63
Sistemi di trading che utilizzano TradeIndex Find inside bar...................................................64
Sistemi di money management...................................................................................65
Stop di protezione e Target..........................................................................................................65
Stop d'inattivit............................................................................................................................65
Cumulo di ordini Aggiunta di una posizione esistente con l'uso di un contatore di posizioni...66
La martingala classica.................................................................................................................67
La grande martingala...................................................................................................................68
La Piquemouche..........................................................................................................................69
La piramide d'Alembert................................................................................................................70
L'inverso d'Alembert....................................................................................................................71

Allegato C: esempio dettagliato di un sistema di trading________________72


Presentazione del sistema di trading automatico "Breakout ProOrder".....................73
Risultati del sistema di trading (storico dal 2008 al 2015)..........................................74
Descrizione delle idee del sistema di trading..............................................................75
Idea iniziale: il Breakout 30 minuti...............................................................................................75
Seconda idea: verranno prese al massimo due posizioni al giorno............................................76
Terza idea: limitare il rischio definendo uno scarto massimo tra i due livelli...............................77
Quarta idea: aumentare le possibilit di un'esecuzione favorevole............................................78
Quinta idea: intervenire unicamente sui breakouts (o rotture) definiti per evitare falsi segnali...79
Sesta idea: non prendere posizione se non rimane tempo sufficiente........................................80
Codice del sistema di trading "Breakout ProOrder"....................................................81
Come testare un codice / sistema di trading...............................................................83
Modalit portafoglio virtuale (PaperTrading)...............................................................................83
Modalit trading in tempo reale...................................................................................................83

Glossario_______________________________________________________84

Avvertimento: ProRealTime non propone servizi di consiglio su investimenti. Gli esempi presentati in
questo manuale sono a scopo pedagogico. Tutte le informazioni presenti sono a carattere generale e
non rappresentano in nessun caso informazioni o consulenze personalizzate o incitazioni a comprare
o vendere strumenti finanziari. Le performances passate non rappresentano previsioni per il futuro.
Ogni sistema di trading pu esporre a un rischio di perdite superiori all'investimento iniziale.
Introduzione alla programmazione dei sistemi di trading su ProRealTime v10

Questa versione del manuale di programmazione si applica a ProRealTime v10 e superiori.


Gli strumenti del sistema di trading su ProRealTime permettono di creare strategie dinvestimento
personalizzate via la programmazione o la creazione assistita (non richiesta programmazione). Questi
sistemi di trading possono essere eseguiti:
Come backtest per testarne le performance sui dati storici di un valore.
Come sistemi automatici di trading: gli ordini vengono passati in tempo reale da un trading o dal conto
di PaperTrading.
La programmazione dei sistemi di trading utilizza il linguaggio di programmazione ProBuilder che anche
usato per scrivere indicatori su ProRealTime ma prevede strumenti addizionali che si applicano solo alla
programmazione di sistemi di trading.
I programmi del sistema di trading includono istruzioni per prendere posizioni, impostare stop e la gestione
del rischio di ogni sistema di trading basato su condizioni personalizzate come:
Indicatori forniti con la piattaforma o indicatori che avete programmato voi stessi
Le performance passate del vostro sistema di trading
Gli ultimi ordini del vostro sistema di trading
I risultati di un sistema di trading vengono presentati sotto forma di:
Curva dei guadagni e perdite che mostra lo stato dei guadagni e perdite di un sistema su un particolare
strumento.
Istogramma delle posizioni che mostra le posizioni del sistema (barre verdi per le posizioni di acquisto e
barre rosse per le posizioni di vendita alla scoperto). Non viene mostrata nessuna barra se non ci sono
posizioni per un particolare periodo di tempo.
Rapporto dettagliato che indica le statistiche del vostro sistema per il valore, nel periodo di tempo in cui
stato backtestato o eseguito.

Con il backtest, si possono solo ottimizzare le variabili del vostro sistema di trading per vedere quali valori
danno i migliori risultati per il periodo di storico che state esaminando.

Nel trading automatico, gli ordini piazzati attraverso sistemi di trading appaiono nel vostro portafoglio e nella
lista degli ordini. Il portafoglio viene aggiornato con i guadagni e perdite fatte.

Questo manuale organizzato in questo modo: La prima parte spiega come accedere alle funzionalit di
creazione di sistemi di trading. La seconda parte presenta le istruzioni ProBuilder usate per programmare
sistemi. La terza parte spiega come backtestare sistemi di trading con ProBacktest. La quarta parte spiega
come eseguire un sistema di trading automaticamente. Gli allegati alla fine del manuale mostrano come
siano visualizzati i risultati dei sistemi di trading ed inoltre forniscono alcuni esempi di programmi oltre al
glossario del linguaggio ProBuilder.

Consigliamo agli utilizzatori principianti di guardare il video intitolato "Come impostare un Backtest in
pochi click".

Le idee espresse in questo manuale mirano ad insegnarvi come scrivere sistemi di trading e testare le vostre
proprie idee. Non si tratta in nessun caso di consigli in investimento.

Vi auguriamo un ottimo successo, buona lettura!

V 5.1.1 20170303 www.prorealtime.com 5 / 96


Introduzione

Introduzione
Accedere alla programmazione di sistemi di trading
La finestra di creazione di sistemi di trading disponible a partire dal tasto "Indicatori e Sistemi di Trading"
che si trova in alto a destra di ogni grafico della piattaforma.

Par default, la finestra di gestione si apre sulla linguetta "Indicatori". Posizionatevi sulla seconda linguetta
"Backtesting e Trading Automatico". Potrete quindi:
Accedere alla lista dei sistemi di trading esistenti (predefiniti o personalizzati)
Creare un nuovo sistema di trading, da applicare in seguito ad un valore qualsiasi
Modificare o cancellare un sistema di trading esistente
Importare o esportare sistemi di trading.

V 5.1.1 20170303 www.prorealtime.com 6 / 96


Introduzione

La finestra di creazione di sistemi di trading


La finestra di creazione di sistemi di trading composta da due zone principali:
La zona di creazione (assistita o per programmazione) nella parte sinistra della finestra.
La zona d'applicazione del sistema nella parte destra, che comprende la linguetta ProBacktest per
backtestare un sistema di trading e la linguetta AutoTrading ProOrder per eseguire automaticamente un
sistema di trading. L'impostazione del ProBacktest descritta nella sezione 3 di questo manuale.

La zona di creazione, vi permette di:


Programmare il sistema di trading usando zona di testo.
Utilizzare la funzione di aiuto "Inserisci funzione", che vi permette di aprire una nuova finestra con una lista di
istruzioni di ProBuilder e sistemi di trading suddivisi in diverse categorie per aiutarvi durante la programmazione.
Ritroverete ugualmente testi d'aiuto legati all'istruzione o funzione selezionata nella parte bassa della finestra.

V 5.1.1 20170303 www.prorealtime.com 7 / 96


Introduzione

Esempio:
Utilizziamo la biblioteca delle funzioni cliccando su "Inserisci funzione".
Andate alla sezione "Comandi del sistema di trading" e cliccate su "BUY", poi cliccate sul tasto "Aggiungi". Il
comando verr aggiunto alla zona di programmazione.

Proviamo quindi a creare una linea intera di codice. Supponiamo per esempio di voler acquistare 10 titoli a
prezzo di mercato.
Procedete come sopra per recuperare nell'ordine le istruzioni "SHARES", "AT" e "MARKET" (separate ogni
parola con uno spazio). Indicate tra "BUY" e "SHARES" il numero da comprare (10).
Otterrete quindi l'istruzione "BUY 10 SHARES AT MARKET" che ordina l'acquisto di 10 titoli, lotti o contratti
a prezzo di mercato. La seguente sezione presenta tutte le istruzioni disponibili per la programmazione di
sistemi di trading.
Per vedere alcuni esempi di sistemi di trading completi, consulta l'Allegato B alla fine del manuale.

Scorciatoie di tastiera
La finestra di creazione del sistema di trading ha un serie di funzionalit a cui possibile accedere dalle
scorciatoie di tastiera a partire della versione 10 di ProRealTime:
Seleziona tutto (Ctrl + A): Seleziona tutto il testo nella finestra programmazione
Copia (Ctrl + C): Copia il testo selezionato
Incolla (Ctrl +X): Incolla il testo copiato
Annulla (Ctrl + Z): Annulla l'ultima azione nella finestra programmazione
Ripristina (Ctrl + Y): Ripristina l'ultima azione nella finestra programmazione
Trova / Sostituisci (Ctrl + F): Trova un testo nella finestra programmazione / sostituisci un testo nella
finestra programmazione (questa funzionalit minuscola maiuscola)
Commenta / Decommenta (Ctrl + R): Commenta il codice selezionato / Decommenta il codice
selezionato (il codice commentato sar preceduto da "//" o "REM" e di colore grigio. Sar preso in
considerazione quando il codice eseguito).
Per gli utenti Mac, la stessa scorciatoia di tastiera puo' essere accessibile con il tasto "Apple" al posto del
tasto "Ctrl". La maggior parte di queste funzionalit possono essere accessibili con un clic destro nella
finestra di programmazione.

V 5.1.1 20170303 www.prorealtime.com 8 / 96


La Programmazione di sistemi di trading

La Programmazione di sistemi di trading

Avvertimento: Gli esempi presentati in questo manuale sono a scopo pedagogico. Tutte le
informazioni presenti sono a carattere generale e non rappresentano in nessun caso informazioni o
consulenze personalizzate o incitazioni a comprare o vendere strumenti finanziari. Le performances
passate non rappresentano previsioni per il futuro. Ogni sistema di trading pu esporre a un rischio di
perdite superiori all'investimento iniziale.

Promemoria sulla programmazione ProBuilder


Vi consigliamo di leggere il manuale di programmazione ProBuilder consacrato alla programmazione di
indicatori. Questa sezione elenca le istruzioni che sono specifiche dei sistemi di trading.
ProBuilder il linguaggio di programmazione usato nella piattaforma. Questo linguaggio molto semplice da
utilizzare e offre molte possibilit. E' basato sui seguenti principi:
L'unit di base la candela e l'unit di tempo la stessa di quella del grafico sottostante.
I calcoli sono dati alla fine di ogni barra. I programmi di ProBuilder che includono sistemi di trading e
tutte le loro funzioni sono valutati alla fine di ogni barra dall'inizio alla fine.
Tutte le istruzioni per piazzare ordini sono attivate dopo che i calcoli sulla candela corrente sono
terminati (ossia gli ordini saranno eseguiti all'apertura della candela successiva).

Entrare e uscire dal mercato


E' necessario differenziare le istruzioni a seconda del tipo di posizione:
Posizioni lunghe:
BUY istruzione di acquisto dei titoli (entrata long)
SELL istruzione di vendita di titoli acquistati (uscita long)
L'istruzione BUY permette di aprire (o rinforzare) una posizione lunga sul mercato. E' associata all'istruzione
SELL che permette di chiudere o chiudere parzialmente una posizione. L'istruzione SELL non ha nessun
effetto se non c' nessuna posizione lunga aperta.
Posizioni corte:
SELLSHORT istruzione di ventita allo scoperto di titoli (entrata short)
EXITSHORT istruzione di riacquisto di titoli venduti allo scoperto (uscita short)
Queste due istruzioni funzionano in maniera simmetrica con BUY e SELL. L'istruzione EXITSHORT non ha
nessun effetto se non c' nessuna posizione corta aperta.

Non possibile prendere una posizione lunga e corta allo stesso tempo sullo stesso titolo. In pratica, cio'
significa che anche possibile chiudere una posizione lunga con l'istruzione SELLSHORT o chiudere una
posizione corta con l'istruzione BUY.

Nota bene: Pensate a verificare la grandezza massima della posizione che avete definito nella sezione
Impegno sul Mercato per il ProBacktest o su ProOrder per i sistemi di trading automatici. Se provate a
piazzare un ordine per un importo pi importante della grandezza massima della posizione autorizzata,
l'ordine sar rigettato e la vostra posizione originale sar mantenuta.

Ognuno di questi comandi puo' essere seguito dagli elementi seguenti, che verranno descritti qui di seguito:
<Ordine> <Quantit> AT <tipo>
Esempio:
BUY 1000 CASH AT MARKET o SELL 1 SHARE AT 1.56 LIMIT

V 5.1.1 20170303 www.prorealtime.com 9 / 96


La Programmazione di sistemi di trading

Quantit
Esistono 2 modi per definire la quantit:
SHARES che corrisponde ad un'unit dello strumento: "1 Share" puo' rappresentare 1 azione, 1
contratto futures, o un contratto Forex. SHARES possono essere utilizzati indifferentemente con SHARE,
CONTRACTS, LOT o LOTS su tutti i tipi di strumenti. Nel caso del Forex, la quantit comprata sar
moltiplicata per la grandezza di un lotto. Se la quantit non indicata, vengono usati i seguenti valori
predefiniti:
1 unit per una posizione di entrata (Es : BUY AT MARKET, acquista una quantit di "1" a prezzo di
mercato)
L'intera quantit di una posizione per un'uscita (Es : SELL AT MARKET vende l'intera posizione
lunga)
CASH corrisponde all'importo effettivo (come o $) e quest'istruzione puo' essere usata unicamente
per acquistare o vendere azioni. La quantit dell'ordine sar calcolata durante la chiusura della barra e
arrotondata per default all'unit inferiore. Le spese di intermediazione non sono prese in considerazione
nel calcolo della quantit corrispondente all'importo da comprare o vendere.
Esempio: BUY 1000 CASH AT MARKET
E' possibile utilizzare l'istruzione ROUNDEDUP per arrotondare questa quantit all'unit superiore.
Esempio: BUY 1000 CASH ROUNDEDUP AT MARKET

Tipo
Sono a vostra disposizione tre modi di esecuzione d'ordini:
AT MARKET: Lordine sar passato al prezzo di mercato all'apertura della barra successiva.
Esempio: BUY 1 SHARE AT MARKET

AT <price> LIMIT: Un ordine limite sar posizionato al prezzo indicato


AT <price> STOP: Un ordine stop sar posizionato al prezzo indicato
Esempio: BUY 1 SHARE AT 10.5 LIMIT

Gli ordini limite e stop con livelli specifici sono validi per la durata di una barra a partire dall'apertura
della barra successiva. Sono quindi annullati se non eseguiti.

Questi ordini sono diversi dagli ordini protezione stop e target (v. sezione successiva) che sono legati ad una
posizione aperta e valida fino alla chiusura di questa posizione.

Alcuni ordini possono essere trattati come ordini a mercato nelle seguenti condizioni:
Nel caso di un ordine d'acquisto (BUY), se il prezzo del limite superiore al prezzo di mercato, l'ordine
sar trattato come un ordine a mercato.
Nel caso di un ordine d'acquisto (BUY), se il prezzo dello STOP inferiore al prezzo di mercato, l'ordine
sar trattato come un ordine a mercato.
Nel caso di un ordine di vendita allo scoperto (SELLSHORT), se il prezzo del LIMITE inferiore al
prezzo di mercato, l'ordine sar trattato come un ordine a mercato.
Nel caso di un ordine di vendita allo scoperto (SELLSHORT), se il prezzo dello STOP superiore al
prezzo di mercato, l'ordine sar trattato come un ordine a mercato.

V 5.1.1 20170303 www.prorealtime.com 10 / 96


La Programmazione di sistemi di trading

Esempio:
Se RSI in zona d'ipervendita (RSI < 30) e il prezzo sotto la banda di Bollinger inferiore, allora
acquistiamo un'azione al prezzo di mercato.
Se RSI in zona d'iperacquisto (RSI > 70) e il prezzo superiore alla banda di Bollinger, allora vendiamo.

MyRSI = RSI[14](Close)
MyBollingerDown = BollingerDown[25](Close)
MyBollingerUp = BollingerUp[25](Close)

IF MyRSI < 30 AND Close < MyBollingerDown THEN


BUY 1 SHARE AT MARKET
ENDIF
IF MyRSI > 70 AND Close > MyBollingerUp THEN
SELL AT MARKET
ENDIF

Puoi impostare la durata della validit degli ordini limite e stop.

Il seguente esempio mostra come sia possibile creare un ordine limite con una validit impostata su un
numero specifico di barre usando le variabili. Il codice piazza un ordine di acquisto limite al prezzo di
chiusura della barra sulla quale avviene un incrocio di una media mobile. L'ordine limite resta valido per 10
barre dopo l'incrocio. Se non viene eseguito durante questo periodo, sar annulato.

Esempio:
// Definizione della durata di validit dell'ordine
ONCE NbBarLimit = 10

MM20 = Average[20](close)
MM50 = Average[50](close)
// Se la MM20 incrocia al rialzo la MM50, definiamo 2 variabili "MyLimitBuy" e "MyIndex"
che contengono il prezzo di chiusura attuale e l'indice della barra dell'incrocio.
IF MM20 CROSSES OVER MM50 THEN
MyLimitBuy = close
MyIndex = Barindex
ENDIF

IF BarIndex >= MyIndex + NbBarLimit THEN


MyLimitBuy = 0
ENDIF
// Piazza un ordine al prezzo corrispondente di MyLimitBuy valido fino a che questa
variabile superiore a 0 e che non siamo in posizione long
// Richiamo : MyLimitBuy superiore a 0 durante le 10 barre che seguono.
IF MyLimitBuy > 0 AND NOT LongOnMarket THEN
BUY 1 SHARES AT MyLimitBuy LIMIT
ENDIF

Se l'ordine non eseguito, possibile sostituire l'ordine di acquisto limite scaduto con un ordine di acquisto
a mercato. Questo sar possibile aggiungendo il seguente codice al precedente:
IF MyIndex + NbBarLimit AND MyLimitBuy > 0 AND NOT LongOnMarket THEN
BUY 1 SHARES AT MARKET
ENDIF

V 5.1.1 20170303 www.prorealtime.com 11 / 96


La Programmazione di sistemi di trading

Gli Stop e Target


ProBuilder vi permette ugualmente di definire dei target e stop di protezione. La sintassi da utilizzare la seguente:
SET STOP <tipo> <valore> o SET TARGET <tipo> <valore>
Esempio:
SET STOP %LOSS 2 // Impostate uno stop loss del 2%
Ogni istruzione descritta nei paragrafi seguenti.

Attenzione a ben utilizzare le istruzioni STOP:

AT <prezzo> STOP, serve per entrare in una posizione. Quest'ordine valido per una barra.
SET STOP LOSS <prezzo>, uno stop di protezione usato per uscire dalla posizione.
Quest'ordine valido fino alla chiusura della posizione.

Stop di protezione
Gli stop di protezione permettono di limitare le perdite di una posizione. Possono essere definiti in termini
relativi o assoluti:
SET STOP LOSS x: La posizione sar chiusa non appena la perdita sar a x unit del prezzo di entrata in posizione.
SET STOP pLOSS x: La posizione sar chiusa non appena la perdita sar a x punti del prezzo di entrata in posizione.
SET STOP %LOSS x: La posizione sar chiusa non appena la perdita raggiunger x%, spese di
intermediazione non incluse.
SET STOP $LOSS x: La posizione sar chiusa non appena la perdita raggiunger x ,$ (nella valuta dello
strumento), spese di intermediazione non incluse.

La quantit e direzione (uscire dalla posizione lunga o corta) dell'ordine stop di protezione sono
automaticamente adattate al tipo di posizione aperta. Gli stop di protezione sono collegati ad una posizione.
Se non c' una posizione aperta, gli stop loss non saranno attivati.

Per disattivare uno Stop loss nel codice, bisogna utilizzare la seguente istruzione:
SET STOP LOSS 0, SET STOP pLOSS 0, SET STOP %LOSS 0, SET STOP $LOSS 0

SET target profit


Quest'istruzione permette di uscire dalla posizione quando i guadagni raggiungono un certo valore.
SET TARGET PROFIT x: La posizione sar chiusa non appena il guadagno sar a x unit del prezzo di
entrata in posizione.
SET TARGET pPROFIT x: La posizione sar chiusa non appena il guadagno sar a x punti del prezzo di
entrata in posizione.
SET TARGET %PROFIT x: La posizione sar chiusa non appena il guadagno raggiunger x%, spese di
intermediazione non incluse.
SET TARGET $PROFIT x: La posizione sar chiusa non appena il guadagno raggiunger x ,$ (valuta dello
strumento)

La quantit e la direzione del profit target sono automaticamente adattate al tipo di posizione aperta in corso.
Tutti i profit target sono collegati alla posizione. Se non c' una posizione aperta, l'ordine profit target non attivo.

Per disattivare un profit target nel codice, puo' essere usata la seguente istruzione:
SET TARGET PROFIT 0, SET TARGET pPROFIT 0, SET TARGET %PROFIT 0, SET TARGET $PROFIT 0

V 5.1.1 20170303 www.prorealtime.com 12 / 96


La Programmazione di sistemi di trading

Trailing Stop
Un trailing stop un ordine stop il cui prezzo cambia in funzione dell'evoluzione del prezzo. Per delle
posizioni lunghe, quando il prezzo aumenta, il livello di trailing stop aumenta, ma se il prezzo diminuisce, il
livello del trailing stop rimane costante. I trailing stop su posizioni corte funzionano in modo contrario: quando
il prezzo diminuisce, il livello di trailing stop diminuisce, ma se il prezzo aumenta, il livello del trailing stop
rimane costante.
Sulla base dello stesso principio che regola gli stop di protezione, i trailing stop possono essere definiti in
termini relativi o assoluti:

SET STOP TRAILING y: Impostate un trailing stop di y unit dalla posizione del prezzo di entrata
SET STOP pTRAILING y: Impostate un trailing stop di y punti dalla posizione del prezzo di entrata
SET STOP %TRAILING y: Impostate un trailing stop di y% dalla posizione del prezzo di entrata,
commissioni non incluse
SET STOP $TRAILING y: Impostate un trailing stop di y ,$ (valuta dello strumento) dalla posizione del
prezzo di entrata, commissioni non incluse

La quantit e la direzione (uscire dalla posizione lunga o corta) dell'ordine trailing stop sono
automaticamente adattate al tipo di posizione aperta in corso. Tutti i trailing stop sono collegati ad una
posizione. Se non c' una posizione aperta, il trailing stop non attivo.
Se la quantit della posizione cambia, il livello di stop viene azzerata.

Per disattivare un trailing stop nel codice, puo' essere usata la seguente istruzione:
SET STOP TRAILING 0, SET STOP pTRAILING 0, SET STOP %TRAILING 0, SET STOP $TRAILING 0

Esempio:
Viene presa una posizione lunga sul DAX a 6000 punti e posizionate un trailing stop a 50 punti:
SET STOP pTRAILING 50

Lo stop inizialmente posizionato a 5950. Se il prezzo aumenta fino a 6010 poi scende fino a 5980, lo stop
aumenter di 10 punti fino a 5960 e rester bloccato fino a che il prezzo superer 6010. Sar quindi attivato
se il prezzo raggiunge 5960.

Uso di "Set Target" e "Set Stop" con istruzioni condizionali "IF"


E' possibile cambiare il tipo di target o stop impostati nel vostro codice sulla base di condizioni
personalizzate usando le istruzioni condizionali if.

Esempio:
REM Usate uno stop loss di 10% se il guadagno del trade precedente era almeno 10%,
altrimenti usate uno stop loss di 5%.
IF PositionPerf(1) > 0.1 THEN
SET STOP %LOSS 10
ELSE
SET STOP %LOSS 5
ENDIF

V 5.1.1 20170303 www.prorealtime.com 13 / 96


La Programmazione di sistemi di trading

Stop multipli e livelli di target


In circostanze normali, puo' essere attivata soltanto un'istruzione alla volta "Set Stop" e una "Set Target". Se
ci sono istruzioni successive "Set Stop" o "Set Target" in un codice, l'ultima istruzione sostituir l'istruzione
precedente.

Esempio:
SET STOP %LOSS 10 // Impostate uno stop loss di 10%
SET TARGET PROFIT 50 // Impostate un profit target di 50 unit
SET TARGET %PROFIT 5 // Rimuovete il target precedente di 50 unit e sostituitelo con un
profit target di 5%
SET STOP %TRAILING 2 // Rimuovete il precedente stop loss di 10% e sostituitelo con un
trailing stop di 2%

Tuttavia, ugualmente possibile combinare stop e trailing stop fissati o stop loss e trailing stop con una
singola istruzione mostrata qui sotto:

SET STOP <Mode> <value> <TrailingType> <value>


fissato trailing

Mode: Loss, pLOSS, %LOSS, $LOSS


TrailingType: TRAILING, p TRAILING, %TRAILING, $TRAILING

Quest'istruzione si presenter quindi in questo modo:


SET STOP [LOSS/pLOSS/$LOSS/%LOSS] <value> [TRAILING/pTRAILING/$TRAILING/%TRAILING] <value>

Esempi di utilizzo:

SET STOP LOSS x TRAILING y: Uno stop loss piazzato a x unit dal prezzo medio della posizione e
diventa un trailing stop di y unit non appena il prezzo corrente varia favorevolmente d'almeno (y-x).

SET STOP LOSS x pTRAILING y: Uno stop loss piazzato a x unit dal prezzo medio della posizione e
diventa un trailing stop di y unit non appena il prezzo corrente varia favorevolmente d'almeno (y-x).

SET STOP LOSS x $TRAILING y: Uno stop loss piazzato a x unit dal prezzo medio della posizione e
diventa un trailing stop di y $ o (valuta dello strumento) se il livello di trailing stop diventa pi vicino al
prezzo corrente che al livello di stop loss.

SET STOP LOSS x %TRAILING y: Uno stop loss piazzato a x unit dal prezzo medio della posizione e
diventa un trailing stop di y% se il livello di trailing stop diventa pi vicino al prezzo corrente che al livello di
stop loss iniziale.

V 5.1.1 20170303 www.prorealtime.com 14 / 96


La Programmazione di sistemi di trading

SET STOP pLOSS x TRAILING y: Uno stop loss piazzato a x punti dal prezzo medio della protezione e
diventa un trailing stop di y unit se il livello di trailing stop diventa pi vicino al prezzo corrente che al livello
di stop loss iniziale.
SET STOP pLOSS x pTRAILING y: Uno stop loss piazzato a x punti dal prezzo medio della protezione e
diventa un trailing stop di y unit se il livello di trailing stop diventa pi vicino al prezzo corrente che al livello
di stop loss iniziale.
SET STOP pLOSS x $TRAILING y: Uno stop loss piazzato a x punti dal prezzo medio della posizione e
diventa un trailing stop di y unit non appena il prezzo corrente varia favorevolmente d'almeno (y-x).
SET STOP pLOSS x %TRAILING y: Uno stop loss piazzato a x punti dal prezzo medio della posizione e
diventa un trailing stop di y% se il livello di trailing stop diventa pi vicino al prezzo corrente che al livello di
stop loss iniziale.

SET STOP $LOSS x TRAILING y: Uno stop loss piazzato a x $ o (valuta dello strumento) dal prezzo
medio della protezione e diventa un trailing stop di y unit se il livello di trailing stop diventa pi vicino al
prezzo corrente che al livello di stop loss iniziale.
SET STOP $LOSS x pTRAILING y: Uno stop loss piazzato a x $ o (valuta dello strumento) dal prezzo
medio della protezione e diventa un trailing stop di y unit se il livello di trailing stop diventa pi vicino al
prezzo corrente che al livello di stop loss iniziale.
SET STOP $LOSS x $TRAILING y: Uno stop loss piazzato a x $ o (valuta dello strumento) dal prezzo
medio della posizione e diventa un trailing stop di y unit non appena il prezzo corrente varia favorevolmente
d'almeno (y-x).
SET STOP $LOSS x %TRAILING y: Uno stop loss piazzato a x $ o (valuta dello strumento) dal prezzo
medio della posizione e diventa un trailing stop di y% se il livello di trailing stop diventa pi vicino al prezzo
corrente che al livello di stop loss iniziale.

SET STOP %LOSS x TRAILING y: Uno stop loss di x% piazzato e diventa un trailing stop di y unit se il
livello di trailing stop diventa pi vicino al prezzo corrente che al livello di stop loss.
SET STOP %LOSS x pTRAILING y: Uno stop loss di x% piazzato e diventa un trailing stop di y punti se il
livello di trailing stop diventa pi vicino al prezzo corrente che al livello di stop loss.
SET STOP %LOSS x $TRAILING y: Uno stop loss di x% piazzato e diventa un trailing stop di y $ o (valuta
dello strumento) se il livello di trailing stop diventa pi vicino al prezzo corrente che al livello di stop loss.
SET STOP %LOSS x %TRAILING y: Uno stop loss di x% piazzato e diventa un trailing stop di y% se il livello
di trailing stop diventa pi vicino al prezzo corrente che al livello di stop loss.

V 5.1.1 20170303 www.prorealtime.com 15 / 96


La Programmazione di sistemi di trading

Esempio:
SET STOP LOSS x TRAILING y:
Uno stop viene piazzato a x unit del prezzo di entrata della posizione e diventa un trailing stop di y unit se il
livello del trailing stop diventa pi vicino al prezzo corrente che al livello di stop loss.
Per esempio, se entrate una posizione lunga sul future DAX a 6500, il seguente codice piazza uno stop loss a
20 unit del prezzo di entrata della posizione che diventa un trailing stop di 50 unit se il prezzo supera 6530.
SET STOP LOSS 20 TRAILING 50

L'immagine seguente illustra l'esempio:


Lo stop iniziale piazzato ad un livello fisso di 20 unit sotto il prezzo di apertura della posizione (6480).

Solo se il prezzo raggiunge 6530 (=6500 + (50-20) ), lo stop diventa un trailing stop di 50 unit.

Se il prezzo aumenta a 6535, come mostrato dall'immagine qui sopra, il trailing stop prender il valore di
6485.

V 5.1.1 20170303 www.prorealtime.com 16 / 96


La Programmazione di sistemi di trading

Informazioni sull'utilizzo dei punti o unit per la distanza di stop e limiti


Il valore di un punto pu variare a seconda del tipo di strumento che seguiamo, mentre il valore dell'unit
(variazione di un'unit sul grafico) rimane invariato. A seconda del codice e degli strumenti a cui viene
applicato possibile scegliere di misurare la distanza in punti o in unit.

Esempio:
Sull'EuroDollaro (EUR/USD), 1 punto=0.0001 unit sul grafico
Sui futures indici (DAX, FCE), 1 punto=1 unit sul grafico
Sui futures sui tassi di interesse europei,1 punto=0.01 unit sul grafico

Interrompere un sistema di trading con QUIT


L'istruzione QUIT permette di interrompere un sistema di trading. Lo stop si verifica dopo la barra
corrente. Gli ordini in attesa sono poi cancellati e tutte le posizioni aperte sono chiuse. Questo vi permette di
interrompere un sistema di trading nel caso di perdite alte o dopo una certa data per esempio.

Esempio:
IF Date > 20130101 THEN // Interrompi la strategia dopo il 1 Gennaio 2013
QUIT
ENDIF

Monitoraggio delle posizioni

Variabili di stato delle posizioni


Le 3 variabili che permettono di verificare lo stato dei vostri sistemi di trading sono le seguenti:
ONMARKET: vale 1 se avete delle posizioni aperte, altrimenti 0
LONGONMARKET: vale 1 se avete delle posizioni lunghe aperte, altrimenti 0
SHORTONMARKET: vale 1 se avete delle posizioni corte aperte, altrimenti 0

Possono essere utilizzati con delle parentesi quadre.


Per esempio, ONMARKET[1] vale 1 se avete una posizione aperta alla chiusura della barra precedente,
altrimenti 0.

Queste variabili sono abitualmente introdotte con le istruzioni IF prima di un'entrata in posizione:

Esempio:
REM Definite il MACD
Indicator1 = MACD[12,26,9](Close)
REM Osservate gli incroci dell'istogramma MACD
c1 = (Indicator1 CROSSES OVER 0)
REM Acquisto : Se non si in posizione lunga e se MACD >0 , comprate 3 lotti
IF NOT LONGONMARKET AND c1 THEN
BUY 3 SHARES AT MARKET
ENDIF

V 5.1.1 20170303 www.prorealtime.com 17 / 96


La Programmazione di sistemi di trading

Grandezza delle variabili della posizione


Queste 3 variabili permettono di conoscere la quantit di una posizione aperta:
COUNTOFPOSITION: grandezza della posizione (in lotti, titoli o contratti...). Positivo se posizione lunga
aperta, negativo se posizione corta aperta.
COUNTOFLONGSHARES: grandezza di una posizione lunga (in lotti, titoli o contratti...) se c' una posizione
lunga aperta, altrimenti 0.
COUNTOFSHORTSHARES: grandezza di una posizione corta (in lotti, titoli o contratti...) se c' posizione
corta aperta, altrimenti 0.
Queste variabili sono spesso introdotte con le istruzioni IF prima di un'entrata in posizione.

Attenzione a ben utilizzare queste variabili di stato : Il codice viene valutato alla fine di ogni
barra, e gli ordini sono piazzati all'apertura della barra successiva.Per esempio, nel successivo
blocco di codice, la variabile "long" non sar uguale a 1 alla chiusura della prima candela, ma
solamente alla chiusura della seconda candela poich il primo ordine d'acquisto passato
all'apertura della seconda candela.
BUY 1 SHARE AT MARKET
IF LONGONMARKET THEN
long = 1
ENDIF

TradeIndex
Il comando TRADEINDEX(n) consente di accedere alla barra dell'ennesimo ordine precedente eseguito:
TRADEINDEX(n-simo ordine precedente)
Nota bene: E' possibile usare TradeIndex senza un numero tra le parentesi. In questo caso, il programma
considerer la barra dell'ultimo ordine eseguito: TradeIndex=TradeIndex(1).
TradeIndex spesso usato unitamente a Barindex.
Esempio:
REM: Chiudete una posizione lunga se stata aperta da almeno 3 barre:
IF LONGONMARKET AND (BarIndex - TradeIndex) >= 3 THEN
SELL AT MARKET
ENDIF

TradePrice
Il comando TRADEPRICE(n) permette di trovare il prezzo della transazione precedentemente eseguita.
La sua sintassi la seguente:
TRADEPRICE(n-simo ordine precedente)
Se n non specificato, il prezzo dell'ultimo ordine eseguito : TradePrice=TradePrice(1)

Esempio:
REM: Chiudete una posizione lunga se il prezzo superiore al prezzo dell'ordine precedente
maggiorato di 2%
IF LONGONMARKET AND CLOSE > 1.02 * TRADEPRICE THEN
SELL AT MARKET
ENDIF

V 5.1.1 20170303 www.prorealtime.com 18 / 96


La Programmazione di sistemi di trading

PositionPerf
Il comando POSITIONPERF(n) restituisce:
La performance in % dell'ennesima ultima posizione chiusa, se n>0 (commissioni non incluse)
La performance in % della posizione aperta in corso, se n=0 (commissioni non incluse)
La sintassi la seguente:
POSITIONPERF(n-sima posizione precedente)
Se n non indicato, si suppone n=0: PositionPerf=PositionPerf(0)

Esempio:
REM Acquista se il trade precedente ha fatto almeno 20% di guadagni
IF NOT ONMARKET AND PositionPerf(1) > 0.2 THEN
BUY 1000 CASH AT MARKET
ENDIF

PositionPrice
Il comando PositionPrice permette di conoscere il prezzo medio di acquisto della posizione aperta in corso.
POSITIONPRICE
Viene calcolato come la somma di tutti i prezzi di entrata ponderati dalla quantit di ogni ordine. Solo
aggiungendo ad una posizione, cambier il valore del PositionPrice.
Quest'istruzione puo' essere utilizzata con delle parentesi quadre: POSITIONPRICE[1] restituisce il valore
della PositionPrice alla chiusura della barra precedente.
Esempio:
Acquistate un'azione a 5, poi rinforzate la vostra posizione riacquistando un'azione a 10, poi un'altra a
15. PositionPrice sarebbe quindi uguale a: (5+10+15) / 3 = 10
Se poi vendete un'azione al prezzo di 20. PositionPrice sar ancora uguale 10 (resta invariato).

StrategyProfit
Quest'istruzione restituisce i guadagni o le perdite (assolute, nella valuta dello strumento e commissioni
escluse) realizzate dall'inizio del sistema di trading. Viene tipicamente utilizzata insieme all'istruzione QUIT
per interrompere un sistema di trading che ha perso molto.
STRATEGYPROFIT
Quest'istruzione puo' essere utilizzata con delle parentesi quadre: StrategyProfit[1] d il profitto alla chiusura
della barra precedente.

Esempio:
IF STRATEGYPROFIT < -500 THEN
QUIT
ENDIF

Nota bene:
Ricordate che i sistemi di trading sono valutati alla chiusura della barra. Nell'esempio qui sopra, le perdite
possono essere superiori a 500 nel caso di una grossa perdita su una signola candela o nel caso di un gap.
Di conseguenza, un utente che vuole interrompere un sistema di trading dopo una perdita di 500 ,
imposter prima di tutto uno STOP LOSS per limitare le perdite, poi user il blocco del codice riportato qui
sopra per interrompere il sistema.

V 5.1.1 20170303 www.prorealtime.com 19 / 96


La Programmazione di sistemi di trading

Avvertimento: Gli esempi presentati in questo manuale sono a scopo pedagogico. Tutte le
informazioni presenti sono a carattere generale e non rappresentano in nessun caso informazioni o
consulenze personalizzate o incitazioni a comprare o vendere strumenti finanziari. Le performances
passate non rappresentano previsioni per il futuro. Ogni sistema di trading pu esporre a un rischio di
perdite superiori all'investimento iniziale.

Definizione dei parametri di esecuzione di sistemi di trading


Si possono definire dei parametri addizionali con l'aiuto dell'istruzione DEFPARAM.
Cumulo di ordini
La variabile CumulateOrders vi permette di autorizzare o proibire ordini cumulati per entrare a mercato o
aggiungere ad una posizione. Questo parametro impostato su True per default per i codici creati dalla
programmazione il che significa che un sistema di trading puo' aggiungerlo ad una posizione esistente su
ogni barra dove le condizioni per entrare questa posizione sono vere. E' anche possibile avere limiti multipli
o ordini stop per entrare a mercato attivo allo stesso tempo in questo caso.
Per impedire ad un sistema di trading di aumentare la grandezza di una posizione gi aperta, la seguente
istruzione deve essere impostata all'inizio del codice:
DEFPARAM CumulateOrders = False
Le istruzioni DefParam rimangono valide per l'intera esecuzione del sistema di trading. Non possibile
cambiare i parametri del sistema di trading per gli ordini cumulati o no durante l'esecuzione del sistema di
trading.
Esempi:
// Questo codice comprer 1 titolo ad ogni barra, fino ad un massimo di 3.
DEFPARAM CumulateOrders = True
If CountOfPosition < 3 THEN
Buy 1 shares at market
Endif
// Questo codice comprer 1 titolo al prezzo di 2 e un titolo addizionale al prezzo di 3
DEFPARAM CumulateOrders = True
If CountOfPosition < 2 THEN
Buy 1 shares at 2 Limit
Buy 1 shares at 3 Limit
Endif
// Questo codice comprer 5 titoli solo una volta
DEFPARAM CumulateOrders = False
Buy 5 shares at market
E' possibile avere diversi ordini per uscire sul mercato nella stessa direzione anche quando il parametro
CumulateOrders impostato su false.
Esempio:
// Questo codice comprer 5 titoli. Fino a 3 titoli saranno venduti se il prezzo incrocia
sotto i 40 periodi di media mobile. Tutti i titoli saranno venduti nel caso di una
perdita del 10%.
DEFPARAM CumulateOrders = False
Buy 5 shares at market
If close CROSSES UNDER Average[40] THEN
SELL 3 SHARES AT MARKET
Set stop %Trailing 10
Endif

V 5.1.1 20170303 www.prorealtime.com 20 / 96


La Programmazione di sistemi di trading

Nota sui livelli di stop e target quando CumulateOrders attiva: Se usate le istruzioni per impostare uno
stop loss, trailing stop o profit target con ordini cumulati attivati, il livello viene calcolato in base al prezzo
medio di entrata della vostra posizione e viene ricalcolato ogni volta che la quantit della posizione viene
modificata.

Esempio:
Se comprate 1 azione a 10.00 $ e impostate lo stop loss a 10% e il profit target a 150%, il livello iniziale
sarebbe : lo stop a 9.00 $ ed il target a 25.00 $. Se comprate una seconda azione al prezzo di 20 $, il prezzo
medio di entrata sarebbe di 15 $ e di conseguenza i nuovi livelli sarebbero : uno stop a 13.50 $ e un target a
37.50 $ (per la posizione intera).

Nota sui codici creati con la modalit di creazione assistita: CumulateOrders impostato su false per
default per i sistemi di trading creati con la modalit di creazione assistita (l'istruzione DefParam
CumulateOrders = False sar presente all'inizio di questi codici).

PreLoadBars
L'istruzione "DefParam Preloadbars" vi permette di configurare la quantit massima di barre che vengono
precaricate prima dell'inizio del sistema di trading per il calcolo degli indicatori usati nel sistema
precedente all'avvio del sistema (indicatori personalizzati o predefiniti). Per default, questo parametro
uguale a 200. Puo' essere inferiore a 0 o superiore a 5000. Se volete disattivare i dati precaricati,
impostate PreLoadBars = 0.
Il valore selezionato un massimo perch la quantit delle barre che possono essere precaricate dipende
dai dati disponibili per un dato strumento ed un'unit di tempo.

Esempio:
DEFPARAM PreLoadBars = 300
a = (close + open) / 2
If price CROSSES OVER Average[250](a) THEN
BUY 1 SHARE AT MARKET
Endif

Se PreLoadBars impostato a 300, significa che una media mobile di 250 barre sarebbe definita come
la prima barra dopo che un sistema di trading iniziato. Non sarebbe cosi' se fossero precaricate solo
200 barre.
Notate che il valore di 300 un massimo: se sono disponibili meno di 300 barre prima dell'inizio del sistema
di trading, solo il numero disponibile di barre sar precaricato.
Nell'esempio dove 300 barre vengono precaricate, il BarIndex della prima barra dopo l'inizio del sistema di
trading uguale a 300. Dall'altro lato, se sono precaricate 0 barre, il BarIndex della prima barra dopo l'inizio
del sistema di trading sarebbe uguale a 0.

V 5.1.1 20170303 www.prorealtime.com 21 / 96


La Programmazione di sistemi di trading

FlatBefore e FlatAfter
DEFPARAM FlatBefore = HHMMSS
DEFPARAM FlatAfter = HHMMSS
HHMMSS l'orario dove HH indica l'ora, MM indica i minuti e SS indica i secondi.
Queste istruzioni vi permettono di cancellare tutti gli ordini in attesa, chiudere tutte le posizioni e impedire di
piazzare ordini supplementari prima di una cert'ora del giorno nel caso di FlatAfter.
Il parametro FlatBefore deve sempre essere posteriore all'orario di apertura del mercato (personalizzato o
no), e FlatAfter deve essere anteriore alla chiusura standard del mercato (personalizzato o no), altrimenti
non avrebbe alcun effetto. Se l'orario di chiusura non un multiplo dell'orario principale del sistema di trading
(succede a met della candela), l'istruzione DEFPARAM FlatAfter avr effetto alla chiusura della candela e
l'istruzione DEFPARAM FlatBefore sar applicata fino alla chiusura della candela precedente.
Gli ordini sono limitati durante questo periodo, il che significa che nessun ordine sar piazzato e tutti gli
ordini non saranno piazzati all'apertura del prossimo periodo quando il sistema di trading autorizzato a
piazzare ordini. Di conseguenza il tipo di variabili "OnMarket" sar sempre falso durante questo periodo.

Esempio:
DEFPARAM FlatBefore = 093000 // Cancella tutti gli ordini in attesa, chiude tutte le
posizioni e evita di piazzare ordini supplementari con il sistema di trading prima delle
9:30:00 orario della zona del mercato.
DEFPARAM FlatAfter = 160000 // Cancella tutti gli ordini in attesa, chiude tutte le
posizioni e evita di piazzare ordini supplementari con il sistema di trading dopo le
16:00:00 orario della zona del mercato.

NoCashUpdate (Backtest solamente)


DEFPARAM NoCashUpdate = True
Se quest'opzione attivata, il capitale disponibile non aggiornato con i guadagni, le perdite e le
commissioni.
Per default, NoCashUpdate = False.

Esempio:
Capitale iniziale 10 000 , con NoCashUpdate = True. L'investimento massimo sar limitato a 10000
qualunque siano i guadagni e le perdite realizzate per l'intera durata del Backtest.

Nota bene:
I parametri definiti con l'aiuto dell'istruzione DEFPARAM devono essere definiti all'inizio del codice (dopo i
commenti)

MinOrder and MaxOrder (backtest solamente)


DEFPARAM MinOrder = n
DEFPARAM MaxOrder = p
Questa opzione permette di bloccare tutti gli ordini la cui quantit (espressa in lotti, contratti o azioni)
inferiore a n o superiore a p.

Esempio:
DEFPARAM MinOrder = 100
Buy 1000 cash at market
Se il capitale iniziale superiore a 10, la quantit dell'ordine sar inferiore a 100 quindi l'ordine verr rifiutato.

V 5.1.1 20170303 www.prorealtime.com 22 / 96


La Programmazione di sistemi di trading

Richiamo d'indicatori

Indicatori ProRealTime
Tutte le funzioni che includono gli indicatori ProRealTime disponibili per programmare i propri indicatori sono
ugualmente accessibili per programmare sistemi di trading (v. glossario alla fine di questo manuale per una
lista completa).
Vi consigliamo di riferirvi al manuale ProBuilder per maggiori informazioni su queste funzioni.
La quantit di dati storici necessaria per il calcolo di un indicatore dipende dal tipo di indicatore. Per
esempio, per calcolare una media mobile esponenziale su N periodi (ExponentialAverage[N]), si considera
generalmente che 10*N barre sono necessarie per fornire un risultato preciso.
Se la data di inizio del backtest molto vicina alla prima data del grafico, viene fornito dello storico
supplementare al backtest in modo che gli indicatori diano dei risultati dalla prima barra.
Indicatori personalizzati
E' possibile richiamare gli indicatori ProBuilder che avete programmato usando l'istruzione CALL in un
sistema di trading.
Esempio:
a,b = CALL "HistoMACD[5,6]" // a e b sono gli outputs della funzione. 5 e 6 sono gli inputs.
Per un buon utilizzo di CALL, vi consigliamo di leggere attentamente la sezione consacrata all'ottimizzazione
del vostro programma.

Suggerimenti per la programmazione

Avvertimento: Gli esempi presentati in questo manuale sono a scopo pedagogico. Tutte le
informazioni presenti sono a carattere generale e non rappresentano in nessun caso informazioni o
consulenze personalizzate o incitazioni a comprare o vendere strumenti finanziari. Le performances
passate non rappresentano previsioni per il futuro. Ogni sistema di trading pu esporre a un rischio di
perdite superiori all'investimento iniziale.

Il tempo di calcolo di un sistema di trading dipende fortemente dalla complessit degli indicatori utilizzati e
dal modo in cui sono richiamati. Il seguente paragrafo propone quindi alcuni consigli semplici per ottimizzare
il vostro codice.
Ridurre il numero di richiami agli indicatori ProRealTime
Se utilizzate pi volte lo stesso indicatore in un programma, conservate l'indicatore in una variabile
intermediaria (avg40 nell'esempio qui sotto) piuttosto che richiamare l'indicatore. Questo render
l'esecuzione pi veloce.

CODICE NON OTTIMALE CODICE OTTIMALE

IF NOT LONGONMARKET AND close > Average[40] avg40 = Average[40]


THEN IF NOT LONGONMARKET AND close > avg40 THEN
BUY 1 SHARE AT MARKET BUY 1 SHARE AT MARKET
ENDIF ENDIF

IF NOT SHORTONMARKET AND close < Average[40] IF NOT SHORTONMARKET AND close < avg40 THEN
THEN
SELLSHORT 1 SHARE AT MARKET
SELLSHORT 1 SHARE AT MARKET
ENDIF
ENDIF

V 5.1.1 20170303 www.prorealtime.com 23 / 96


La Programmazione di sistemi di trading

Questo ugualmente valido quando volete utilizzare lo stesso indicatore pi volte ma con un diverso offset.

CODICE NON OTTIMALE CODICE OTTIMALE

a = ExponentialAverage[40](close) a = ExponentialAverage[40](close)
b = ExponentialAverage[40](close[1])
c = ExponentialAverage[40](close) IF a > a[1] THEN
BUY 1 SHARE AT MARKET
IF a > b THEN ENDIF
BUY 1 SHARE AT MARKET
ENDIF IF a < a[1] THEN
SELLSHORT 1 SHARE AT MARKET
IF a < c[1] THEN ENDIF
SELLSHORT 1 SHARE AT MARKET
ENDIF

Richiami d'indicatori personalizzati


Il richiamo d'indicatori personalizzati tramite l'istruzione CALL pi costoso in tempi di calcolo che il
richiamo d'indicatori ProRealTime. Per gli indicatori ProRealTime, sappiamo in anticipo quali calcoli sono
necessari e possiamo controllare come vengono fatti. Questo ci permette di aumentare la velocit di calcolo
che non possibile con gli indicatori personalizzati la cui programmazione lasciata alla libert dell'utente.
Per migliorare la velocit di esecuzione di un sistema di trading con l'istruzione CALL, quindi importante
utilizzare l'istruzione CALL nel modo pi efficace possibile nel programma.

Limitare il numero di richiami identici:


Come per gli indicatori ProRealTime, limitate il numero delle volte in cui l'indicatore richiamato nel
programma.

CODICE NON OTTIMALE CODICE OTTIMALE

myindic1 = CALL "My Function" myindic = CALL "My Function"

IF NOT LONGONMARKET AND close > myindic1 IF NOT LONGONMARKET AND close > myindic
THEN THEN
BUY 1 SHARE AT MARKET BUY 1 SHARE AT MARKET
ENDIF ENDIF

myindic2 = CALL "My Function" IF NOT SHORTONMARKET AND close < myindic
IF NOT SHORTONMARKET AND close < myindic2 THEN
THEN SELLSHORT 1 SHARE AT MARKET
SELLSHORT 1 SHARE AT MARKET ENDIF
ENDIF

V 5.1.1 20170303 www.prorealtime.com 24 / 96


La Programmazione di sistemi di trading

Limitare il numero di richiami sovrapposti:


Se desiderate utilizzare un indicatore personalizzato nel codice del vostro backtest, verificate che non abbia
l'istruzione CALL nel suo codice.
Richiamare un indicatore personalizzato che richiama a sua volta un altro indicatore personalizzato molto
costoso in termini di tempo di calcolo. Se possibile, duplicate sempre il codice dell'indicatore personalizzato
che volete richiamare nel ProBacktest piuttosto che usare la funzione CALL in modo che i codici backtest
utilizzini solo gli indicatori ProRealTime.

CODICE NON OTTIMALE CODICE OTTIMALE

Codice del sistema di trading: Codice del sistema di trading:


myindic = CALL "MyDCLOSEMix LinearReg" dayclosemix = (DClose(0) + 3.5 * DClose(1)
+ 4.5 * DClose(2) + 3 * DClose(3) + 0.5 *
DClose(4) 0.5 * DClose(5) 1.5 *
IF NOT longonmarket AND close > myindic
DClose(6)) / 10.5
THEN
myindic = LinearRegression[5](dayclosemix)
BUY 1 SHARE AT MARKET
ENDIF
IF NOT longonmarket AND close > myindic
THEN
IF NOT shortonmarket AND close < myindic
BUY 1 SHARE AT MARKET
THEN
ENDIF
SELLSHORT 1 SHARE AT MARKET
ENDIF
IF NOT shortonmarket AND close < myindic
THEN
Code de "MyDCLOSEMix LinearReg": SELLSHORT 1 SHARE AT MARKET
dayclosemix = CALL "MyDCLOSEMix" ENDIF

RETURN LinearRegression[5](dayclosemix)

Code de "MyDCLOSEMix":
mix = (DClose(0) + 3.5 * DClose(1) + 4.5 *
DClose(2) + 3 * DClose(3) + 0.5 * DClose(4)
0.5 * DClose(5) 1.5 * DClose(6)) / 10.5

RETURN mix

V 5.1.1 20170303 www.prorealtime.com 25 / 96


La Programmazione di sistemi di trading

Limitare il numero di condizioni sovrapposte:


Per tutte le istruzioni condizionali (IF...THEN...ENDIF), sempre preferibile, in termini di tempo di calcolo,
lavorare con una condizione che verifica n condizioni piuttosto che n istruzioni come mostrato qui sotto:

CODICE NON OTTIMALE CODICE OTTIMALE

IF CLOSE >= 0.0014 THEN IF CLOSE >= 0.0014 AND CLOSE <= 0.0047 AND
IF CLOSE <= 0.0047 THEN INTRADAYBARINDEX >= 5 AND INTRADAYBARINDEX
<= 20 THEN
IF INTRADAYBARINDEX >= 5 THEN
IF NOT SHORTONMARKET THEN
IF INTRADAYBARINDEX <= 20 THEN
BUY 1 SHARES AT MARKET
IF NOT SHORTONMARKET THEN
ENDIF
BUY 1 SHARES AT MARKET
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF

Utilizzo dei cicli FOR:


L'utilizzo dei cicli FOR talvolta indispensabile, ma meglio evitare di utilizzarli quando si puo', poich
aumentano il tempo di calcolo.

Ecco qualche esempio tipico dove l'impiego del ciclo non necessario:

// Se la condizione c1 stata vera almeno una volta nel corso delle ultime n candele:
IF HIGHEST[n](c1) = 1 THEN
...
// Se la condizione c1 stata sempre vera nel corso delle ultime n candele:
IF LOWEST[n](c1) = 1 THEN
...
// Numero di volte in cui la condizione c1 stata verificata nel corso delle ultime n
candele:
num = SUMMATION[n](c1)

// Numero di barre da quando c1 stata vera:


IF c1 THEN
lastoccurence = barindex
ENDIF
timesince = barindex - lastoccurence

// Il max delle variabili (a,b,c,d,e,f,g):


top = MAX(a , MAX(b , MAX(c , MAX(d , MAX(e , MAX(f , g) ) ) ) ) )

V 5.1.1 20170303 www.prorealtime.com 26 / 96


ProBacktest Backtesting di sistemi di trading

ProBacktest Backtesting di sistemi di trading


La linguetta "ProBacktest" della finestra di creazione di sistemi di trading permette di configurare i parametri del
sistema:

Capitale iniziale
Parametri di intermediazione e Impegno sul Mercato
Ottimizzazione variabili
Periodo di esecuzione

V 5.1.1 20170303 www.prorealtime.com 27 / 96


ProBacktest Backtesting di sistemi di trading

Money Management

Capitale iniziale
Questa sezione permette di inserire il capitale messo a disposizione per il sistema di trading da tradare.
L'investimento massimo autorizzato durante l'esecuzione della sistema ne dipende.
Durante l'esecuzione del backtest, i guadagni, le perdite e le commissioni influenzano l'importo del capitale
disponibile per il sistema di trading (eccetto se il parametro NoCashUpdate attivo, v. paragrafo Reinvestire
i guadagni per maggiori informazioni). Per i sistemi di trading automatici, il capitale disponibile per i vostri
sistemi il capitale del vostro portafoglio.

Se un backtest non piazza ordini, pensate ad aumentare l'importo del capitale iniziale.

Brokeraggio: commissioni e gestione del rischio


possibile personalizzare questi parametri perch riflettano i parametri e i costi del proprio broker. Qualsiasi
tipo di commissione di brokeraggio pu essere applicato a qualsiasi tipo di strumento. I tipi di commissioni di
brokeraggio disponibili sono:
Commissione per ordine: un importo fisso (nella valuta dello strumento) viene applicato ad ogni ordine
eseguito. inoltre possibile specificare un valore minimo e un valore massimo per ogni ordine.
% transazione: una percentuale della transazione (nella valuta dello strumento) viene applicata ad ogni
ordine eseguito.
Commissione per lotto: un importo fisso (nella valuta dello strumento) viene applicato ad ogni lotto o
contratto
Margine: un deposito (importo fisso o %) richiesto per ogni lotto. Determina il massimo effetto leva
(=100/margine)
Misura per lotto (solo Forex): la quantit minima per ordine dello strumento. La quantit di ogni ordine
inserito nelle istruzioni BUY/SELL moltiplicata per la taglia del lotto.
Spread (in pips): il valore aggiunto al prezzo medio che riflette lo spread bid-ask.

La sezione di gestione del rischio permette di definire il parametro grandezza massima di una posizione :
ogni ordine che oltrepassa il limite qui indicato viene rifiutato. La grandezza massima della posizione
rappresenta il numero massimo di contratti per futures e forex e di contante o % di capitale per azioni. Le
impostazioni della sezione di "Gestione del rischio" non prendono in considerazione le commissioni di
brokeraggio.

V 5.1.1 20170303 www.prorealtime.com 28 / 96


ProBacktest Backtesting di sistemi di trading

Futures:
Le commissioni di brokeraggio per i futures sono definite per contratto e per transazione.
Il margine l'importo in contanti necessario per comprare un contratto. Il valore di un punto viene calcolato
automaticamente sula piattaforma per il future su cui impostiamo il sistema di trading in backtest.

Di seguito la lista con i valori di un punto per i principali futures.

NOME DEL FUTURE VALORE DI 1 PUNTO

FCE CAC 40 10
DAX 25
DJ Eurostoxx 50 10
BUND 10
Euro FX 12,5$
Mini S&P 500 50$
Mini Nasdaq 100 20$
Mini Dow 5$

Forex:
Lo spread, la taglia del lotto e il margine possono essere definiti e applicati ad ogni ordine.

Esempio su EURUSD:
Tagli del lotto: 100 000
Spread: 2 pips
Margine: 5%
L'istruzione BUY 1 LOT AT MARKET sull'EURUSD compra 1 lotto di 100000 con uno spread di 2 pips.
(0.0002). Dato che l'effetto leva a 20:1 (5% del margine), un deposito di 5000 richiesto per piazzare
l'ordine.

Azioni:
Le commissioni di brokeraggio sono normalmente un importo in o in % della transazione. inoltre
possibile definire un importo minimo o massimo di costi di commissione per ogni transazione.

Esempio di impostazione per azioni:


Commissione per ordine: $10
Margine: 20%
Con queste impostazioni ogni ordine pu usufruire di un effetto leva a 5:1.

V 5.1.1 20170303 www.prorealtime.com 29 / 96


ProBacktest Backtesting di sistemi di trading

Ottimizzazione delle variabili


In questa sezione, potete scegliere di ottimizzare le variabili. Questa funzione permette di testare le diverse
combinazioni di parametri in un backtest, per sapere quale d il miglior risultato su un dato strumento e unit
di tempo sul periodo di dati storici testati.
Per saperne di pi e vedere un esempio concreto, potete visionare il video "Come impostare la gestione
del capitale e gli stop in ProBacktest".
Il risultato dell'ottimizzazione presente nel "Rapporto ottimizzazione". Vedrete le statistiche delle migliori
combinazioni delle variabili testate e utilizzerete quest'informazione per determinare quale variabile
desiderate utilizzare nel vostro sistema di trading.

Ecco un esempio di programma con ottimizzazione di due medie mobili con periodi di n e m:
AVGm = ExponentialAverage[m](Close)
AVGn = ExponentialAverage[n](Close)
IF AVGm CROSSES OVER AVGn THEN
BUY 100 SHARES AT MARKET
ENDIF
IF AVGm CROSSES UNDER AVGn THEN
SELL 100 SHARES AT MARKET
ENDIF

Le variabili n e m possono essere definite cliccando sul tasto "Aggiungi" nella sezione ottimizzazione.

La seguente finestra si apre e vi consente di impostare l'ottimizzazione:

"Nome utilizzato nel programma" rappresenta il nome attribuito alla variabile nel codice (n in questo
caso). Attenzione a rispettare le maiuscole e minuscole.
"Formula visibile nell'interfaccia" rappresenta il nome che si vuole attribuire alla variabile, in modo da
renderla pi facilmente riconoscibile (per esempio "Numero di Periodi" per n).
"Valore Min" e "Valore Max" rappresentano i limiti delle variabili per il test d'ottimizzazione.
"Passo" l'intervallo delle variabili da testare nell'ottimizzazione.

V 5.1.1 20170303 www.prorealtime.com 30 / 96


ProBacktest Backtesting di sistemi di trading

Ecco un esempio di rapporto di ottimizzazione:

Il rapporto di ottimizzazione indica 5 statistiche per ognuna delle combinazioni di variabili testate. Queste
statistiche sono le seguenti:

"Guadagno", indica il guadagno o perdita realizzata con il sistema di trading. Si traduce nella formula:
Guadagno = Importo del capitale finale Importo del capitale iniziale

Questa statistica permette di valutare il potenziale guadagno assoluto con il sistema di trading definito per il
periodo storico testato e per ogni combinazione di variabili.

Nota bene: i parametri di intermediazione definiti nella sezione "Parametri di intermediazione" sono presi in
considerazione in questo calcolo.

"%Guadagno", rappresenta il guadagno o perdita in %. Si traduce tramite la formula:


%Guadagno = 100 x Profitto/ Importo del capitale iniziale

Indica quindi la relativa performance del backtest configurato con le variabili corrispondenti.

"N posizioni", indica il numero di posizioni aperte durante il backtest.

"% Posizioni vincenti" indica la percentuale delle posizioni vincenti. Matematicamente, si definisce con:
% posizioni vincenti = (100 x Numero di posizioni vincenti) / Numero di posizioni

"Guad. medio per posizione" il guadagno medio per posizione. Puo' essere utile per determinare il
rendimento degli ordini piazzati. Si definisce con:
Guad. medio per posizione = Guadagno / Numero di posizioni

Nota bene: i risultati dei rapporti di ottimizzazione possono cambiare per un dato sistema di trading che
dipende dal valore, unit di tempo o la quantit di dati storici usati.

V 5.1.1 20170303 www.prorealtime.com 31 / 96


ProBacktest Backtesting di sistemi di trading

Definizione del periodo di esecuzione del backtest

Questi campi permettono di definire le date di inizio e di fine del backtest. Notate che la quantit di storico
che puo' essere usata per il backtest generalmente limitata alla quantit di storico disponibile sul grafico.
Potete aumentare la quantit di dati storici caricati sul vostro grafico usando il men di sinistra di ogni
grafico. E' necessario caricare la quantit di storico che desiderate prima di avviare il vostro backtest.
Nel caso di un backtest "Fino a ultima data", gli ordini appaiono sul grafico ad ogni scatto dei segnali. E'
ugualmente possibile associare questi ordini a delle popup o a dei suoni selezionando "Suono allarmi" nel
men "Opzioni".
Se definita una data di fine, le posizioni ancora aperte a questa data saranno chiuse.

Nota bene:
Se il vostro backtest mette del tempo ad eseguirsi, potete ridurre il periodo di esecuzione : il tempo di calcolo
per backtestare un sistema di trading proporzionale alla lunghezza dello storico sul quale il sistema di
trading testato.
Dopo l'esecuzione di un backtest, i risultati sono mostrati nel seguente modo:
Curva dei guadagni e perdite che mostrano il guadagno e le perdite del sistema di trading
Istogramma delle posizioni
Rapporto dettagliato
Per maggiori informazioni riguardo alla visualizzazione dei risultati dei backtest, controlla l'Allegato A al
termine di questo documento.

Personalizzazione degli orari di trading per il backtest


Attraverso il men "Opzioni / Fuso orario & Orari di trading" possibile impostare degli orari di trading
personalizzati per un determinato mercato.

Orari di trading personalizzati: Se impostiamo degli orari di trading ridotti per un determinato mercato,
questo implica che saranno visibili sui grafici (e presi in configurazione nei ProBacktest) solo le quotazioni
degli orari impostati. Nota bene: possibile definire degli orari di trading ridotti solo in un determinato giorno.
Ad esempio se un mercato aperto 24 ore su 24 possibile scegliere di visualizzare solo le quotazioni tra le
10:00 e le 14:00, non invece possibile visualizzare le quotazioni tra le 21:00 di un giorno e le 09:00 del
giorno successivo. Se un ordine piazzato alla chiusura personalizzata dell'ultima candela del giorno di
trading con orari di trading personalizzati, questo ordine verr piazzato all'apertura personalizzata del
successivo giorno di trading.

Informazioni sui fusi orari personalizzati e quotazioni durante il week-end:


Alcuni mercati aperti 24 ore su 24 permettono di "utilizzare quotazioni intraday per costruire candele
giornaliere". Questa opzione non presa in considerazione quando vengono eseguiti dei ProBacktest, che
utilizzano sempre candele ufficiali giornaliere basate sul fuso orario di base (mercato locale).
Alcuni mercati (come il Forex) includono quotazioni durante il week-end. Esiste un'opzione nel men
"Opzioni / Fuso orario & Orari di trading" per questi mercati che permette di mostrare o nascondere i dati del
week-end nei grafici. Le quotazioni del week-end sono per sempre prese in considerazione per i
ProBacktest. Per il mercato Forex le quotazioni della domenica sono incluse nella candela giornaliera del
luned per i ProBacktest (non esiste una candela giornaliera per la domenica).

V 5.1.1 20170303 www.prorealtime.com 32 / 96


ProBacktest Backtesting di sistemi di trading

Informazioni sui fusi orari personalizzati:


Il codice viene sempre eseguito nel fuso orario dell'utilizzatore. Questo significa che le istruzioni temporali
(time, flatafter, flatbefore) prenderanno in considerazione questo fuso orario per il loro calcolo. Il fuso orario
dell'utilizzatore quello predefinito per il mercato dello strumento finanziario. possibile personalizzare i fusi
orari dal men "Opzioni / Fuso orario & Orari di trading".

Per default, il fuso orario dello strumento finanziario quello predefinito sul suo computer.

possibile modificare il fuso orario di un mercato dal men "Opzioni / Fuso orario & Orari di trading". Se
viene apportata una modifica, il fuso orario personalizzato sar preso in considerazione all'esecuzione
successiva di un ProBacktest.

Esempio: Per il titolo Vodafone (appartenente al mercato London Stock Exchange fuso orario UTC+1 ora
estiva britannica), imposto i grafici sul fuso orario di Parigi (UTC+2 ora estiva dell'Europa centrale):
l'istruzione tempo passerr a 13:00 (tempo della chiusura della candela 15 minuti cominciata alle 11:45 (ora
estiva britannica, ovvero 12:00 ora estiva britannica modificato in 13:00 ora estiva dell'Europa centrale).

Le istruzioni temporali "intraday" coinvolte:


"Time" and similar functions ("Hour", "Minute")
"OpenTime" and similar functions ("OpenHour", "OpenMinute")
"FlatAfter" and "FlatBefore"
"IntradayBarIndex" (azzera all'apertura del mercato nel fuso orario selezionato)

Le istruzioni temporali in unit di tempo giornaliero non sono coinvolte dalla modifica di fuso orario:
"DOpen", "DHigh", "Dlow", "DClose"
"Date" and similar functions ("Year", "Month", "Day")
"DayOfWeek" e "Days"

Queste istruzioni temporali sono invece sempre nel fuso orario del mercato locale.

V 5.1.1 20170303 www.prorealtime.com 33 / 96


ProBacktest Backtesting di sistemi di trading

Ragioni di interruzione di un ProBacktest


Un ProBacktest puo' fermarsi in uno dei seguenti casi:
Il backtest raggiunge il termine specificato nella finestra di programmazione. In questo caso, il termine
del backtest viene mostrato solo da una linea verticale nera sul grafico.
C' un'istruzione "Quit" nel codice che eseguito. In questo caso, il termine del backtest viene mostrato
con la seguente icona:
Il capitale disponibile non pi sufficiente a coprire le perdite ("stima" del capitale negativa). In questo
caso, il termine del backtest sar mostrato da questa icona
Un ordine respinto per denaro insufficiente. Quest'ordine apparir nella lista di ordini del rapporto
dettagliato. In questo caso, il termine del backtest sar mostrato con l'icona:

Qui di seguito un esempio di backtest interrotto per insufficienza di capitale:

V 5.1.1 20170303 www.prorealtime.com 34 / 96


ProBacktest Backtesting di sistemi di trading

Visualizzazione dei valori delle variabili backtest (a partire da ProRealTime v10.2)


La funzione GRAPH consente di visualizzare i valori delle variabili che utilizza nel suo programma backtest.
Questa istruzione si utilizza nel modo seguente:
GRAPH myvariable AS "my variable name"
myvariable il nome della variabile nel codice
"my variable name" l'etichetta della variabile che sar visualizzata sul grafico

E' ugualmente possibile definire un colore di uscita grazie al settaggio opzionale COLOURED:
GRAPH myvariable COLOURED (r,g,b) AS "my variable name"
r,g,b sono degli interi tra 0 e 255 (Format RGB)
ex: (255,0,0) per una curva rossa

cos come la trasparenza della curva:


GRAPH myvariable COLOURED (r,g,b,a) AS "my variable name"
a un intero compreso tra 0 e 255 e indica la trasparenza (0 per una curva totalmente trasparente,
255 per una curva piena)

Un nuovo sotto-grafico appare sotto la curva Guadagni/Perdite del suo Backtest. Questo sotto-grafico
contiene i valori di myvariable a ogni barra, come nell'esempio sotto:

Note:
L'istruzione GRAPH non pu essere utilizzata in trading automatico.
5 variabili al massimo possono essere visualizzate simultaneamente sullo stesso grafico. Ogni variabile
supplementare sar ignorata.

V 5.1.1 20170303 www.prorealtime.com 35 / 96


I l m e t o d o Wa l k F o r w a r d

Il metodo Walk Forward


Il metodo Walk Forward consente di ottimizzare un sistema di trading e di valutarne la validit e la stabilit
nel tempo.
Innanzi tutto, il metodo walk forward permette di impostare una o pi variabili in un sistema di trading su periodi
di ottimizzazione da definire e valutare i risultati su diversi periodi di tempo testati. I periodi di ottimizzazione
possono avere diversi punti di partenza (modo non ancorato) o un singolo punto di partenza (modo ancorato).

MODO NON ANCORATO MODO ANCORATO

Confrontando questi 2 periodi, il metodo consente di:


Controllare che la performance della strategia sui periodi testati (dati Out-of-sample in arancio) sia compatibile
con i periodi ottimizzati (dati In-sample in blu). Si evita cos il rischio di effettuare un'ottimizzazione eccessiva.
Controllare come si comporta la strategia in condizioni di mercato mutevoli.
Testare la forza della strategia su dati passati.

Esempio
Questa sezione mostra come ottimizzare un sistema di trading esistente utilizzando il metodo Walk
Forward.
Clicchi sul pulsante nella parte superiore della finestra di edizione del codice che trova di seguito.

V 5.1.1 20170303 www.prorealtime.com 36 / 96


I l m e t o d o Wa l k F o r w a r d

Si aprir la finestra seguente. Dopo aver definito le variabili pu attivare il metodo Walk Forward cliccando
sul pulsante "Attivo" e scegliere i parametri del Walk Forward. Selezioni il modo Non ancorato per diversi
punti di partenza, o il modo Ancorato per un punto di partenza unico per tutte le occorrenze del test.

Pu definire il numero di occorrenze del metodo Walk Forward (un'occorrenza consiste nell'ottimizzare i
parametri del periodo di ottimizzazione e nel testare la migliore combinazione sul periodo testato), e il
rapporto tra il periodo dell'ottimizzazione ed il periodo del test.

Dopo aver definito i parametri, chiuda la finestra qui sopra e avvii l'analisi Walk Forward cliccando su
"ProBacktesta il mio sistema".

V 5.1.1 20170303 www.prorealtime.com 37 / 96


I l m e t o d o Wa l k F o r w a r d

Durante l'analisi Walk Forward, la piattaforma incomincia ad ottimizzare la strategia su un primo campione
per determinare la prima combinazione di variabili che generano la massima performance. In seguito la
performance di questa combinazione analizzata su un campione aggiuntivo che non era incluso
nell'ottimizzazione. Questa procedura si ripete 5 volte. Lo scopo determinare la combinazione di variabili
che ha generato delle performance importanti e stabili in diverse condizioni di mercato.

A seconda del numero di variabili e occorrenze il calcolo sar pi o meno complesso. Il tempo di esecuzione
del backtest dipender dalla sua difficolt.

Una volta terminata l'analisi visualizzer un grafico contenente una curva insieme al rapporto dettagliato
della performance del sistema. Oltre alle finestre del rapporto dettagliato classico, visualizzer una sezione
dedicata al Walk Forward contenente i risultati di ogni occorrenza.

V 5.1.1 20170303 www.prorealtime.com 38 / 96


I l m e t o d o Wa l k F o r w a r d

Per determinare se la strategia valida, il rapporto WFE (o Efficienza Walk Forward) confronta il guadagno
su base annuale del periodo di test (out-of-sample) con il guadagno su base annuale del periodo di
ottimizzazione (in-sample). A partire da un rapporto superiore al 50 o 60% si pu considerare che la strategia
non stata eccessivamente ottimizzata.

La curva riunisce e mostra il primo periodo in-sample (o ottimizzazione) e i 5 periodi out-of-sample (o test)
sul grafico.

Passando col cursore sulle bande in basso il periodo corrispondente verr evidenziato insieme ai parametri
presi in considerazione ed alle performance del periodo di tempo in questione. Nell'immagine qui sopra il
mouse si trova sul secondo periodo di test. I valori visualizzati sopra per le variabili PROTEZIONE, ORDINI,
e NUMERO danno I migliori risultati durante la 2a ottimizzazione (in-sample #2) e verranno quindi applicati
al periodo di test (out-of-sample #2), mostrando un guadagno di 2.000 durante il periodo di test #2
(evidenziato nell'immagine qui sopra).

V 5.1.1 20170303 www.prorealtime.com 39 / 96


A u t o Tr a d i n g P r o O r d e r

AutoTrading ProOrder
Questa parte di manuale spiega come prendere i sistemi di trading che hai precedentemente backtestato e
eseguirli come sistemi di trading automatici.
La prima sezione spiega come inviare un sistema di trading a ProOrder per prepararlo per l'esecuzione
come un sistema di trading automatico.
La seconda sezione spiega come iniziare un sistema di trading e verificare i risultati
La terza sezione spiega i parametri dei sistemi di trading e le loro condizioni di esecuzione.
La quarta sezione spiega come coesistono i sistemi di trading manuali e automatici nella piattaforma
La quinta sezione spiega le implicazioni dell'esecuzione di sistemi di trading automatici multipli sullo
stesso strumento.
L'ultima sezione contiene una lista di indicatori che non possono essere usati su trading automatici a
causa del loro metodo di calcolo.

Ti consigliamo di leggere l'intero manuale prima di iniziare un sistema di trading per conoscere tutte le
condizioni di esecuzione dei sistemi di trading.

V 5.1.1 20170303 www.prorealtime.com 40 / 96


A u t o Tr a d i n g P r o O r d e r

Preparate un sistema di trading per l'esecuzione automatica


Cominciate ad aprire la finestra ProOrder dal men trading:

Verr visualizzata la seguente finestra che contiene le istruzioni per preparare un sistema di trading per il
trading automatico.

V 5.1.1 20170303 www.prorealtime.com 41 / 96


A u t o Tr a d i n g P r o O r d e r

Prima di tutto, scegliete il grafico e unit di tempo che volete per eseguire il vostro sistema di trading e

cliccate sul tasto. Apparir la finestra Indicatori e Sistemi di Trading. Cliccate su "Backtesting e

Trading Automatico" per vedere la lista dei vostri sistemi di trading:

Scegliete il sistema di trading che volete eseguire automaticamente e premete sul tasto "Preparati per il
trading automatico". Il sistema di trading apparir poi su ProOrder.

V 5.1.1 20170303 www.prorealtime.com 42 / 96


A u t o Tr a d i n g P r o O r d e r

Come iniziare un sistema di trading su ProOrder e controllarne i risultati


Una volta che avete aggiunto un sistema di trading su ProOrder, potrete definire la grandezza massima della
posizione per questo sistema e poi cominciare il trading con questo, premendo il tasto start:

Una finestra popup vi chieder di confermare che volete eseguire il sistema che si consiglia di leggere con
attenzione.
Notate che la "Grandezza massima posizione" presente su ProOrder ha la precedenza sulle istruzioni del
codice. La grandezza massima della posizione per futures e forex definita in numero di lotti o contratti. Per
esempio, se il vostro codice ha un'istruzione di comprare 3 lotti, ma limitate la grandezza massima della
posizione a 1, quest'ordine di acquisto sar ignorato. Allo stesso modo, se il vostro codice ha un'istruzione di
comprare 1 lotto, poi vendete 3 lotti, l'ordine di vendita sar ignorato e vi rimarr 1 posizione. Si deve sempre
verificare la grandezza massima della posizione prima di eseguire un codice.
Per le azioni, la grandezza massima della posizione definita in contanti (non incluse le spese di
intermediazione).
Dopo aver premuto sul tasto "Start", il sistema sar visualizzato nella sezione "In corso di esecuzione" come
mostrato qui sotto.

V 5.1.1 20170303 www.prorealtime.com 43 / 96


A u t o Tr a d i n g P r o O r d e r

Una volta che il sistema di trading iniziato, la sua posizione, guadagno latente e guadagno totale saranno
mostrati nella finestra ProOrder. E' possibile cliccare sul link nella sezione "Versione" per vedere la copia del
codice di questo sistema.

Potete anche cliccare sul tasto giallo mostrato qui sotto per vedere la curva dei guadagni e perdite del
sistema e un rapporto dettagliato delle sue performance.

V 5.1.1 20170303 www.prorealtime.com 44 / 96


A u t o Tr a d i n g P r o O r d e r

Un esempio della curva dei guadagni e perdite del sistema in esecuzione e il suo rapporto dettagliato:

V 5.1.1 20170303 www.prorealtime.com 45 / 96


A u t o Tr a d i n g P r o O r d e r

Nota bene: Il guadagno nella sezione Statistiche delle posizioni chiuse puo' essere diverso dal valore della
curva dei guadagni e perdite perch il sistema ancora in corso di esecuzione e la curva dei guadagni e
perdite prende in considerazione posizioni ancora aperte.

V 5.1.1 20170303 www.prorealtime.com 46 / 96


A u t o Tr a d i n g P r o O r d e r

Parametri del trading automatico e condizioni di esecuzione

Parametri del sistema di trading


Prima di eseguire qualsiasi sistema di trading, cliccate sull'icona a chiave inglese mostrata in giallo per
configurare i parametri del vostro trading:

Un link per mostrare le condizioni di esecuzione del vostro sistema di trading anche incluso nella parte
inferiore di questa finestra ("Clicca qui"). Vi invitiamo a leggere con attenzione queste condizioni.

V 5.1.1 20170303 www.prorealtime.com 47 / 96


A u t o Tr a d i n g P r o O r d e r

Stop automatico dei sistemi di trading


Data di validit: Tutti i sistemi di trading in corso di esecuzione hanno una data di validit comune. Se non
cliccate sul tasto "Prolunga" prima di questa data, ProOrder li interromper automaticamente. Potete vedere
la data di validit (espresso nel fuso orario del computer) e prolungare la validit dei vostri sistemi di trading
con il tasto "Prolunga" nella parte inferiore della finestra ProOrder quando un sistema di trading in corso di
esecuzione:

La quantit di tempo di ogni prolungamento puo' essere configurata all'interno della linguetta "Trading
automatico" nella finestra Preferenze del trading. Si puo' aumentare questo parametro quando avete
sistemi di trading in corso di esecuzione. La modifica sar applicata con il prossimo prolungamento che
avete fatto.

Numero di ordini piazzati: ProOrder puo' interrompere qualsiasi sistema di trading se la somma degli ordini
in attesa e se il numero di ordini eseguiti dall'apertura del mercato (0:00 GMT per il mercato del forex)
superiore o uguale alla quantit scelta nella linguetta Trading automatico nella finestra "Preferenze del
trading". Un ordine in attesa un ordine che era inviato al broker e non eseguito, rigettato o cancellato.

Per esempio, ogni istruzione "Set stop" o "Set Trailing stop" o "Set target" fino a quando l'ordine
corrispondente non stato cancellato, rifiutato o eseguito.

Inoltre, 3 diversi ordini limite o 3 diversi ordini stop che non sono stati cancellati, rifiutati o eseguiti
conteranno come 3 ordini in attesa. Questo vero se i 3 ordini sono sullo stesso livello di prezzo o su livelli
di prezzo diversi.

V 5.1.1 20170303 www.prorealtime.com 48 / 96


A u t o Tr a d i n g P r o O r d e r

Se scegliete per esempio un livello di stop di 8 ordini e dall'apertura del mercato 5 ordini sono stati eseguiti
con un dato sistema di trading e questo sistema ha una posizione aperta e 2 ordini in attesa (uno "set target"
e uno "set stop") e il sistema ha bisogno di inviare un ordine supplementare a mercato: questo 8 ordine non
sar inviato (5+2+1 raggiunge il livello stop), questo sistema di trading sar interrotto con gli ordini in attesa
cancellati prima, e poi la posizione chiusa.

Rifiuto di ordini: ProOrder puo' interrompere qualsiasi sistema di trading se vengono rigettati troppi ordini.
Potete scegliere di interrompere immediatamente un sistema di trading nel caso in cui un ordine sia rigettato
o scegliere un numero predeterminato di tentativi. Non possibile cambiare i parametri del rigetto quando un
sistema di trading in corso di esecuzione.

Coesistenza nella piattaforma del trading manuale e automatico


Se un sistema di trading in corso di esecuzione su un valore, non sar pi possibile tradare manualmente
su questo valore dalla piattaforma mentre il sistema in esecuzione. Potete continuare a tradare
manualmente su altri valori. Sui valori sui quali i sistemi di trading sono in esecuzione, gli strumenti di trading
manuale saranno sostituiti con un tasto che mostra il trading automatico attivato per questo valore:

Si puo' cliccare su questo tasto per aprire la finestra ProOrder e controllare i sistemi di trading in esecuzione.

V 5.1.1 20170303 www.prorealtime.com 49 / 96


A u t o Tr a d i n g P r o O r d e r

Sistemi di trading multipli in corso di esecuzione sullo stesso valore


Se avete sistemi di trading multipli in corso di esecuzione sullo stesso valore, la posizione netta
determinata su tutti questi sistemi di trading. Per esempio, se ci sono 2 sistemi di trading ed uno compra 1
lotto e l'altro vende 1 lotto, la posizione netta sar 0. Unicamente la posizione netta presa con tutti sistemi di
trading sar aperta a mercato in un dato momento per un dato valore.
Quando aprite la curva dei guadagni e perdite di un sistema di trading, vedrete il grafico "Posizioni". Questo
indica la posizione di un sistema di trading individuale su questo valore che puo' essere diverso dalla vostra
posizione netta su questo valore (determinata da tutti i sistemi di trading in corso di esecuzione su questo
valore). La posizione netta viene mostrata dalla linea della posizione.

Esempio:
2 sistemi di trading sono in corso di esecuzione sullo stesso valore: uno sta comprando 6 lotti di grandezza
100.000 ciascuno e l'altro sta comprando 2 lotti di grandezza 100.000 ciascuno = posizione netta +800.000.
In questo esempio la posizione del sistema di trading mostrata sul grafico +600.000. La posizione netta
mostrata dalla linea della posizione +800.000.

V 5.1.1 20170303 www.prorealtime.com 50 / 96


A u t o Tr a d i n g P r o O r d e r

La posizione netta di + 800.000 viene anche mostrata sulla finestra "Trading" > "Portafogli":

Quando stanno funzionando pi sistemi di trading sullo stesso valore, ogni istanza del sistema in funzione
segue indipendentemente la sua propria posizione attuale, ordini, trade, e guadagni. Di conseguenza, le
istruzioni "LongOnMarket", "ShortOnMarket" vi dicono se il sistema in funzione attualmente lungo o corto.
La vostra posizione netta su un valore puo' essere diversa dalla posizione di un dato sistema. Your net
position on a security may be different from the position of a given system. Allo stesso modo, altre variabili di
stato come "CountOfLongShares", "CountOfShortShares", "CountOfPosition", "PositionPrice",
"StrategyProfit", "TradeIndex", "TradePrice" e "PositionPerf" applicano solo la strategia corrente.

Restrizioni per indicatori


I seguenti indicatori non possono essere usati per trading automatici perch il loro modo di calcolo non
permette l'uso del tempo reale:
ZigZag: i segnali che sono basati su questo indicatore sono ricalcolati dopo il fatto e di conseguenza, i
segnali dati in tempo reale possono essere molto diversi dai segnali dati durante i backtest.

Informazioni riguardanti il fuso orario e gli orari di trading personalizzati


Quando invia un sistema di trading a ProOrder, il fuso orario e gli orari di trading associati alla strategia sono
quelli che sono stati impostati per il mercato dello strumento finanziario. Queste impostazioni vengono
applicate ad ogni invio della strategia. Per modificare il fuso orario e gli orari di trading di una strategia
necessario eliminare la strategia da ProOrder e modificare le impostazioni dal men "Opzioni / Fuso orario &
Orari di trading". A questo punto sar possibile inviare di nuovo il sistema di Trading a ProOrder.

Per maggiori informazioni circa le istruzioni che dipendono dal fuso orario del grafico e le impostazioni degli
orari di trading leggere la sezione "Personalizzazione degli orari di trading per il backtest".

V 5.1.1 20170303 www.prorealtime.com 51 / 96


Al l egato A: Risult ati del si stem a di trading

Allegato A: Risultati del sistema di trading


I risultati del sistema di trading si presentano in 3 forme complementari:

Curva guadagni e perdite


La Curva guadagni e perdite di un backtest mostra il profitto e perdita del sistema di trading o backtest:
La linea blu orizzontale rappresenta il capitale iniziale nel caso del backtest o 0 nel caso di un sistema
di trading automatico. Cosi', nel caso del backtest che ha un capitale iniziale di 10.000 e una perdita di
2.705, il valore della curva dei guadagni e perdite sarebbe 7.295 come mostrato nell'esempio qui sotto.
Nel caso di un sistema automatico di trading con la stessa perdita, il valore iniziale sarebbe 0 e il valore
finale sarebbe - 2.705.

Il riempimento della curva guadagni e perdite sar di colore verde se la performance globale
positiva (il capitale aumentato in rapporto al capitale iniziale), di colore rosso se la performance globale
negativa.
Il tratto della curva guadagni e perdite sar di colore verde per indicare una variazione positiva in
rapporto al livello precedente, di colore rosso per indicare una variazione al ribasso.

V 5.1.1 20170303 www.prorealtime.com 52 / 96


Al l egato A: Risult ati del si stem a di trading

Grafico delle posizioni


L'istogramma delle posizioni vi permette di visualizzare in istogramma l'evoluzione delle posizioni prese
durante la simulazione del sistema di trading.
Una barra verde indica l'apertura di una posizione lunga (acquisto).
Una barra rossa indica l'apertura di una posizione corta (short).
Se non si visualizza nessuna barra, nessuna posizione aperta sul mercato.

La comparsa di pi barre successive e dello stesso colore indica che la o le posizioni sono ancora aperte.
Sull'asse verticale visibile sul lato destro del grafico, vedrete le diverse posizioni che avete aperto
attualmente (evidenziate). Nell'esempio qui sotto, possiamo constatare che siamo in posizione aperta lunga
di un lotto di 100.000 unit sull'EUR/USD.

V 5.1.1 20170303 www.prorealtime.com 53 / 96


Al l egato A: Risult ati del si stem a di trading

Rapporto dettagliato
Il rapporto dettagliato vi permette di visualizzare le statistiche del sistema di trading e ugualmente il dettaglio
di ogni posizione e ordine:

V 5.1.1 20170303 www.prorealtime.com 54 / 96


Al l egato A: Risult ati del si stem a di trading

Il rapporto dettagliato si presenta in una finestra indipendente composta da tre linguette:


La linguetta "Statistiche delle posizioni chiuse" vi dar una visione esaustiva delle performance del vostro
sistema di trading (guadagno o perdita, numero di trade vincenti,...) ed anche degli indicatori di rischio come
max drawdown. Notate che questa linguetta non include le analisi delle posizioni aperte nel momento in cui il
rapporto generato (vengono prese in considerazione solo le posizioni chiuse). Qui di seguito troverai la
lista delle statistiche:

"Guadagno", indica il guadagno o perdita realizzata con il sistema di trading. Matematicamente, questo
si traduce nella formula:

Guadagno = Importo del capitale finale Importo del capitale iniziale

Questa statistica permette di valutare il potenziale guadagno assoluto con il sistema di trading definito per
il periodo storico testato e per ogni combinazione di variabile.

Nota bene: i parametri di intermediazione definite nella sezione "Parametri di intermediazione" sono presi
in considerazione nel calcolo.

"%Guadagno", rappresenta il guadagno o perdita in %. Si traduce con la formula:

%Guadagno = 100 x Profitto/ Importo del capitale iniziale

"N posizioni" indica il numero di posizioni che sono state aperte durante il backtest.

"% Posizioni vincenti" indica la percentuale di posizioni vincenti. Si traduce con la formula:

% posizioni vincenti = (100 x Numero di posizioni vincenti) / Numero di posizioni

"Guad. medio di posizioni vincenti": il guadagno medio per posizione. Puo' essere utile
determinare l'efficacia degli ordini piazzati. Il guadagno medio per posizione particolarmente importante
quando si crea un sistema di trading che piazza un basso numero di ordini. Matematicamente, si definisce
come:

Guad. medio di posizioni vincenti = Guadagno / Numero di posizioni

"Profitto miglior posizione" il guadagno massimo su una posizione presa e "Perdita peggior
posizione" la perdita massima sulla posizione presa dall'inizio del sistema di trading. "Scarto tipo
profitti e perdite" lo scarto tipo di risultati di ogni posizione.

Max Drawdown: il potenziale di perdite massimo del sistema di trading. Il drawdown definito come
la distanza tra un dato punto ed il punto massimo che lo precede nella curva dei guadagni e perdite:
DD(n)= Max t[0 ;n] P(t) - P(n)
Il "Max drawdown" calcolato come il pi grande drawdown dell'intera storia del sistema di trading.
MaxDD(N) = Max n[0:N] ( Max t[0;n] P(t) - P(n) )

Max Run-up: il potenziale guadagno massimo del sistema di trading. Il run-up definito come la differenza
tra un dato punto e il punto pi basso che lo precede nella curva dei guadagni e perdite:
RU(n)= P(n) Min t[0;n] P(t)

"Max Run-up" calcolato come il massimo di questo valore dell'intera storia del sistema di trading.
MaxRU(N) = Max n[0;N] ( P(n) Min t[0;n] P(t) )

V 5.1.1 20170303 www.prorealtime.com 55 / 96


Al l egato A: Risult ati del si stem a di trading

Esempio:

BARINDEX PNL DRAWDOWN RUNUP

1 0,00 0,00 0,00


2 15,00 0,00 -15,00
3 10,00 5,00 -10,00
4 0,00 15,00 0,00
5 15,00 0,00 -15,00
6 -10,00 25,00 0,00
7 -20,00 35,00 0,00
8 -5,00 20,00 -15,00
9 -6,00 21,00 -14,00
10 20,00 0,00 -40,00
11 5,00 15,00 -25,00

Max: -35,00 40,00

V 5.1.1 20170303 www.prorealtime.com 56 / 96


Al l egato A: Risult ati del si stem a di trading

"% Max esposizione rischio": L'esposizione al rischio il rapporto tra la perdita massima possibile sulla
posizione e l'importo corrente del capitale. La % max esposizione rischio quindi il massimo di questo
valore espresso in percentuale. Sono da distinguere 3 casi:

Azioni:
% Max esposizione rischio = Max posizione (Quantit * prezzo medio / capitale) * 100

Futures:
% Max esposizione rischio = Max posizione (Quantit * deposito / capitale) * 100

Forex:
% Max esposizione rischio = Max posizione (Quantit * prezzo medio * effetto leva / capitale) * 100

Ugualmente, "% Esposiz. media al rischio" la percentuale media dell'esposizione al rischio.

"Commissioni" contabilizza l'insieme delle commissioni di ogni ordine dall'inizio del sistema di trading.
Queste commissioni sono definite nei parametri della sezione di un backtest.
La % di tempo nel mercato viene calcolata come il numero delle barre con una posizione aperta diviso il
numero delle barre del sistema di trading.

Le 2 linguette seguenti vi danno delle informazioni su tutti gli ordini piazzati e le posizioni aperte e chiuse
durante l'esecuzione del sistema di trading automatico o backtest.
Nella "Lista ordini" troverete una lista di tutti gli ordini piazzati includendo i dettagli sull'ora, il senso, la
quantit e il prezzo. Gli ordini sono mostrati con il fuso orario del mercato.
Infine, nella "Lista posizioni chiuse" troverete un'informazione riguardo alle posizioni prese con il
vostro sistema di trading (lunga o corta, la durata espressa in numero di barre, la performance di ogni
posizione, la data di entrata e di uscita). Se c' una posizione ancora aperta nel momento in cui il
rapporto generato, non sar inclusa in questa lista. Nel caso di un backtest, se volete chiudere tutte le
posizioni alla fine del backtest, scegliete una data di fine fissa.

V 5.1.1 20170303 www.prorealtime.com 57 / 96


Al l egato B: E sempi di codi ci dettagliati

Allegato B: Esempi di codici dettagliati

Avvertimento: Gli esempi presentati in questo manuale sono a scopo pedagogico. Tutte le
informazioni presenti sono a carattere generale e non rappresentano in nessun caso informazioni o
consulenze personalizzate o incitazioni a comprare o vendere strumenti finanziari. Le performances
passate non rappresentano previsioni per il futuro. Ogni sistema di trading pu esporre a un rischio di
perdite superiori all'investimento iniziale.

Sistema di trading basato su Heikin Ashi


Questo sistema di trading genera un segnale di acquisto quando, in stile Heiken-Ashi, una candela verde
appare dopo una candela rossa.
Un segnale di vendita viene emesso se una candela rossa appare dopo una candela verde.
Questo backtest ricostruisce la vista Heikin Ashi da candele normali. Puo' essere applicato ad un grafico
usando lo stile a candela normale (non lo stile a candela Heikin Ashi).

ONCE PreviousStatus = 0
IF BarIndex = 0 THEN
XClose = TotalPrice
XOpen = (Open + Close) / 2
ELSE
XClose = TotalPrice
XOpen = (XOpen[1] + Xclose[1]) / 2
ENDIF
IF XClose >= XOpen THEN
IF PreviousStatus <> 1 THEN
BUY 1 SHARES AT MARKET
PreviousStatus = 1
ENDIF
ELSE
IF PreviousStatus <> -1 THEN
SELLSHORT 1 SHARES AT MARKET
PreviousStatus = -1
ENDIF
ENDIF

V 5.1.1 20170303 www.prorealtime.com 58 / 96


Al l egato B: E sempi di codi ci dettagliati

Avvertimento: Gli esempi presentati in questo manuale sono a scopo pedagogico. Tutte le
informazioni presenti sono a carattere generale e non rappresentano in nessun caso informazioni o
consulenze personalizzate o incitazioni a comprare o vendere strumenti finanziari. Le performances
passate non rappresentano previsioni per il futuro. Ogni sistema di trading pu esporre a un rischio di
perdite superiori all'investimento iniziale.

Sistema di trading basato sullo ZigZag


Questo backtest si basa sullo ZigZag per determinare quali sarebbero state le migliori opportunit d'acquisto
e di vendita. I risultati eccellenti di questo sistema di trading sul mercato delle azioni e futures sono legati al
carattere non predittivo dello ZigZag, che viene ricalcolato a posteriori e non d dunque dei segnali validi in
tempo reale.
La ragione per cui i risultati di questo sistema di trading sono interessanti che danno dei risultati quasi
ideali che possono essere comparati ad altri sistemi di trading.

// I periodi dell'indicatore zigzag possono essere ottimizzati usando l'ottimizzazione di


variabili
myZigZag = ZigZag[10]
c11 = (myZigZag > myZigZag[1])
c12 = (myZigZag < myZigZag[1])
IF c11 AND NOT LONGONMARKET THEN
BUY 1 SHARES AT MARKET
ENDIF
IF c12 AND NOT SHORTONMARKET THEN
SELLSHORT 1 SHARES AT MARKET
ENDIF

V 5.1.1 20170303 www.prorealtime.com 59 / 96


Al l egato B: E sempi di codi ci dettagliati

Avvertimento: Gli esempi presentati in questo manuale sono a scopo pedagogico. Tutte le
informazioni presenti sono a carattere generale e non rappresentano in nessun caso informazioni o
consulenze personalizzate o incitazioni a comprare o vendere strumenti finanziari. Le performances
passate non rappresentano previsioni per il futuro. Ogni sistema di trading pu esporre a un rischio di
perdite superiori all'investimento iniziale.

Sistema di trading Breakout Range con Trailing Stop


Sistema di trading Breakout Range con Trailing Stop
Si tratta di un sistema di trading di tipo BreakOut intraday che prende solo posizioni lunghe. Il range iniziale
determinato dai punti pi alti e pi bassi sulle 2 prime candele della giornata.
Se il prezzo incrocia al rialzo una linea di resistenza e la media mobile 10 periodi aumenta, viene presa una
posizione lunga.
Viene definito un target a 1%.
Uno stop di protezione impostato sul livello del supporto, se il prezzo raggiunge questo livello, la posizione
sar chiusa con un ordine stop.
La posizione chiusa alle 5 del pomeriggio (ora di mercato) per non mantenere posizioni di notte. Un
accesso intraday necessario per testare questo sistema di trading.

DEFPARAM CumulateOrders = False


MM = Average[10](close)
MyTarget = 1
EndTime = 170000
IF INTRADAYBARINDEX = 2 THEN
MyResistance = highest[2](high)
MySupport = lowest[2](low)
ENDIF
REM Entra Lungo:
IF MM > MM[1] AND close CROSSES OVER MyResistance THEN
BUY 1 SHARES AT MARKET
ENDIF
REM Esci Lungo:
IF time > EndTime THEN
SELL AT MARKET
ENDIF
SELL AT MySupport STOP
SET TARGET %Profit MyTarget

V 5.1.1 20170303 www.prorealtime.com 60 / 96


Al l egato B: E sempi di codi ci dettagliati

Avvertimento: Gli esempi presentati in questo manuale sono a scopo pedagogico. Tutte le
informazioni presenti sono a carattere generale e non rappresentano in nessun caso informazioni o
consulenze personalizzate o incitazioni a comprare o vendere strumenti finanziari. Le performances
passate non rappresentano previsioni per il futuro. Ogni sistema di trading pu esporre a un rischio di
perdite superiori all'investimento iniziale.

Sistema di trading basato sullo stocastico lisciato


Questo sistema di trading si basa sull'indicatore Stocastico Lisciato applicato al prezzo medio (indicatore 1)
e alla media mobile esponenziale di questo valore (indicatore 2). Questo sistema di trading compra quando
l'indicatore 1 sopra l'indicatore 2 o entra una posizione corta quando l'indicatore 1 sotto l'indicatore 2.
Un target (limite) definito ad 1% superiore al prezzo di entrata.

DEFPARAM CumulateOrders = False


REM Acquisto
Indicator1 = SmoothedStochastic[9,9](MedianPrice)
Indicator2 = ExponentialAverage[9](Indicator1)
// InitVariabile
StopLimit = 1
REM Inserire condizioni di acquisto
c1 = (Indicator1 >= Indicator2)
IF c1 THEN
BUY 1 SHARES AT MARKET
ENDIF
REM Inserire condizioni di vendita allo scoperto
IF NOT c1 THEN
SELLSHORT 1 SHARES AT MARKET
ENDIF
SET TARGET %PROFIT StopLimit

V 5.1.1 20170303 www.prorealtime.com 61 / 96


Al l egato B: E sempi di codi ci dettagliati

Avvertimento: Gli esempi presentati in questo manuale sono a scopo pedagogico. Tutte le
informazioni presenti sono a carattere generale e non rappresentano in nessun caso informazioni o
consulenze personalizzate o incitazioni a comprare o vendere strumenti finanziari. Le performances
passate non rappresentano previsioni per il futuro. Ogni sistema di trading pu esporre a un rischio di
perdite superiori all'investimento iniziale.

Swing Trading, ADX e Media Mobile


Questo backtest si basa sull'indicatore ADX e sulla sua posizione rispetto al livello 30 da almeno 5 giorni,
permettendo di ridurre i falsi segnali e di minimizzare i rischi. Puo' essere eseguito su un timeframe
giornaliero.
Il sistema di trading presenta varie condizioni che ne limitano il numero di opportunit di trading.

DEFPARAM CumulateOrders = False


MyADX12 = ADX[12]
ADXperiods = 5
MyMM20 = Average[20](Close)

// ACQUISTO
// ADX 12 deve essere superiore a 30 per almeno 5 barre
Condition1 = NOT LOWEST[ADXperiods + 1](MyADX12) > 30
// Se la media mobile di 20 periodi del periodo in corso tra il massimo ed il minimo
del periodo in corso e la media mobile del periodo precedente tra il massimo e il
minimo del periodo precedente
Condition2 = High > MyMM20 AND Low < MyMM20 AND High[1] < MyMM20[1] AND Low[1] <
MyMM20[1]
// Se il massimo del giorno pi alto del giorno precedente
Condition3 = Dhigh(0) > Dhigh(1)
IF Condition1 AND Condition2 AND Condition3 THEN
BUY 1 SHARES AT MARKET
ENDIF

// SHORT
// ADX 12 superiore a 30 da almeno 5 barre
Condition4 = Condition1
// Se la media mobile di 20 periodi del periodo in corso tra il massimo ed il minimo
del periodo in corso e la media mobile del periodo precedente tra il massimo e il
minimo del periodo precedente
Condition5 = High > MyMM20 AND Low < MyMM20 AND High[1] > MyMM20[1] AND Low[1] >
MyMM20[1]
// Se il minimo del giorno inferiore al minimo del giorno precedente
Condition6 = Dlow(0) < Dlow(1)
IF Condition4 AND Condition5 AND Condition6 THEN
SELLSHORT 1 SHARES AT MARKET
ENDIF

V 5.1.1 20170303 www.prorealtime.com 62 / 96


Al l egato B: E sempi di codi ci dettagliati

Avvertimento: Gli esempi presentati in questo manuale sono a scopo pedagogico. Tutte le
informazioni presenti sono a carattere generale e non rappresentano in nessun caso informazioni o
consulenze personalizzate o incitazioni a comprare o vendere strumenti finanziari. Le performances
passate non rappresentano previsioni per il futuro. Ogni sistema di trading pu esporre a un rischio di
perdite superiori all'investimento iniziale.

Sistema di trading che utilizza un contatore di posizioni


Inverse Fisher Transform applicato al RSI
Questo sistema di trading usa "l'Inverse Fisher Transform RSI" per posizionare ordini di acquisto o di
vendita.
Il sistema posiziona un ordine di acquisto quando l'Inverse Fisher Transform RSI incrocia al rialzo la soglia
dei 50 e vende quando l'indicatore incrocia al ribasso la soglia degli 80.
Posiziona un ordine di vendita allo scoperto quando l'Inverse Fisher Transform RSI incrocia al ribasso la
soglia dei 50 e riacquista quando l'Inverse Fisher Transform RSI incrocia al rialzo la soglia dei 20.
Questo sistema di trading da testare sulle viste a 1h per i futures o sulle viste giornaliere per le azioni.

REM Inverse Fisher Transform applicato al RSI


REM Parametri : n = Numero di barre per il calcolo del RSI
n = 10
Ind = RSI[n](Close)
x = 0.1 * (Ind - 50)
y = (EXP (2 * x) - 1) / (EXP (2 * x) + 1)
z = 50 * (y + 1)
myInverseFisherTransformsRSI = z

IF (myInverseFisherTransformsRSI CROSSES OVER 50) THEN


BUY 1 SHARES AT MARKET
ENDIF

IF (myInverseFisherTransformsRSI CROSSES UNDER 80) THEN


SELL AT MARKET
ENDIF

IF (myInverseFisherTransformsRSI CROSSES UNDER 50) THEN


SELLSHORT 1 SHARES AT MARKET
ENDIF

IF (myInverseFisherTransformsRSI CROSSES OVER 20) THEN


EXITSHORT AT MARKET
ENDIF

V 5.1.1 20170303 www.prorealtime.com 63 / 96


Al l egato B: E sempi di codi ci dettagliati

Avvertimento: Gli esempi presentati in questo manuale sono a scopo pedagogico. Tutte le
informazioni presenti sono a carattere generale e non rappresentano in nessun caso informazioni o
consulenze personalizzate o incitazioni a comprare o vendere strumenti finanziari. Le performances
passate non rappresentano previsioni per il futuro. Ogni sistema di trading pu esporre a un rischio di
perdite superiori all'investimento iniziale.

Sistemi di trading che utilizzano TradeIndex Find inside bar


Il seguente esempio un sistema di trading basato su un pattern di prezzo utilizzato frequentemente e
conosciuto come "Inside Bar" sulla base di due forme di candele.
La prima forma interviene se il range della 2a candela che precede la candela in corso pi grande del
range della candela che precede la candela in corso. Questa candela che precede la candela in corso
deve essere bianca (chiusura > apertura). In questo caso, viene presa una posizione lunga.
La seconda forma interviene se il range della 2a candela che precede la candela in corso inferiore al
range della candela che precede la candela in corso e la candela che precede quella attuale nera
(chiusura < apertura). In questo caso, prendiamo una posizione corta.
Tutte le posizioni sono sistematicamente chiuse 3 barre dopo che sono aperte.

DEFPARAM CumulateOrders = False


Condition1 = (High[2] >= High[1] AND Low[2] <= Low[1])
Condition2 = (High[2] <= High[1] AND Low[2] <= Low[1])
Condition3 = (Close[1] > Open[1])
Condition4 = (Close[1] < Open[1])

IF (Condition1 AND Condition3) THEN


BUY 1 Share AT MARKET
ENDIF

IF LONGONMARKET AND (BarIndex - TRADEINDEX) = 3 THEN


SELL 1 share AT MARKET
ENDIF

IF (Condition2 AND Condition4) THEN


SELLSHORT 1 share AT MARKET
ENDIF

IF SHORTONMARKET AND (BarIndex - TRADEINDEX) = 3 THEN


EXITSHORT AT MARKET
ENDIF

V 5.1.1 20170303 www.prorealtime.com 64 / 96


Al l egato B: E sempi di codi ci dettagliati

Avvertimento: Gli esempi presentati in questo manuale sono a scopo pedagogico. Tutte le
informazioni presenti sono a carattere generale e non rappresentano in nessun caso informazioni o
consulenze personalizzate o incitazioni a comprare o vendere strumenti finanziari. Le performances
passate non rappresentano previsioni per il futuro. Ogni sistema di trading pu esporre a un rischio di
perdite superiori all'investimento iniziale.

Sistemi di money management


I risultati di un backtest possono essere migliorati usando i sistemi di money management.
Questi sistemi sono spesso formalizzati in "martingale", destinate ad ottimizzare la speranza matematica di
un sistema di trading, che corrisponde al guadagno medio o alla perdita media per ogni transazione se pi
transazioni sono fatte. Cio' implica di poter innanzitutto stimare la probabilit che un'operazione sia vincente
e l'importo guadagnato.
Per implementare una martingala, puo' essere utile avere uno stop loss, take profit e ordini inattivi codificati
direttamente nel vostro sistema di trading, cosi' da poterli personalizzare interamente ed avere dei sotto-
sistemi che permettono di gestire dinamicamente la grandezza delle posizioni.

Stop di protezione e Target


Per maggiori informazioni sugli stop di protezione, trailing stop e profit target, vedere le apposite sezioni del
manuale.

Stop d'inattivit
Il codice sotto riportato permette di usare uno stop di inattivit nel vostro sistema di trading. Non dimenticate
di definire le condizioni del vostro stop, qui nominato InactivityStopLong e InactivityStopShort. Nel seguente
esempio, lo stop scattato dopo 10 barre.

ONCE Count = 10
REM Scelta del numero di barre dopo che la posizione sar automaticamente chiusa
IF ONMARKET AND (BARINDEX - TRADEINDEX + 1) > Count THEN
IF LONGONMARKET THEN
SELL AT MARKET
ENDIF

IF SHORTONMARKET THEN
EXITSHORT AT MARKET
ENDIF
ENDIF

V 5.1.1 20170303 www.prorealtime.com 65 / 96


Al l egato B: E sempi di codi ci dettagliati

Avvertimento: Gli esempi presentati in questo manuale sono a scopo pedagogico. Tutte le
informazioni presenti sono a carattere generale e non rappresentano in nessun caso informazioni o
consulenze personalizzate o incitazioni a comprare o vendere strumenti finanziari. Le performances
passate non rappresentano previsioni per il futuro. Ogni sistema di trading pu esporre a un rischio di
perdite superiori all'investimento iniziale.

Cumulo di ordini Aggiunta di una posizione esistente con l'uso di un contatore di posizioni
Nella seguente sezione viene presentato un esempio di cumulo di ordini per aumentare la grandezza della
posizione.
Per attivare il cumulo di ordini, inserite il comando "DEFPARAM CumulateOrders=True" all'inizio del
programma.
Questo sistema di trading usa la prima condizione basata sul RSI per prendere solo la posizione iniziale.
Vengono aggiunti ad ogni barra titoli addizionali in cui l'apertura superiore alla chiusura precedente fino ad
un massimo di 3.
"Countofposition" viene utilizzato in questo codice per limitare la grandezza massima della posizione a 3.

DEFPARAM CumulateOrders = True

REM Comprate 1 quando RSI < 30 e non ci sono posizioni gi aperte


IF RSI[14](Close) < 30 AND NOTONMARKET THEN
BUY 1 SHARES AT MARKET
ENDIF

REM Se c' una posizione aperta lunga e l'apertura > chiusura precedente, ogni volta
compriamo una quantit addizionale fino ad un massimo di tre.
IF LONGONMARKET AND COUNTOFPOSITION < 3 THEN AND Open > Close[1] THEN
BUY 1 SHARES AT MARKET
ENDIF

REM Quando il prezzo incrocia sotto una media mobile semplice, chiudete la posizione
IF Close Crosses Under Average[14](Close) THEN
SELL AT MARKET
ENDIF

Con questi strumenti, possiamo adesso guardare la martingala. Qui ce ne sono alcune tre le pi famose.
Queste tecniche possono essere aggiunte su qualsiasi sistema di trading.

V 5.1.1 20170303 www.prorealtime.com 66 / 96


Al l egato B: E sempi di codi ci dettagliati

Avvertimento: Gli esempi presentati in questo manuale sono a scopo pedagogico. Tutte le
informazioni presenti sono a carattere generale e non rappresentano in nessun caso informazioni o
consulenze personalizzate o incitazioni a comprare o vendere strumenti finanziari. Le performances
passate non rappresentano previsioni per il futuro. Ogni sistema di trading pu esporre a un rischio di
perdite superiori all'investimento iniziale.

La martingala classica
La martingala classica consiste nel raddoppiare la grandezza della posizione quando si confrontati ad una
perdita, in modo da rifarsi la volta successiva e guadagnare una volta recuperata la posizione di partenza.
L'inconveniente maggiore di un tale sistema di trading che una serie di perdite consecutive rende sempre
pi difficile o impossibile continuare a raddoppiare la propria posizione. Cominciando con 1000 per
esempio, se perdiamo cinque volte di seguito, bisogner disporre di 1000x32 cio 32000 per continuare
con questo sistema di trading.

Di conseguenza, i sistemi di trading con la martingala possono essere pi adatti al trading d'azioni, che ai
futures o al Forex poich il capitale iniziale richiesto per tradare puo' essere pi importante in questi 2 tipi di
mercati.

Questo codice puo' essere integrato con le vostre condizioni di entrata e di uscita.

//***********Codice da inserire all'inizio del sistema di trading**********//


ONCE OrderSize = 1
ONCE ExitIndex = -2
REM Initial position size of 1.
//*********************//
//***********Codice da inserire subito dopo la chiusura della posizione**********//
ExitIndex = BarIndex

//***********Codice da inserire alla fine del sistema di trading**********//


IF Barindex = ExitIndex + 1 THEN
ExitIndex = 0
IF PositionPerf(1) < 0 THEN
OrderSize = OrderSize * 2
REM Se l'ultimo trade perdente, allora raddoppiamo la grandezza della posizione
ELSIF PositionPerf(1) > 0 THEN
OrderSize = 1
REM Se l'ultimo trade vincente, allora ritorniamo ad una posizione di grandezza 1
ENDIF
ENDIF
//*********************//
REM La grandezza della posizione deve essere determinata sulla variabile OrderSize
nell'intero codice

V 5.1.1 20170303 www.prorealtime.com 67 / 96


Al l egato B: E sempi di codi ci dettagliati

Avvertimento: Gli esempi presentati in questo manuale sono a scopo pedagogico. Tutte le
informazioni presenti sono a carattere generale e non rappresentano in nessun caso informazioni o
consulenze personalizzate o incitazioni a comprare o vendere strumenti finanziari. Le performances
passate non rappresentano previsioni per il futuro. Ogni sistema di trading pu esporre a un rischio di
perdite superiori all'investimento iniziale.

La grande martingala
La grande martingala simile alla martingala classica, salvo che non si raddoppia solamente la posizione ad
ogni perdita, ma si aggiunge anche un'unit supplementare.

Questa martingale pi pericolosa della martingala classica, in caso di perdite successive, ma permette di
aumentare significativamente i guadagni in caso contrario.

Questo codice puo' essere integrato con le vostre condizioni di entrata e di uscita.

//***********Codice da inserire all'inizio del sistema di trading**********//


ONCE OrderSize = 1
ONCE ExitIndex = -2
// Cominciamo con una posizione di 1
//*********************//
//***********Codice da inserire subito dopo la chiusura di una posizione**********//
ExitIndex = BarIndex

//***********Codice da inserire alla fine del sistema di trading**********//


IF Barindex = ExitIndex + 1 THEN
ExitIndex = 0
IF PositionPerf(1) < 0 THEN
OrderSize = OrderSize * 2 + 1 // se l'ultimo trade era perdente, radoppia OrderSize
eaggiungi 1.
ELSIF PositionPerf(1) >= 0 THEN
OrderSize = 1 // Se l'ultimo trade era vincente, allora impostiamo l' OrderSize a 1.
ENDIF
ENDIF
//*********************//
REM La grandezza della posizione deve essere determinata sulla variabile OrderSize
nell'intero codice

V 5.1.1 20170303 www.prorealtime.com 68 / 96


Al l egato B: E sempi di codi ci dettagliati

Avvertimento: Gli esempi presentati in questo manuale sono a scopo pedagogico. Tutte le
informazioni presenti sono a carattere generale e non rappresentano in nessun caso informazioni o
consulenze personalizzate o incitazioni a comprare o vendere strumenti finanziari. Le performances
passate non rappresentano previsioni per il futuro. Ogni sistema di trading pu esporre a un rischio di
perdite superiori all'investimento iniziale.

La Piquemouche
La Piquemouche un'altra variante della martingala classica. In caso di perdite, aumentiamo la grandezza
della posizione di 1 se abbiamo meno di 3 perdite consecutive. Se abbiamo pi di 3 perdite consecutive,
raddoppiamo la posizione. Un guadagno rimette la posizione a 1 unit.
Questo sistema di trading meno pericoloso dei due precedenti, poich non aumentiamo la grandezza della
posizione in maniera esponenziale prima di 3 perdite successive.
Questo codice puo' essere integrato con le vostre condizioni di entrata e di uscita.
//***********Codice da inserire all'inizio del sistema di trading**********//
ONCE OrderSize = 1
ONCE BadTrades = 0
ONCE ExitIndex = -2
// Cominciamo con una posizione di 1
//*********************//
//***********Codice da inserire subito dopo la chiusura di una posizione**********//
ExitIndex = BarIndex
//***********Codice da inserire alla fine del sistema di trading**********//
IF Barindex = ExitIndex + 1 THEN
ExitIndex = 0
IF PositionPerf(1) < 0 THEN
BadTrades = BadTrades + 1
IF BadTrades < 3 THEN
// Se l'ultimo trade era perdente e abbiamo meno di 3 perdite successive,
// aggiungilo a OrderSize
OrderSize = OrderSize + 1
ELSIF BadTrades MOD 3 = 0 THEN
// Se l'ultimo trade era perdente e abbiamo pi di tre perdite successive
// raddoppiamo OrderSize
OrderSize = OrderSize * 2
ENDIF
ELSIF PositionPerf(1) >= 0 THEN
// Se l'ultimo trade era vincente, inizializza OrderSize a 1.
OrderSize = 1
BadTrades = 0
ENDIF
ENDIF
//*********************//
REM La grandezza della posizione deve essere determinata dalla variabile OrderSize
nell'intero codice.

V 5.1.1 20170303 www.prorealtime.com 69 / 96


Al l egato B: E sempi di codi ci dettagliati

Avvertimento: Gli esempi presentati in questo manuale sono a scopo pedagogico. Tutte le
informazioni presenti sono a carattere generale e non rappresentano in nessun caso informazioni o
consulenze personalizzate o incitazioni a comprare o vendere strumenti finanziari. Le performances
passate non rappresentano previsioni per il futuro. Ogni sistema di trading pu esporre a un rischio di
perdite superiori all'investimento iniziale.

La piramide d'Alembert
Questa martingala stata resa famosa da dAlembert, matematico francese del XVIIIe secolo. In caso di
perdita, la grandezza della posizione aumentata di un'unit e in caso di guadagno, viene diminuita di
un'unit.

Questa tecnica di gestione della grandezza delle posizioni pertinente solo quando pensiamo che i
guadagni successivi diminuiscano la probabilit di guadagnare ancora e che le perdite successive riducano
la probabilit di perdere ancora.

Questo codice puo' essere integrato con le vostre condizioni di entrata e di uscita.

//***********Codice da inserire all'inizio del sistema di trading**********//


ONCE OrderSize = 1
ONCE ExitIndex = -2
// Cominciamo con una posizione di 1
//*********************//
//***********Codice da inserire subito dopo la chiusura di una posizione**********//
ExitIndex = BarIndex

//***********Codice da inserire alla fine del sistema di trading**********//


IF Barindex = ExitIndex + 1 THEN
ExitIndex = 0
IF PositionPerf(1) < 0 THEN
OrderSize = OrderSize + 1
ELSIF PositionPerf(1) >= 0 THEN
OrderSize = MAX(OrderSize -1, 1)
ENDIF
ENDIF
//*********************//
REM La grandezza della posizione deve essere determinata dalla variabile OrderSize
nell'intero codice.

V 5.1.1 20170303 www.prorealtime.com 70 / 96


Al l egato B: E sempi di codi ci dettagliati

Avvertimento: Gli esempi presentati in questo manuale sono a scopo pedagogico. Tutte le
informazioni presenti sono a carattere generale e non rappresentano in nessun caso informazioni o
consulenze personalizzate o incitazioni a comprare o vendere strumenti finanziari. Le performances
passate non rappresentano previsioni per il futuro. Ogni sistema di trading pu esporre a un rischio di
perdite superiori all'investimento iniziale.

L'inverso d'Alembert
Si tratta di un sistema di trading contrario alla Piramide D'Alembert. Diminuiamo la grandezza della posizione
in caso di perdita o aumentiamo la grandezza della posizione in caso di guadagno.

Questa tecnica dunque pertinente quando si ritiene che una perdita passata aumenti la probabilit di una
perdita futura e un guadagno passato aumenti la probabilit di un futuro guadagno.

Questo codice puo' essere integrato con le vostre condizioni di entrata e di uscita.

//***********Codice da inserire all'inizio di un sistema di trading**********//


ONCE OrderSize = 1
ONCE ExitIndex = -2
// Cominciamo con una posizione di 1
//*********************//
//***********Codice da inserire subito dopo la chiusura di una posizione**********//
ExitIndex = BarIndex

//***********Codice da inserire alla fine del sistema di trading**********//


IF Barindex = ExitIndex + 1 THEN
ExitIndex = 0
IF PositionPerf(1) < 0 THEN
OrderSize = MAX(OrderSize -1, 1)
ELSIF PositionPerf(1) >= 0 THEN
OrderSize = OrderSize + 1
ENDIF
ENDIF

//*********************//
REM La grandezza della posizione deve essere determinata dalla variabile OrderSize
nell'intero codice.

V 5.1.1 20170303 www.prorealtime.com 71 / 96


Al l egato C: esemp io dettagli ato di un si stem a di
trading

Allegato C: esempio dettagliato di un sistema di trading

L'esempio di sistema di trading descritto di seguito comunicato a scopo unicamente informativo.


destinato a presentare le funzionalit del servizio ProOrder. Lo scopo di questa presentazione
dunque esclusivamente pedagogico. In nessun caso, questa presentazione di natura puramente
informativa, contiene, raccomanda o suggerisce in qualche maniera una strategia d'investimento da
parte di ProRealTime. Le performances degli anni passati presentate nel presente documento non
sono in nessun caso un indicatore affidabile delle performances future. Ogni sistema di trading pu
esporla a rischi di perdita superiori al suo investimento iniziale.

Questo allegato presenta un esempio dettagliato di un sistema di trading di tipo "Breakout" (o rottura) basato
sull'unit di tempo 15 minuti e applicato al valore mini-contratto CFD France 40 (1 euro per punto) e analizza la
sua performance sugli anni passati tramite ProBacktest.

Performance lorda1 del sistema di trading automatico "Breakout ProOrder" simulato con
ProBacktest, su 7 anni e mezzo.

Performances Capitale iniziale: 2.000,00 (1 luglio 2008)


29,15%
annuali lorde1 Capitale finale: 13.622,60 (31 dicembre 2015)

Guadagno lordo1 su 7,5 +11.622


anni: (+ 581,1%)
2008 2009 2010 2011 2012 2013 2014 2015
Breakout ProOrder +124%2 19,70% 41,90% 23,00% 0,70% 7,60% 18,10% 12,90%
Sistema di trading automatico

Indice CAC 401,3 -27,4%2 +22.3% -3.3% -17% +15.2% +18% -0,50% 8,50%
1
Le performances e guadagni lordi sono calcolati escludendo i costi di 2 2008: anno parziale.
brokeraggio (commissioni o altri costi), questi costi potrebbero ridurre 3 Dati del CAC 40 forniti da
le performances. Euronext Paris.

V 5.1.1 20170303 www.prorealtime.com 72 / 96


Al l egato C: esemp io dettagli ato di un si stem a di
trading

Presentazione del sistema di trading automatico "Breakout ProOrder"


Un sistema "Breakout" classico identifica innanzitutto il massimo e il minimo raggiunti dal prezzo su un lasso
di tempo dato (nel nostro esempio, i primi 30 minuti di quotazione dopo le 9), in seguito piazza un ordine di
acquisto sul livello superiore e un ordine di vendita sul livello inferiore.

Il sistema "Breakout ProOrder" presentato di seguito una versione modificata della strategia classica di
Breakout.

Questo esempio di sistema "BreakOut ProOrder" prende al massimo 2 posizioni al giorno (alle volte una sola
o nessuna) tra le 9.30 e le 21.45. In ogni caso flat dopo le 21.45 in modo da poter conoscere il guadagno o
l'eventuale perdita della giornata a partire da questo momento.

Per approfondire:
Risultati del sistema di trading (storico dal 2008 al 2015)
Descrizione delle idee del sistema di trading

Il codice del sistema di trading


Come testare un codice / sistema di trading

V 5.1.1 20170303 www.prorealtime.com 73 / 96


Al l egato C: esemp io dettagli ato di un si stem a di
trading

Risultati del sistema di trading (storico dal 2008 al 2015)


Nota relativa ai risultati: le cifre presentate si riferiscono agli anni passati. Le performances passate non
sono un indicatore affidabile delle performances future e non sono costanti nel tempo.
L'immagine che segue mostra i risultati del sistema applicato al valore mini-contratto CFD France 40 sui dati
storici dal 1 luglio 2008 al 31 dicembre 2015, ovvero circa 1.650 giorni di borsa simulati con il nostro modulo
ProBacktest.

Come indicato sopra, sulle 1.574 posizioni prese, la media dei guadagni in caso di posizione vincente di
80,33 sul periodo (guadagno massimo di 577) mentre la media delle perdite in caso di posizione perdente
di 36,82 sullo stesso periodo (perdita massima di 99,60). Nel nostro esempio, il numero di posizioni
vincenti (593) inferiore al numero di posizioni perdenti (978) e il montante totale dei guadagni superiore
al montante totale delle perdite.
Stimando le spese dovute allo spread sul mini-contratto CFD France 40 a 1,25 in media per ordine, i costi
commissionali si elevano a 3.935 su tutto il periodo, di conseguenza il risultato finale :
una performance annua di 23,4% al netto dei costi con un capitale di 2.000
o una performance annua di 35,3% al netto dei costi con un capitale iniziale di 1.000.

V 5.1.1 20170303 www.prorealtime.com 74 / 96


Al l egato C: esemp io dettagli ato di un si stem a di
trading

Nota bene:
1) Nell'esempio abbiamo un capitale iniziale di 2.000, ovvero circa due volte la perdita massima costatata
su tutto il periodo dal 2008, se avessimo avviato il sistema di trading nel momento meno favorevole
(perdita massima storica di 1.184). Una simulazione a partire da un capitale meno elevato (ad esempio
300) sarebbe stata possibile dato che il margine attualmente richiesto per un mini-contratto CFD France
40 di 21, e che abbiamo ipotizzato che, dal 1 luglio 2008, giorno della prima posizione presa in questa
simulazione, il sistema avrebbe perso circa 100 e in seguito sarebbe salito in capitale in modo regolare.

2) Nell'esempio, la taglia della posizione non evolve, quando si sarebbe potuto teoricamente ipotizzare che
ogni 2.000 di eventuali plusvalenze ottenute fossero stati aggiunti mini-contratti supplementari a ogni nuova
posizione. In questo modo si sarebbe aumentato il rischio ma anche la performance in maniera
esponenziale. Cominciare la simulazione con 2.000 di capitale e posizioni da 2 mini-contratti (sebbene il
margine richiesto dal broker di soli 42 di capitale) rappresenta ad esempio lo stesso rischio percentuale di
perdite eventuali che si avrebbe, cominciando la simulazione con 4.000 di capitale e posizioni da 4 mini-
contratti.

3) Un CFD un contratto basato sulla differenza delle quotazioni di un attivo tra il momento in cui un
investitore apre una posizione e il momento in cui la chiude. I CFD sono degli strumenti a effetto leva.
Questo significa che l'investitore immobilizza solo una parte del valore totale della sua esposizione al
mercato. I CFD permettono di aumentare in modo significativo l'incremento di capitale di un investimento;
le perdite eventuali possono superare il versamento iniziale. I CFD sono destinati ad una clientela attenta
che ne comprende i rischi e che possiede la capacit finanziaria adeguata a sostenerli.

Descrizione delle idee del sistema di trading

Idea iniziale: il Breakout 30 minuti


Il Breakout classico su 30 minuti identifica il livello pi alto e il pi basso raggiunto dal valore del mini-
contratto CFD France 40 sui primi trenta minuti di quotazione della giornata ovvero tra le 9.00 e le 9.30 per
questo strumento (questo periodo rappresentato da due candele di 15 minuti nell'immagine di seguito a
sinistra) e definisce questi livelli come livello superiore e inferiore.

In seguito, un ordine stop di acquisto piazzato sul livello superiore e un ordine stop di vendita sul livello
inferiore come nell'immagine di seguito a destra:
Se il livello superiore toccato per primo da questo strumento, verr presa una posizione di acquisto
(immagine a destra)
Se il livello inferiore toccato per primo da questo strumento verr presa una posizione di vendita.

Visualizzazione dell'ordine stop di acquisto in Esempio di posizione di acquisto nel caso in cui
verde e dell'ordine vendita in rosso dopo che i il valore raggiunga inizialmente il livello superiore
livelli superiore e inferiore sono definiti. aprendo una posizione di acquisto.
Nota bene:
Il sistema di trading non utilizza obiettivi di guadagno per chiudere le posizioni. Tuttavia, ogni posizione
eventualmente ancora aperta alle 21.45 chiusa per evitare i rischi legati all'esposizione overnight.

V 5.1.1 20170303 www.prorealtime.com 75 / 96


Al l egato C: esemp io dettagli ato di un si stem a di
trading

Seconda idea: verranno prese al massimo due posizioni al giorno


Nel nostro esempio prendiamo al massimo due posizioni al giorno (una all'acquisto e una alla vendita).
Quando uno dei due livelli toccato per primo, una posizione viene presa e il livello opposto diventa uno
stop di protezione che inverte la posizione se viene successivamente toccato.

Esaminiamo tre degli scenari che si sarebbero potuti verificare se una posizione di acquisto fosse
stata presa per prima:

Scenario 1:
1. Una posizione di acquisto +2 presa.
2. Il valore evolve tutto il giorno sopra il livello superiore.
3. La posizione chiusa alle 21.45 con un guadagno.

Scenario 1

Livello
superiore

Scenario 3
21:45

Livello
inferiore

Scenario 2

Scenario 2: Scenario 3:
1. Una posizione di acquisto +2 presa. 1. Una posizione di acquisto +2 presa.

2. Il valore scende fino al livello inferiore. 2. Il valore scende fino al livello inferiore.

3. Uno stop di protezione chiude la posizione con 3. Uno stop di protezione chiude la posizione con
una perdita ed una nuova posizione di vendita -2 una perdita ed una nuova posizione di vendita -2
presa. La posizione di partenza dunque invertita. presa. La posizione di partenza dunque invertita.

4. Il valore continua a scendere e questa seconda 4. Il valore sale nuovamente fino al livello superiore.
posizione chiusa alle 21.45 con un guadagno. La seconda posizione di vendita viene chiusa dallo
stop di protezione con una perdita (senza invertire
la posizione questa volta).

Tutti gli scenari esposti qui sopra sono possibili anche nel senso contrario, quando viene presa per prima
una posizione di vendita.

V 5.1.1 20170303 www.prorealtime.com 76 / 96


Al l egato C: esemp io dettagli ato di un si stem a di
trading

Terza idea: limitare il rischio definendo uno scarto massimo tra i due livelli
Nel nostro esempio di codice, se la distanza tra il livello superiore e il livello inferiore superiore a 58 punti il
sistema di trading non prender posizione in giornata.
Questa condizione stata introdotta per tentare di limitare direttamente il rischio, perch come visto negli
scenari precedenti, il sistema di trading pu perdere teoricamente al massimo due volte la distanza tra il
livello inferiore e superiore.

Livello superiore

Scarto massimo:
Nel nostro esempio di codice, se la distanza tra il livello
superiore e inferiore superiore a 58 punti (parametro
modificabile nel codice) il sistema di trading non prender
posizioni in giornata.

Livello inferiore

Lo scarto massimo un parametro nel codice che pu essere personalizzato seguendo la propensione al
rischio di ogni utilizzatore.

Nota bene:

1) La perdita massima teorica di qui sopra basata sulle esecuzioni di ordini al prezzo degli stop calcolati
dal sistema. In alcuni casi il prezzo di esecuzione reale pu differire dal prezzo dello stop richiesto.

2) Se i livelli superiori e inferiori tra le 9.00 e le 9.30 sono toccati pi volte al giorno tra le 9.30 e le 21.45
(esempio dello scenario 3 il meno favorevole) e questo tutti i giorni a partire dal giorno di avvio del
sistema di trading, i risultati del sistema saranno negativi e il capitale iniziale finir per essere perduto.

3) Il sistema di trading pu eventualmente piazzare una terza posizione nella stessa giornata se l'ordine
d'acquisto e l'ordine di vendita sono entrambi toccati nello stesso periodo di 15 minuti dopo aver definito
questi due livelli.

4) Il nostro modulo di Trading ProOrder consente di simulare facilmente il sistema con differenti valori di
scarto massimo. Questa ottimizzazione di variabili ci mostra che la performance del sistema avrebbe
potuto essere migliore sul periodo analizzato con un valore di scarto massimo pi alto ma ci avrebbe
esposto ad un rischio di perdita per operazione pi importante perch gli ordini di protezione sarebbero
stati piazzati a maggiore distanza dagli ordini di entrata in posizione.

V 5.1.1 20170303 www.prorealtime.com 77 / 96


Al l egato C: esemp io dettagli ato di un si stem a di
trading

Quarta idea: aumentare le possibilit di un'esecuzione favorevole


Nel nostro esempio, siamo partiti dal postulato che i livelli superiori e inferiori sono delle zone di supporto e
resistenza importanti sulle quali numerosi investitori possono aver piazzato ordini. Questo si traduce spesso,
quando il prezzo rompe un pi alto o un pi basso, con un'accelerazione in pochi secondi pi o meno forte
dei prezzi nel senso della rottura per qualche secondo.
Per approfittare di questo eventuale fenomeno di amplificazione della tendenza giusto dopo la rottura e
aumentare le probabilit che i nostri ordini vengano eseguiti in maniera favorevole, abbiamo parametrato il
sistema in modo tale che utilizzi unicamente ordini stop piazzati 4 punti al di sotto del livello superiore e 4
punti al di sopra del livello inferiore (vedere di seguito). Questo parametro di 4 chiamato "DistanzaOrdine"
nel codice del sistema pu essere modificato secondo la scelta di ogni utilizzatore.

Nota bene:

1) Questa condizione riduce di 2 x 4 punti la distanza tra l'ordine di acquisto e l'ordine di vendita e di
conseguenza il rischio massimo del sistema, dato che nel nostro esempio, 50 punti al massimo separano
questi 2 ordini. La perdita massima teorica di questo sistema quindi di 200 al giorno (2 volte la distanza
massima x 50 x 2 posizioni).

2) Nel caso in cui numerosi altri investitori si posizionassero sulle stesse soglie di acquisto e di vendita
nello stesso senso del sistema di trading, possibile modificare il parametro "DistanzaOrdine" (a 4,5 o 5 o
5,5, etc...) per approfittare dell'accelerazione che potrebbe seguire l'esecuzione del proprio ordine.

V 5.1.1 20170303 www.prorealtime.com 78 / 96


Al l egato C: esemp io dettagli ato di un si stem a di
trading

Quinta idea: intervenire unicamente sui breakouts (o rotture) definiti per evitare falsi segnali

Scenario 1: alle 9.30 il valore risulta troppo vicino al livello superiore o inferiore
Nel nostro esempio abbiamo fatto in modo che il sistema non passi ordini quando la quotazione del nostro
valore di riferimento si trova troppo vicino al livello superiore o inferiore al termine del secondo periodo di 15
minuti.
In questo caso il sistema attende 15 minuti supplementari.

Se al termine del nuovo periodo di 15 minuti (ovvero alle 9.45), la quotazione si trova ancora vicina ai livelli, il
sistema aspetta ancora 15 minuti supplementari, e cos di seguito fino a quando i livelli non vengono definiti.
In ogni caso, per un giorno dato, se lo scarto massimo superiore a 58 punti, il sistema non prender
nessuna posizione nella giornata di trading.
Questo parametro di allontanamento dei livelli superiore e inferiore, chiamato "PercentualeMin" nell'esempio
di codice del sistema, definito in questo caso al 30% ma pu essere modificato in funzione delle scelte di
ogni investitore.

Di fianco vediamo che il prezzo di chiusura di ogni


periodo troppo vicino al livello inferiore fino alla
candela delle 10.45.

Il livello inferiore stato dunque abbassato fino alla


chiusura della candela delle 10.45 11.

A questo punto il nostro sistema non prender


posizioni nella giornata di trading, poich la distanza
tra il livello superiore e inferiore superiore a 58 punti.

V 5.1.1 20170303 www.prorealtime.com 79 / 96


Al l egato C: esemp io dettagli ato di un si stem a di
trading

Scenario 2: scarto tra i livelli superiore e inferiore troppo piccolo


Nel nostro esempio, il sistema evita ugualmente le situazioni nelle quali lo scarto tra i livelli superiore e
inferiore troppo piccolo (il breakout potrebbe quindi essere ritenuto non significativo). Il sistema misura
dunque la distanza tra l'ordine di acquisto e l'ordine di vendita: se questa distanza inferiore a 11 punti
(parametro chiamato "AmplitudeMin" e modificabile nel codice), il sistena non prender nessuna posizione
nella giornata di trading.

Sesta idea: non prendere posizione se non rimane tempo sufficiente


Dato che il nostro esempio di codice non pu essere in posizione dopo le 21.45, abbiamo parametrato il
nostro sistema in modo tale che non prenda nuove posizioni dopo le 17.15.

Allo stesso modo, quando una giornata di trading pi breve a causa di una festivit (Natale o San
Silvestro), il sistema non prende posizione.

Possiamo ugualmente personalizzare questo parametro nel codice della strategia per modificare l'ora a
partire dalla quale i segnali vengono ignorati dal sistema.

V 5.1.1 20170303 www.prorealtime.com 80 / 96


Al l egato C: esemp io dettagli ato di un si stem a di
trading

L'esempio di sistema di trading descritto di seguito comunicato a scopo unicamente informativo.


destinato a presentare le funzionalit del servizio ProOrder. Lo scopo di questa presentazione
dunque esclusivamente pedagogico. In nessun caso, questa presentazione di natura puramente
informativa, contiene, raccomanda o suggerisce in qualche maniera una strategia d'investimento da
parte di ProRealTime. Le performances degli anni passati presentate nel presente documento non
sono in nessun caso un indicatore affidabile delle performances future. Ogni sistema di trading pu
esporla a rischi di perdita superiori al suo investimento iniziale.

Approfitti di un supporto alla programmazione tramite l'interfaccia riservata.

Codice del sistema di trading "Breakout ProOrder"

// Non carichiamo mai i dati prima dell'avvio del sistema.


// Cos, il primo giorno, se il sistema avviato nel pomeriggio,
// aspetter l'indomani per eventualmente definire gli ordini di acquisto o di vendita.
DEFPARAM PreLoadBars = 0
// La posizione chiusa alle 21.45, ore di Roma
DEFPARAM FlatAfter = 214500
// Nessuna nuova posizione presa dopo la candela che chiude alle 17.15
OraLimite = 171500
// L'analisi del mercato inizia con la candela a 15 minuti che chiude alle 9.30
OraInizio = 091500
// Le giornate come 1 maggio, 24 e 31 dicembre sono escluse
IF (Month = 5 AND Day = 1) OR (Month = 12 AND (Day = 24 OR Day = 25 OR Day = 26 OR Day = 30 OR Day =
31)) THEN
GiornoTrading = 0
ELSE
GiornoTrading = 1
ENDIF

// Le variabili che possono essere adattate secondo le preferenze di ognuno


TagliaPosizione = 2
ScartoMassimo = 58
ScartoMinimo = 11
DistanzaOrdine = 4
PercentualeMin = 30

// Si inizializza questa variabile una sola volta all'avvio del sistema


ONCE InizioGiornoTrading = -1
// Le variabili che possono evolvere in giornata sono reinizializzate
// alla prima candela di ogni nuova giornata di borsa
IF (Time <= OraInizio AND InizioGiornoTrading <> 0) OR IntradayBarIndex = 0 THEN
SogliaAcquisto = 0
SogliaVendita = 0
PosizioneAcquisto = 0
PosizioneVendita = 0
InizioGiornoTrading = 0
ELSIF Time >= OraInizio AND InizioGiornoTrading = 0 AND GiornoTrading = 1 THEN
// Conserviamo l'indice della prima barra della giornata di borsa
IndiceInizioGiornata = IntradayBarIndex
InizioGiornoTrading = 1

V 5.1.1 20170303 www.prorealtime.com 81 / 96


Al l egato C: esemp io dettagli ato di un si stem a di
trading

ELSIF InizioGiornoTrading = 1 AND Time <= OraLimite THEN


// Per ogni giorno di borsa, determiniamo ogni 15 minuti
// il valore pi alto e il pi basso dello strumento da OraInizio
// tanto che le soglie di acquisto e di vendita non sono definite
IF SogliaAcquisto = 0 OR SogliaVendita = 0 THEN
LivelloSuperiore = Highest[IntradayBarIndex - IndiceInizioGiornata + 1](High)
LivelloInferiore = Lowest [IntradayBarIndex - IndiceInizioGiornata + 1](Low)
// Calcolo dello scarto tra il valore pi alto
// e il pi basso dello strumento da OraInizio
ScartoGiorno = LivelloSuperiore - LivelloInferiore
// Calcolo dello scarto minimo desiderato per considerare una rottura dei prezzi
// del valore pi alto o pi basso come una rottura significativa
DistanzaMin = ScartoGiorno * PercentualeMin / 100
// Calcolo delle soglie di acquisto e vendita per la giornata se le condizioni sono rispettate
IF ScartoGiorno <= ScartoMassimo THEN
IF SogliaVendita = 0 AND (Close - LivelloInferiore) >= DistanzaMin THEN
SogliaVendita = LivelloInferiore + DistanzaOrdine
ENDIF
IF SogliaAcquisto = 0 AND (LivelloSuperiore - Close) >= DistanzaMin THEN
SogliaAcquisto = LivelloSuperiore - DistanzaOrdine
ENDIF
ENDIF
ENDIF
// Creazione degli ordini di acquisto e di vendita allo scoperto per la giornata
// se le condizioni sono rispettate
IF SogliaVendita > 0 AND SogliaAcquisto > 0 AND (SogliaAcquisto - SogliaVendita) >= ScartoMinimo
THEN
IF PosizioneAcquisto = 0 THEN
IF LongOnMarket THEN
PosizioneAcquisto = 1
ELSE
BUY TagliaPosizione CONTRACT AT SogliaAcquisto STOP
ENDIF
ENDIF
IF PosizioneVendita = 0 THEN
IF ShortOnMarket THEN
PosizioneVendita = 1
ELSE
SELLSHORT TagliaPosizione CONTRACT AT SogliaVendita STOP
ENDIF
ENDIF
ENDIF
ENDIF

// Definizione delle condizioni di uscita del mercato quando una posizione di acquisto
// o di vendita allo scoperto presa
IF LongOnMarket AND ((Time <= OraLimite AND PosizioneVendita = 1) OR Time > OraLimite) THEN
SELL AT SogliaVendita STOP
ELSIF ShortOnMarket AND ((Time <= OraLimite AND PosizioneAcquisto = 1) OR Time > OraLimite) THEN
EXITSHORT AT SogliaAcquisto STOP
ENDIF
// Definizione di rischio massimo di perdite per posizione
// in caso di evoluzione sfavorevole del prezzo dello strumento
SET STOP PLOSS ScartoMassimo

V 5.1.1 20170303 www.prorealtime.com 82 / 96


Al l egato C: esemp io dettagli ato di un si stem a di
trading

Come testare un codice / sistema di trading

Modalit portafoglio virtuale (PaperTrading)

Se ha un conto su www.ProRealTime.com, pu eseguire i suoi sistemi di trading su portafoglio virtuale


PaperTrading.

Il PaperTrading le consente di testare il sistema giorno dopo giorno in condizioni reali di mercato, senza
rischiare capitale.

Potr vedere in tempo reale le prese di posizione dei suoi sistemi di trading e testare le sue reazioni nei
confronti del trading automatico. Bisogna tenere presente che possibile reinizializzare il valore del
portafoglio PaperTrading tutte le volte che lo desidera per cominciare una nuova simulazione.

Modalit trading in tempo reale

ProOrder AutoTrading disponibile in modalit tempo reale via l'offerta di brokeraggio IG sponsorizzata da
ProRealTime.

Per saperne di pi sull'apertura di un conto IG sponsorizzato da ProRealTime

Avvertimento: Se crea un sistema di trading attraverso il servizio ProOrder in modalit trading reale,
questo servizio invier dei segnali automaticamente, seguendo i parametri che ha determinato in vista
dell'esecuzione degli ordini corrispondenti senza che le sia richiesta nessuna validazione individuale
di ogni ordine. Il suo sistema sar eseguito automaticamente anche quando il suo computer sar
spento. importante che si assicuri di aver parametrato il sistema in modo tale che non conduca alla
realizzazione di perdite al di l di un montante che pronto ad accettare.
In ogni caso, ProRealTime non sar responsabile delle eventuali perdite subite in seguito
all'esecuzione dei suoi sistemi di trading automatici.
Le ricordiamo che, in ragione dell'effetto leva, i CFD possono esporla a perdite superiori
all'investimento iniziale. Questi prodotti sono destinati ad una clientela attenta, capace di valutare i
rischi e che dispone di una capacit finanziaria tale da supportare tali rischi.

V 5.1.1 20170303 www.prorealtime.com 83 / 96


Glossario

Glossario
A

CODICE IMPLEMENTAZIONE FUNZIONE

ABS ABS(a) Funzione matematica "Valore assoluto"


AccumDistr AccumDistr(price) Designa l'accumulazione distribuzione classica
ADX ADX[N] Indicatore Average Directional Index di n periodi
ADXR ADXR[N] Indicatore Average Directional Index Rate di n
periodi
AND a AND b Operatore logico E
AroonDown AroonDown[P] Designa l'Aroon Down di n periodi
AroonUp AroonUp[P] Designa l'Aroon Up di n periodi
ATAN ATAN(a) Funzione matematica Arco Tangente
AS RETURN x AS "ResultName" Istruzione che serve ad attribuire un nome ad
una linea o indicatore mostrato sul grafico.
Usato con "RETURN"
AT AT (price) Designa l'associazione al prezzo
Average Average[N](price) Media Mobile Semplice di n periodi
AverageTrueRange AverageTrueRange[N](price) Designa la Media mobile lisciata da Wilder del
True Range

CODICE IMPLEMENTAZIONE FUNZIONE

BACKGROUNDCOLOR BACKGROUNDCOLOR(R,V,B Consente di colorare il fondo del grafico o per


,a) una candela
BarIndex BarIndex Numero di barre dall'inizio dei dati caricati (per
un sistema di trading nel caso di ProBacktest o
ProOrder, o in un grafico nel caso di un
indicatore ProBuilder).
Vedi anche: PreLoadBars.
BollingerBandWidth BollingerBandWidth[N](price) Banda passante di Bollinger
BollingerDown BollingerDown[N](price) Supporto della banda di Bollinger
BollingerUp BollingerUp[N](price) Resistenza della banda di Bollinger
BREAK (FOR...DO...BREAK...NEXT) Istruzione per forzare l'uscita da un circolo FOR
o o WHILE
(WHILE...DO...BREAK...WEND)
BUY BUY x SHARES Istruzione di apertura di posizione lunga

V 5.1.1 20170303 www.prorealtime.com 84 / 96


Glossario

CODICE IMPLEMENTAZIONE FUNZIONE

CALCULATEONLASTBARS DEFPARAM Consente di aumentare la velocit alla quale un


CalculateOnLastBars = 200 indicatore viene calcolato, definendo il numero
di candele che presentano il risultato.
CALL myResult=CALL myFunction Permette di richiamare un altro indicatore
CASH BUY x CASH Designa l'importo usato nella posizione
CCI CCI[N](price) o CCI[N] D il Commodity Channel Index
ChaikinOsc ChaikinOsc[Ch1, Ch2](price) Designa l'oscillatore di Chaikin
Chandle Chandle[N](price) Designa il Chande Momentum Oscillator
ChandeKrollStopUp ChandeKrollStopUp[Pp, Qq, Stop di protezione secondo Chande e Kroll in
X] posizione di acquisto
ChandeKrollStopDown ChandeKrollStopDown[Pp, Stop di protezione secondo Chande e Kroll in
Qq, X] posizione di vendita
Close Close[N] Designa il prezzo di chiusura della barra
corrente oppure l'ultimo prezzo registrato
COLOURED RETURN x Permette di personalizzare il colore di una
COLOURED(R,G,B) curva, secondo la convenzione RGB
COS COS(a) Funzione coseno
COUNTOFLONGSHARES COUNTOFLONGSHARES Conta il numero di titoli o lotti nelle posizioni
lunghe
COUNTOFPOSITION COUNTOFPOSITION Conta il numero di titoli o lotti nelle posizioni (o
di acquisto o di vendita)
COUNTOFSHORTSHARES COUNTOFSHORTSHARES Conta il numero di titoli o lotti nelle posizioni
corte
CONTRACT BUY 1 CONTRACT Designa il numero di contratti da acquistare.
Equivale a "Shares"
CROSSES OVER a CROSSES OVER b Operatore boleano che verifica che una curva
passa al di sopra di un'altra
CROSSES UNDER a CROSSES UNDER b Operatore boleano che verifica che una curva
passa al di sotto di un'altra
cumsum cumsum(price) Somma di un prezzo dall'inizio dello storico
mostrato
CumulateOrders DEFPARAM Quando impostato su false, impedisce al code
CumulateOrders=true/false di rafforzare le posizioni e di impostare ordini
multipli per entrare a mercato nella stessa
direzione.
CustomClose CustomClose[N] Costante parametrabile nella finestra propriet
Cycle Cycle(price) Indicatore Cycle

V 5.1.1 20170303 www.prorealtime.com 85 / 96


Glossario

CODICE IMPLEMENTAZIONE FUNZIONE

Date Date[N] Designa la data di ogni barra caricata nel


grafico
Day Day[N] Designa il giorno di ogni barra caricata nel grafico
Days Days[N] Contatore di giorni dal 1900
DayOfWeek DayOfWeek[N] Designa il giorno della settimana di ogni barra
DClose DClose(N) Prezzo di chiusura dell'ennesima giornata
anteriore a quella della barra corrente
DEFPARAM DEFPARAM Permette di definire dei parametri come
CumulateOrders
DEMA DEMA[N](price) Doppia Media Mobile Esponenziale
DHigh DHigh(N) Prezzo pi alto dell'ennesima giornata
precedente a quella della barra corrente
DI DI[N](price) Designa il DI+ meno il DI-
DIminus DIminus[N](price) Designa l'indicatore DI-
DIplus DIplus[N](price) Designa l'indicatore DI+
DLow DLow(N) Il Minimo dell'ennesima giornata anteriore a
quella della barra corrente
DO Vedere FOR e WHILE Istruzione facoltativa dei FOR e WHILE per
l'azione di chiusura
DOpen DOpen(N) Prezzo di apertura dell'ennesima giornata
anteriore a quella della barra corrente
DOWNTO Vedere FOR Istruzione di lettura decrescente per FOR
DPO DPO[N](price) Designa il Detrented Price Oscillator
DRAWARROW DRAWARROW(x1,y1) Disegna una freccia con punta verso il punto
selezionato. Questa funzione e le successive
sono disponibili solo per la versione 10.3 e
successive
DRAWARROWDOWN DRAWARROWDOWN(x1,y1) Disegna una freccia con punta verso il basso
DRAWARROWUP DRAWARROWUP(x1,y1) Disegna una freccia con punta verso l'alto
DRAWBARCHART DRAWBARCHART(open,high, Disegna una barra sul grafico.Apertura,
low,close) chiusura, minimo e massimo possono essere
costanti o variabili
DRAWCANDLE DRAWCANDLE(open,high,low Disegna una candela sul grafico. Apertura,
,close) chiusura, minimo e massimo possono essere
costanti o variabili
DRAWELLIPSE DRAWELLIPSE(x1,y1,x2,y2) Disegna un'ellisse sul grafico
DRAWHLINE DRAWHLINE(y1) Disegna una linea orizzontale sul grafico
DRAWLINE DRAWLINE(x1,y1,x2,y2) Disegna una linea sul grafico

V 5.1.1 20170303 www.prorealtime.com 86 / 96


Glossario

DRAWONLASTBARONLY DEFPARAM Consente di disegnare oggetti disegnati


DrawOnLastBarOnly = true solamente sull'ultima candela
DRAWRECTANGLE DRAWRECTANGLE(x1,y1,x2, Disegna un rettangolo nel grafico
y2)
DRAWSEGMENT DRAWSEGMENT(x1,y1,x2,y2) Disegna un segmento sul grafico
DRAWTEXT DRAWTEXT("your text", x1, Aggiunge una sezione testo nel grafico con il
y1) testo di sua scelta in un punto specifico
DRAWVLINE DRAWVLINE(x1) Disegna una linea verticale sul grafico

CODICE IMPLEMENTAZIONE FUNZIONE

EaseOfMovement EaseOfMovement[I] Designa l'indicatore Ease of Movement


ELSE Vedere IF/THEN/ELSE/ENDIF Istruzione per introdurre la seconda condizione
in alternativa alla prima uscita di IF
ELSEIF Vedere Contrazione di ELSE IF (da inserire all'interno
IF/THEN/ELSIF/ELSE/ENDIF della condizione)
EMV EMV[N] Designa l'indicatore Ease of Movement Value
ENDIF Vedere IF/THEN/ELSE/ENDIF Istruzione di chiusura delle istruzioni
condizionali
EndPointAverage EndPointAverage[N](price) Media Mobile all'ultimo punto
EXITSHORT EXITSHORT x SHARES Istruzione che chiude una posizione short
EXP EXP(a) Funziona matematica esponenziale
ExponentialAverage ExponentialAverage[N](price) Media Mobile Esponenziale

F-G

CODICE IMPLEMENTAZIONE FUNZIONE

FOR/TO/NEXT FOR i=a TO b DO a NEXT Ciclo FOR (elabora tutti i valori con ordini
crescenti (TO) o decrescenti (DOWNTO))
FLATAFTER DefParam FlatAfter = Chiude posizioni, cancella ordini in attesa ed
HHMMSS impedisce di piazzare ordini supplementari dopo
l'orario del giorno specificato (in ore, minuti e
secondi)
FLATBEFORE Defparam FlatBefore = Chiude posizioni, cancella ordini in attesa ed
HHMMSS impedisce di piazzare ordini supplementari
prima dell'orario del giorno specificato (in ore,
minuti e secondi)
ForceIndex ForceIndex(price) Indicatore Force Index che determina chi
controlla il mercato (compratore o venditore)
GRAPH GRAPH myvariable AS Istruzione per visualizzare i valori storici delle
"myvariable" variabili di un ProBacktest sui grafici

V 5.1.1 20170303 www.prorealtime.com 87 / 96


Glossario

CODICE IMPLEMENTAZIONE FUNZIONE

High High[N] Designa il massimo della barra corrente o quella


di n barre precedenti
highest highest[N](price) Designa il prezzo massimo di un insieme di
barre
HistoricVolatility HistoricVolatility[N](price) Designa la volatilit storica o statistica
Hour Hour[N] Designa l'ora di chiusura di ogni barra

I-J-K

CODICE IMPLEMENTAZIONE FUNZIONE

IF/THEN/ENDIF IF a THEN b ENDIF Insieme di istruzioni condizionali senza la


seconda condizione
IF/THEN/ELSE/ENDIF IF a THEN b ELSE c ENDIF Insieme di istruzioni condizionali
IntradayBarIndex IntradayBarIndex[N] Conta il numero di candele sul grafico intraday

CODICE IMPLEMENTAZIONE FUNZIONE

LIMIT BUY AT x LIMIT Istruzione che introduce un ordine Limite


LinearRegression LinearRegression[N](price) Indicatore di regressione lineare
LinearRegressionSlope LinearRegressionSlope[N] Inclinazione di regressione lineare
(price)
LOG LOG(a) Funzione matematica logaritmica
LONGONMARKET LONGONMARKET Indica se avete o no delle posizioni di acquisto
(=lunghe) sul mercato
Low Low[N] Designa il minimo della barra corrente o quella
di n barre precedenti
lowest lowest[N](price) Designa il minimo di un periodo su un insieme
di barre
LOSS Set STOP LOSS x Permette di mettere uno stop loss di x unit dal
prezzo di entrata della posizione
%LOSS SET STOP %LOSS x Permette di mettere uno stop loss di x% dal
prezzo di entrata della posizione
$LOSS SET STOP $LOSS x Permette di mettere uno stop loss di x , $
(nella valuta dello strumento)
LOT BUY 1 LOT Designa il numero di lotti da comprare o
vendere (equivalente a "SHARE")

V 5.1.1 20170303 www.prorealtime.com 88 / 96


Glossario

CODICE IMPLEMENTAZIONE FUNZIONE

MACD MACD[S,L,Si](price) Moving Average Convergence Divergence


(MACD)
MACDline MACDLine[S,L](price) Designa la linea del MACD
MARKET BUY AT MARKET Designa un ordine al prezzo di mercato
MassIndex MassIndex[N] Indicatore Mass Index applicato su N barre
MAX MAX(a,b) Funzione matematica "Massimo"
MedianPrice MedianPrice Media del prezzo massimo e minimo
MIN MIN(a,b) Funzione matematica"Minimo"
Minute Minute Designa il minuto di ogni barra caricata nel
grafico
MOD a MOD b Funzione matematica "Resto della divisione"
Momentum Momentum[I] Momentum (prezzo di chiusura prezzo della
chiusura dell'ennesima barra precedente)
MoneyFlow MoneyFlow[N](price) D il MoneyFlow tra -1 e 1
MoneyFlowIndex MoneyFlowIndex[N] Designa il MoneyFlowIndex
Month Month[N] Designa il mese di chiusura di ogni barra
caricata nel grafico

CODICE IMPLEMENTAZIONE FUNZIONE

NegativeVolumeIndex NegativeVolumeIndex[N] Indicatore dell'indice di volume negativo


NEXT Vedere FOR/TO/NEXT Istruzione da posizionare alla fine del ciclo
"FOR"
NextBarOpen AT MARKET NextBarOpen Designa un ordine eseguito all'apertura della
barra successiva.
NOCASHUPDATE DEFPARAM Permette di non aggiornare il capitale con i
NOCASHUPDATE=true/false guadagni/perdite (Backtest solamente)
NOT Not A Operatore logico NON

V 5.1.1 20170303 www.prorealtime.com 89 / 96


Glossario

CODICE IMPLEMENTAZIONE FUNZIONE

OBV OBV(price) Designa l' "On-Balance-Volume"


ONCE ONCE VariableName = Istruzione che si vuole realizzare una sola volta
VariableValue
ONMARKET ONMARKET Indica se una posizione aperta o no
Open Open[N] Designa il prezzo di apertura della barra
corrente o quella di n barre precedenti
OpenDate OpenDate Data di apertura della barra in corso in formato
YYYYMMDD
OpenDay OpenDay Giorno di apertura della barra in corso
OpenDayOfWeek OpenDayOfWeek Giorno della settimana di apertura della barra in
corso
OpenHour OpenHour di apertura della Ora di apertura della barra in corso nel fuso
barra in corso orario dell'utilizzatore
OpenMinute OpenMinute Minuto di apertura della barra in corso nel fuso
orario dell'utilizzatore
OpenMonth OpenMonth Mese di apertura della barra in corso
OpenTime OpenTime Tempo di apertura della barra in corso nel
formato HHMMSS nel fuso orario
dell'utilizzatore
OpenYear OpenYear Anno di apertura della barra in corso
OR a OR b Operatore logico O

V 5.1.1 20170303 www.prorealtime.com 90 / 96


Glossario

P-Q

CODICE IMPLEMENTAZIONE FUNZIONE

PIPVALUE PipValue Valore in /$ di un pip (o punto) nella valuta


dello strumento. PipValue=Pointvalue
PIPSIZE PipSize Grandezza di un pip (o punto), PipSize=PointSize
POINTVALUE PointValue Valore in /$ di un pip (o punto) nella valuta
dello strumento. PipValue=Pointvalue
POINTSIZE PointSize Grandezza di un pip (o punto), PipSize=PointSize
POSITIONPERF PositionPerf(n) Indica la percentuale di guadagno o di perdita
dell'ennesima posizione chiusa
POSITIONPRICE PositionPrice Indica il prezzo medio della posizione in corso
PRELOADBARS DEFPARAM PRELOADBARS Imposta la quantit massima di barre
= 200 precaricate per il calcolo degli indicatori usati in
un sistema di trading
PriceOscillator PriceOscillator[S,L](price) Indicatore Percertage Price oscillator
PositiveVolumeIndex PriceVolumeIndex(price) Designa l'indicatore Positive Volume Index
PVT PVT(price) Designa l'indicatore "Price Volume Trend"
QUIT QUIT Istruzione per interrompere un sistema di
trading

CODICE IMPLEMENTAZIONE FUNZIONE

R2 R2[N](price) Coefficiente della radice quadrata (tasso di


errore della regressione lineare sul prezzo)
Range Range[N] Calcola il Range (Differenza tra il massimo e il
minimo)
REM REM comment Introduce un commento (non preso in
considerazione nel codice)
Repulse Repulse[N](price) Indicatore Repulse (misura la spinta al rialzo e
al ribasso di ogni candela)
RETURN RETURN Result Istruzione che ritorna il risultato
ROC ROC[N](price) Designa il "Price Rate of Change"
RSI RSI[N](price) Designa l'oscillatore "Relative Strength Index"
ROUND ROUND(a) Funzione matematica "Arrotondamento all'unit"
ROUNDEDUP ROUNDEDUP Arrotondamento all'unit superiore delle quantit
da comprare o vendere
ROUNDEDDOWN ROUNDEDDOWN Arrotondamento all'unit inferiore delle quantit
da comprare o vendere

V 5.1.1 20170303 www.prorealtime.com 91 / 96


Glossario

CODICE IMPLEMENTAZIONE FUNZIONE

SAR SAR[At,St,Lim] Designa l'indicatore Parabolic SAR


SARatdmf SARatdmf[At,St,Lim](price) Designa l'indicatore Smoothed Parabolic SAR
SELL SELL x SHARES Istruzione per chiudere una posizione lunga
SELLSHORT SELLSHORT x SHARES Istruzione per aprire una posizione corta
SET SET Designa il tipo di ordine: limite o stop
SHARES BUY x SHARES Designa il numero di azioni da comprare o
vendere
SHORTONMARKET SHORTONMARKET Indica se ci sono posizioni corte aperte o no
SIN SIN(a) Funzione matematica "Seno"
SGN SGN(a) Funzione matematica "Segno di" ( positivo o
negativo)
SMI SMI[N,SS,DS](price) Designa lo Stochastic Momentum Index
SmoothedStochastic SmoothedStochastic[N,K] Designa uno Stocastico lisciato
(price)
SQUARE SQUARE(a) Funzione matematica "Elevazione al quadrato"
SQRT SQRT(a) Funzione matematica "Radice quadrata"
STD STD[N](price) Funzione statistica "scarto-tipo"
STE STE[N](price) Funzione statistica "errore standard"
Stochastic Stochastic[N,K](price) Linea %K dello stocastico
STOP SET STOP LOSS Istruzione per creare un ordine stop
summation summation[N](price) Somma del prezzo delle ultime N candele
Supertrend Supertrend[STF,N] Designa il Super Trend

V 5.1.1 20170303 www.prorealtime.com 92 / 96


Glossario

CODICE IMPLEMENTAZIONE FUNZIONE

TAN TAN(a) Funzione matematica "Tangente"


TARGET SET TARGET PROFIT x Istruzione per impostare un ordine target ad un
prezzo x
TEMA TEMA[N](price) Media Mobile Esponenziale Tripla
THEN Vedere IF/THEN/ELSE/ENDIF Istruzione che segue la prima condizione di "IF"
TICKSIZE TICKSIZE D il ticksize dello strumento (la pi piccola
variazione di prezzo possibile)
Time Time[N] Rappresenta l'orario di ogni barra caricata nel
grafico
TimeSeriesAverage TimeSeriesAverage[N](price) Serie di medie mobili temporali
TO Vedere FOR/TO/NEXT Istruzione direzionale nel ciclo "FOR"
Today Today[N] Data della barra di n periodi che precede la
barra corrente
TomorrowOpen AT MARKET TomorrowOpen Designa un ordine eseguito all'apertura della
giornata successiva
TotalPrice TotalPrice[N] (Chiusura + Apertura + Massimo + Minimo)/4
TR TR(price) Designa l'indicatore True Range
TRADEINDEX TRADEINDEX(n) Indica l'indice della barra sulla quale stato
eseguito l'ultimo ennesimo ordine
TRADEPRICE TRADEPRICE(n) Indica il livello del prezzo dell'ultimo ennesimo
ordine eseguito
TRAILING SET STOP TRAILING x Permette di posizionare un trailing stop di x
unit dal prezzo di entrata della posizione
%TRAILING SET STOP %TRAILING x Permette di posizionare un trailing stop di x%
unit dal prezzo di entrata della posizione
$TRAILING SET STOP $TRAILING x Permette di posizionare un trailing stop di x , $
(nella valuta dello strumento)
TriangularAverage TriangularAverage[N](price) Media Mobile Triangolare
TRIX TRIX[N](price) Tripla Media Mobile Esponenziale Lisciata
TypicalPrice TypicalPrice[N] Prezzo Tipico (media dei massimi, minimi e
chiusura)

V 5.1.1 20170303 www.prorealtime.com 93 / 96


Glossario

CODICE IMPLEMENTAZIONE FUNZIONE

Undefined a = Undefined Per lasciare una variabile indefinita

CODICE IMPLEMENTAZIONE FUNZIONE

Variation Variation(price) Differenza tra la chiusura dell'ultima barra e la


chiusura della barra corrente in %
Volatility Volatility[S, L] Designa la volatilit di Chaikin
Volume Volume[N] Designa l'indicatore volume
VolumeOscillator VolumeOscillator[S,L] Designa l'oscillatore volume
VolumeROC VolumeROC[N] Designa il volume del Rate Of Change

CODICE IMPLEMENTAZIONE FUNZIONE

WeightedAverage WeightedAverage[N](price) Designa la Media Mobile Ponderata


WeightedClose WeightedClose[N] Media tra il prezzo di chiusura, il massimo e il
minimo
WEND Vedere WHILE/DO/WEND Istruzione finale del ciclo WHILE
WHILE/DO/WEND WHILE (condition) DO (action) Ciclo "WHILE"
WEND
WilderAverage WilderAverage[N](price) Rappresenta la media mobile di Wilder
Williams Williams[N](close) Indicatore %R di Williams
WilliamsAccumDistr WilliamsAccumDistr(price) Indicatore Accumulazione/Distribuzione di
Williams

CODICE IMPLEMENTAZIONE FUNZIONE

XOR a XOR b Operatore logico esclusivo O

V 5.1.1 20170303 www.prorealtime.com 94 / 96


Glossario

CODICE IMPLEMENTAZIONE FUNZIONE

Year Year[N] Anno della barra di n periodi prima della barra


corrente
Yesterday Yesterday[N] Data del giorno che precede la barra di n periodi
prima della barra corrente

CODICE IMPLEMENTAZIONE FUNZIONE

ZigZag ZigZag[Zr](price) Rappresenta l'indicatore Zig-Zag introdotto nella


teoria delle onde di Eliott
ZigZagPoint ZigZagPoint[Zp](price) Rappresenta l'indicatore Zig-Zag nella teoria
delle onde di Eliott calcolata a Zp punti

Operatori

CODICE FUNZIONE CODICE FUNZIONE

+ Somma < Strettamente inferiore


- Sottrazione > Strettamente superiore
* Moltiplicazione <= Inferiore
/ Divisione >= Superiore
= Uguale // Introduce una linea di commenti
<> Differenza

V 5.1.1 20170303 www.prorealtime.com 95 / 96


www.prorealtime.com

Potrebbero piacerti anche