PIATTAFORMA PROREALTIME

PROBACKTEST


1 - PROBACKTEST

 

Se siete traders che utilizzano solamente i dati giornalieri come base per il vostro trading, prorealtime è sicuramente la piattaforma che fa per voi.

Vi sarà utilissima per analizzare i mercati e sperimentare le vostre strategie, fare i backtest e poi immettere gli ordini sulla piattaforma del vostro Broker, e questo credetemi è già un grandissimo vantaggio.

I delay tra dati giornalieri della piattaforma e quelli del broker non dovrebbero essere rilevanti.

 

Probacktest ci serve ai fini di ricavare le statistiche delle varie strategie long o short term che devono fungere principalmente da supporto psicologico per la nostra operatività di trading.

 

Grazie a questo programma possiamo renderci conto delle possibilità e delle potenzialità che realmente hanno i nostri sistemi, grazie al profit factory, alle percentuali di vincite e di perdite ed a tutta una serie di statistiche relative al money management.

 

Non solo, ma possiamo paragonare i diversi sistemi l'uno con l'altro, ottimizzare i parametri da utilizzare nel trading reale su tutti i mercati disponibili, anche senza utilizzare il trading automatico del software, cioè Proorder.

Possiamo fare una lista dei parametri adatti per ogni tipo di mercato:

forex, azioni, commodities e indici.

Una volta che sappiamo cosa cercare, lo facciamo tramite proscreener quando i mercati sono chiusi.

 

Inoltre, probacktest è utilissimo per identificare i parametri dominanti dei vari indicatori che possono non essere affatto i valori di default.

Per esempio, non è detto che il periodo dominante dell'RSI sia 14 per un determinato mercato, come non è detto che l'ipercomprato l'ipervenduto siano ai livelli di 70 e 30.

Per capire quali siano, basta impsotare un trading system che ottimizza questi 3 parametri in modo da vedere quali siano i valori più adatti per quel mercato.

Possiamo per esempio vedere quale sia la media mobile che funziona meglio, facendo un sistema di incrocio col prezzo.

 


2 - FINESTRA DI PROGRAMMAZIONE

 

Prima di iniziare consiglio sempre di vedere i video offerti dal sito prorealtime, scaricare la guida in PDF probacktest & proorder, leggere la pagina dedicata ai sistemi automatici, e visitare il sito prorealcode.

 

Vediamo ora nel dettaglio il procedimento di impiego di Probacktest nella scrittura dei programmi di trading o EA - Expert Advisors (consiglieri esperti).

ln linguaggio è sempre Probuilder.

 

Avviate la piattaforma ed il vostro piano di lavoro.

Il procedimento è lo stesso che abbiamo visto per la creazione di indicatori personalizzati.

 

Come per inserire un indicatore, cliccate sulla stessa icona in alto a destra della finestra prezzo e successivamente sulla sezione di destra della finestra di controllo "backtesting e trading automatico".

 

A sinistra della finestra verranno visualizzati i vostri trading systems salvati e quelli predefiniti di esempio che vi fornisce la piattaforma.

Anche in questo caso, avete le stesse opzioni:

Nuovo, Modifica, Duplica, Cancella, Importa, Esporta.

 

 

Per creare un nuovo trading system, dovete cliccare su nuovo e si apre la finestra di programmazione.

 

 

Anche in questo caso, potete utilizzare la creazione semplificata cliccando sugli indicatori del grafico per definire le condizioni ed immettere le operazioni.

 

Vedete che le operazioni da fare sono essenzialmente 6.

 

Acquisto e vendita per le posizioni long.

Vendita allo scoperto e riacquisto per le posizioni short.

Stop loss e trailing profit.

Orari di trading.

 

Oppure, possiamo inserire direttamente i codici noi stessi, scrivendoli nella finestra di programmazione, ed è ciò che faremo.

Clicchiamo sulla seconda opzione: creazione per programmazione.

 

Vediamo subito che la finestra di default inserisce le istruzioni base.

Dobbiamo semplicemente inserire al posto della dicitura "TueCondizioni" appunto, le condizioni del nostro sistema.

 

 

Sulla sezione di destra, dobbiamo settare alcuni parametri relativi al money management e cioè:

 

1) Il capitale iniziale (del conto di trading che è relativo alla valuta dello strumento su cui stiamo lavorando).

2) Misura per lotto, solo per il forex (microlotto 1000, minilotto 10000, lotto 100000 o multipli o divisori, ecc....)

3) Commissione per ordine (solitamente per i titoli azionari).

4) Spread.

5) Data: intervallo del periodo di test.

 

Quando è tutto impostato potete spuntare la casella "mantieni la finestra aperta" ed eseguire il comando "Probacktesta il mio sistema".

 

Possiamo inserire le variabili come abbiamo visto con gli indicatori probuilder ed effettuare le ottimizzazioni.

 

Le ottimizzazioni ci permettono di vedere quali sono i parametri che danno le migliori performance in termini di profitto.

In seguito vedremo un esempio con i risultati dei sistemi visualizzati sul grafico e sulla tabella delle statistiche.

 


3 - FASI DI SCRITTURA DI UN SISTEMA

 

FASE 1

Per prima cosa dobbiamo settare la possibilità di eseguire solo un ordine oppure più ordini successivamente, cioè l'istruzione del CUMULO DI ORDINI.

Il comando è DEFPARAM CumulateOrders:

 

DEFPARAM CumulateOrders = false

Con questa istruzione eseguiamo solo un ordine.

DEFPARAM CumulateOrders = true

Con questa istruzione eseguiamo più ordini.

Se non viene specificato, l'istruzione di default è False.

 

Possiamo settare inoltre, il numero di barre da caricare per il backtest ed affinchè il nostro sistema funzioni in reale:

DEFPARAM preloadbars=10000

 

Oppure, per la simulazione ed il trading reale in intraday, possiamo selezionare l'intervallo di tempo in cui il nostro sistema deve oparare:

DEFPARAM flatbefore=hhmmss

il sistema non deve essere operativo prima di un certo orario (ora, minuti, secondi) per esempio: 09:00:00. Il sistema aprirà operazioni a partire dalle 09:00:00.

DEFPARAM flatafter=hhmmss

il sistema non deve essere operativo dopo un certo orario (ora, minuti, secondi) per esempio: 22:00:00. Il sistema chiuderà tutte le operazioni in essere alle 22:00:00.

 

________________________________________________________________________________________

 

FASE 2

Il secondo step è quello dell'inserimento di tutti gli indicatori e delle condizioni come abbiamo fatto con proscreener e probuilder.

Possiamo definirli come C1, C2, C3 oppure con qualsiasi altro nome a nostro piacimento, l'importante è che successivamente vengano richiamati con gli stessi nominativi nelle istruzioni di acquisto e vendita.

 

________________________________________________________________________________________

 

FASE 3

In seguito, come abbiamo visto nella scaletta della programmazione semplificata immettiamo le istruzioni secondo lo schema generale seguente:

 

1) acquisto long, mediante l'istruzione:

// Condizioni per entrare su posizioni long

IF NOT LongOnMarket AND TueCondizioni THEN

BUY 1 CONTRACTS AT MARKET

ENDIF

 

2) di vendita (uscita da posizione long), mediante l'istruzione:

// Condizioni per uscire da posizioni long

If LongOnMarket AND TueCondizioni THEN

SELL AT MARKET

ENDIF

 

3) di vendita allo scoperto short, mediante l'istruzione:

// Condizioni per entrare su posizioni short

IF NOT ShortOnMarket AND TueCondizioni THEN

SELLSHORT 1 CONTRACTS AT MARKET

ENDIF

 

4) di riacquisto (uscita da posizione short), mediante l'istruzione:

// Condizioni per uscire da posizioni short

IF ShortOnMarket AND TueCondizioni THEN

EXITSHORT AT MARKET

ENDIF

 

5) eventuale stop loss, trailing profit e target, mediante le seguenti istruzioni:

// Stop e target: Inserisci qui i tuoi stop di protezione e profit target

VEDI PUNTO 7

SET STOP XLOSS X

SET TARGET XPROFIT X

SET TRAILING XPROFIT X

 

Possiamo anche impostare solamente un sistema long oppure uno short.

Inoltre possiamo omettere il punto 5, in quanto nelle istruzioni 2 e 4 sono già previste le uscite dai trades long e short.

 

 


4 - ISTRUZIONI IMPORTANTI

 

Vediamo ora alcune istruzioni importanti per la programmazione di probacktest che abbiamo già visto, in parte, nelle istruzioni precedenti.

 

1) ENTRATE E USCITE DAL MERCATO.

 

I comandi sono:

BUY, per acquistare o andare long.

SELL, per uscire da una posizione long (rivendita).

SELLSHORT, per vendere o andare short.

EXITSHORT, per uscire da una posizione short (riacquisto).

 

Posso inserire un ordine STOP o LIMIT.

Stop, se il prezzo di acquisto è superiore al prezzo corrente od il prezzo di vendita inferiore al prezzo corrente.

Limit, se il prezzo di acquisto è inferiore od il prezo di vendita superiore rispetto al prezzi corrente.

 

Se utilizzo il comando AT MARKET, vado direttamente a mercato quando il segnale di acquisto o di vendita impostato si verifica.

In realtà, non si va subito a mercato, ma all'apertura della barra successiva, cioè NEXTBAROPEN, e questo accade sempre con i sistemi di trading automatici di Proorder.

 

Se compro specificando un livello di prezzo, devo specificare quel livello.

Ad esempio, se il mio sistema prevede di comprare su un nuovo massimo mensile (se il backtest è impostato su timeframe daily), inserisco una condizione, per esempio:

 

MASSIMO20=high[0]>=highest[20](high)[1]

 

L'istruzione di acquisto sarà:

IF NOT LongOnMarket AND MASSIMO20 THEN

BUY 1 CONTRACTS AT MARKET

ENDIF

 

Cioè, traducendo: se non sono a mercato con un trade long, ogni qualvolta il prezzo fa un nuovo massimo a 20 periodi o giorni, il sistema genera un segnale di acquisto e all'APERTURA DELLA BARRA SUCCESSIVA acquisterà 1 contratto come da me specificato.

Se ho impostato il cumulo di ordini su TRUE, questo avverrà ad ogni massimo successivo mensile.

Se ho impostato FALSE, avverrà solo la prima volta fino alla chiusura del trade.

________________________________________________________________________________________

 

2) ISTRUZIONE DI BREAKOUT DI PREZZO E DI PULLBACK.

 

Con PROBACKTEST e PROORDER abbiamo anche la possibilità di comprare a BREAKOUT su rottura di resistenze o di vendere a rotture su supporti definiti dalle linee del canale di Donchian.

 

Per farlo basta semplicemente settare la condizione di massimo o minimo del canale di donchian ma non riferito al giorno prima (quindi senza il [1] finale) e cioè:

 

C1=HIGHEST[N](HIGH)

C2=LOWEST [N](LOW)

 

Quando mettiamo l'ordine di acquisto inseriremo il seguente codice:

 

// se il prezzo tocca la resistenza C1

If C1 then

// compra 1 contratto con un ordine stop in quel punto.

BUY 1 shares AT C1 STOP
ENDIF

 

Come vedete, ordino che non appena il prezzo tocca la resistenza a N periodi il mio sistema backtest compra a quel livello di prezzo C1 e non all'apertura della candela successiva.

Il contrario per l'operazione short andando a vendere su C2 con un ordine stop al punto C2, cioè quando si verifica il minimo su cui andare a breakdown.

 

Per acquistare quando il prezzo tocca il massimo od il minimo della candela precedente si utilizzano i seguenti parametri:

C1=HIGHEST[1](HIGH)

C2=LOWEST [1](LOW)

 

Lo stesso può essere fatto sui tutti i tipi di canali, come il canale di donchian sui prezzi di chiusura, le bande di bollinger od il canale di Keltener, le envelopes, ecc...basta determinare i codici del canale e inserire l'istruzione base che ho scritto sopra per

negoziare a breakout.

 

Possiamo anche impostare un ordine limite e comprare su ritraccciamenti (PULLBACKS).

Nell'esempio sopra:

 

// se il prezzo tocca il supporto C2

If C2 then

// compra 1 contratto con un ordine limit in quel punto.

BUY 1 shares AT C2 LIMIT
ENDIF

_________________________________________________________________________________________

 

3) ISTRUZIONE DI INCROCIO.

 

Le istruzioni di incrocio sono:

 

CROSSES OVER e CROSSES UNDER.

Queste istruzioni sono molto utili perchè permettono di comprare o vendere a seguito dell'incrocio di un livello di valore dall'alto verso il basso (crosses under) o dal basso verso l'altro (crosses over).

Viene utilizzato per le medie mobili, ma anche per tutti gli altri indicatori che hanno livelli di valori per esempio:

l'incrocio dello 0 nel ROC, dei livelli di ipercomprato e ipervenduto degli oscillatori, dei massimi e minimi dei canali di Donchian, oppure delle bande di Bollinger.

 

Esempio:

if average[5](close) crosses over average[20](close) then

buy 1 shares at market

 

if rsi[14](close) crosses under 70 then

sell 1 shares at market

 

if roc[20] (close) crosses over 0 then

buy 10000 cash at market

 

_________________________________________________________________________________________

 

 

4) QUANTITA'

Ci sono 2 modalità per definire l'ammontare della quantità di negoziazione:

 

1) SHARES o CONTRACTS, cioè contratti o lotti.

SHARES rappresenta il lotto minimo, per le azioni equivale ad 1 azione e per le commodities e gli indici ad 1 contratto.

Mentre per il forex può essere impostato il lotto di acquisto:

1000 equivale ad 1 microlotto, 10000 ad un minilotto, 100000 ad un lotto.

L'istruzione è:

BUY 10 SHARES AT MARKET

Se ho impostato 1000 come misura per lotto (solo per il forex) significa che ogni SHARE equivale a 1.000 $ della valuta quotata.

 

Invece, per determinare la quantità di azioni, contratti forex, commodities o indici acquistabili per trade in base ad una % di rischio, per esempio il 2% dobbiamo utilizzare la formula:

RISCHIO/(ENTRY - STOP LOSS) x una posizione long.

RISCHIO/(STOP LOSS - ENTRY) x una posizione short.

Nell'esempio visto sopra scriverò:

BUY 200/(ENTRY - STOP LOSS) SHARES AT MARKET

Definendo prima i livelli di ENTRY e di STOP LOSS del nostro sistema mediante indicatori e condizioni.

Consiglio di utilizzare quindi la formula con SHARES per i backtest.

 

2) Oppure possiamo utilizzare il codice CASH, cioè soldi.

Con questo comando posso determinare l'ammontare della mia scommessa mediante una % del conto di trading impostato nella sezione di destra della finestra di programmazione.

Per esempio, se il conto è di 10.000 $ e voglio negoziare il 10% per trade, imposto 1.000 $, cioè:

1000 CASH AT MARKET.

Comprerà cioè l'ammontare equivalente a 1.000 $ in azioni o contratti.

Se compro un titolo al prezzo di 50$, comprerò quindi 20 azioni,

se compro un titolo al prezzo di 5$, ne comprerò 200.

_________________________________________________________________________________________

 

5) VARIABILI DI STATO DELLE POSIZIONI.

 

Ci sono 3 variabili di stato delle posizioni:

 

ONMARKET, identifica le posizioni aperte, sia long che short.

LONGONMARKET, identifica le posizioni long aperte.

SHORTONMARKET, identifica le posizioni long aperte.

 

Queste variabili sono introdotte con l'istruzioni IF e IF NOT prima di un'entrata in posizione come abbiamo visto nello schema delle fasi generali:

 

IF LONGONMARKET AND.....se si ha aperta una posizione long....

IF NOT LONGONMARKET AND.......se non si ha aperta una posizione long....

_________________________________________________________________________________________

 

6) GRANDEZZA DELLE VARIABILI DELLA POSIZIONE E CUMULI DI ORDINI.

 

Abbiamo già visto l'istruzione del cumulo di ordini in precedenza.

Ad esso sono legate le istruzioni per determinare la grandezza della posizione in lotti o contratti e quindi la definizione di quante volte successivamente entrare a mercato:

 

COUNTOFPOSITION : grandezza della posizione totale.

Positivo se posizione lunga aperta, negativo se posizione corta aperta.

COUNTOFLONGSHARES : grandezza di una posizione lunga se c'è una posizione lunga aperta, altrimenti 0.

COUNTOFSHORTSHARES: grandezza di una posizione corta, se c'è una posizione corta aperta, altrimenti 0.

 

Queste istruzioni vanno aggiunte alle istruzioni IF LONGONMARKET per determinare acquisti e vendite.

 

Per esempio, se determinate l'ammontare del lotto FOREX a 1000, significa che 1 contratto o share equivale a 1.000 $ della valuta base.

Quando vogliamo limitare l'acquisto a 5 contratti o 5.000 $, dovremo specificare nel codice di acquisto:

 

IF COUNTOFLONGSHARES < 5 AND TueCondizioni THEN

BUY 1 CONTRACTS AT MARKET

ENDIF

 

Nel codice di entrata in posizione short:

 

IF COUNTOFSHORTSHARES < 5 AND TueCondizioni THEN

BUY 1 CONTRACTS AT MARKET

ENDIF

 

In questo modo sostituiamo quindi il codice IF NOT LONGONMARKET con i codici delle posizioni massime long e short.

 

ATTENZIONE:

Quando non definite il lotto dei contratti nella sezione di destra, ma utilizzate la formula:

BUY 200/(ENTRY - STOP LOSS) SHARES AT MARKET, in questo caso dovete capire che la definizione del lotto negoziabile non è fissa ma è variabile.

Quindi, non abbiamo per esempio nelle azioni un LOTTO specifico ma azioni il cui numero varia in base ai livelli di prezzo di ENTRY e di STOP LOSS.

 

Quindi, in base al prezzo del titolo dobbiamo fare una stima della posizione totale che vogliamo assumere in quel particolare mercato e dobbiamo porre un limite di posizione totale in $.

Ad esempio un controvalore di 10.000 azioni acquistabili totalmente od un controvalore di 10.000 $ di lotti forex.

In questo caso scriveremo questo:

 

IF COUNTOFLONGSHARES < 10000 AND TueCondizioni THEN

BUY 1000 CONTRACTS AT MARKET

ENDIF

IF COUNTOFSHORTSHARES < 10000 AND TueCondizioni THEN

BUY 1000 CONTRACTS AT MARKET

ENDIF

 

Negozierete 1000 azioni o contratti per posizione fino ad un totale di 10000 azioni.

_________________________________________________________________________________________

 

7) TRADEINDEX, TRADEPRICE e BARINDEX

 

 

- TRADEINDEX consente di accedere alla barra dell'ennesimo ordine precedente eseguito e cioè mediante il comando: TRADEINDEX(N).

 

- TRADEPRICE trova invece il prezzo della transazione precedentemente eseguita mediante il comando: TRADEPRICE (N).

Tradeprice(1) rappresenta il prezzo di entrata precedente.

Quest'ultima è utile per esempio quando vogliamo entrare con una seconda posizione quando la prima è a break-even, cioè quando il trailing profit (stop loss) settato da un indicatore trailing lineare come il supertrend è a livello dell'entrata del trade precedente.

 

Per fare questo dobbiamo aggiungere le seguenti condizioni:

 

C1=stoploss>=tradeprice(1) (per un trade long)

C2=stoploss<=tradeprice(1) (per un trade short)

 

Con le seguenti istruzioni di acquisto:

 

// prima posizione

if not longonmarket and TueCondizioni then
buy 1 shares at market
endif
// long posizioni successive
if longonmarket and C1 and TueCondizioni then
buy 1 shares at market
endif

 

Lo stesso per le posizioni short ma con la condizione C2.

 

- BARINDEX, si riferisce alla barra corrente e di solito è utilizzata con TRADEINDEX per identificare per quante barre deve rimanere aperta una posizione:

 

if longonmarket and (barindex-tradeindex)>=3 then

sell at market

endif.

 

In questo caso, la nostra posizione durerà 3 barre, cioè chiuderà all'apertura della quarta candela "at market", cioè sempre nextbaropen.

 

_________________________________________________________________________________________

 

8) TIME.

 

Altra importantissima funzione per il trading intraday è TIME.

Con questa funzione, possiamo ordinare al sistema di compiere operazioni entro una determinata fascia oraria, sia per le operazioni long che quelle short.

Per esempio se vogliamo che le operazioni long siano svolte dalle 15:00 alle 18:00, impostiamo una funzione mediante IF (TIME=>15:00 and TIME <=18:00 and condizioni.....).

Oppure solo in una certa ora: if time=15:00 and condizioni......

In questo caso, le operazioni si aprono solo in quelle ore, ma rimangono attive anche oltre se non dichiarate ulteriormente.

 

Da non confondere con la funzione:

DEFPARAM flatbefore=hhmmss e DEFPARAM flatafter=hhmmss che indicano le fasce orarie entro le quali i trading system sono validi durante la giornata.

 

 _________________________________________________________________________________

 

9) STOP LOSS, TARGET PROFIT E TRAILING PROFIT.

 

E' possibile definire le grandezze dei parametri mediante:

 

- Unità di prezzo. (NESSUNA DICHIARAZIONE)

- Punti o pips. (DICHIARATA CON SIMBOLO P)

- % di distanza. (DICHIARATA CON SIMBOLO %)

- $ di distanza. (DICHIARATA CON SIMBOLO $)

Vedi sotto.

 

Stop loss, target e trailing verranno calcolati dal punto di entrata in un trade, e quindi dall'apertura della barra successiva rispetto al segnale di trading impostato se AT MARKET.

A meno che non si entri a breakout di un livello di prezzo con ordini STOP.

 

Come abbiamo visto in strumenti operativi i punti o pips dei vari strumenti dipendono dai decimali della quotazione.

Per calcolare i Pip, le unità di prezzo vanno moltiplicate per i decimali del prezzo.

Per esempio nel forex 1 pip equivale a 0.0001 unità di prezzo perchè:

0.0001*10.000=1.

 

Negli indici senza decimali il punto riguarderà l'unità intera.

Negli indici, azioni o commodities con 2 decimali dopo la virgola il punto sarà al centesimo.

Es: distanza tra 50,20 e 50,80 = 60 punti = (50,80-50,20)*100

 

Per settare i comandi dobbiamo usare la seguente formula:

 

SET STOP LOSS X

SET STOP pLOSS X

SET STOP %LOSS X

SET STOP $LOSS X

 

SET TARGET PROFIT X

SET TARGET pPROFIT X

SET TARGET %PROFIT X

SET TARGET $PROFIT X

 

SET TRAILING PROFIT X

SET TRAILING pPROFIT X

SET TRAILING %PROFIT X

SET TRAILING $PROFIT X

 

Questi codici vanno scritti alla fine della programmazione e calcolano direttamente la direzione e la distanza dal punto di entrata nel trade.

 

Va prima definita la distanza dal punto di entrata allo stop loss mediante una condizione od un indicatore nell'elenco principale oppure direttamente nel codice finale.

La distanza può essere definita in unità, in pips, in % o in $.

 

Per esempio se il vostro sistema ha uno stop loss iniziale pari a 2 volte il valore dell'ATR che è espresso in unità di prezzo (quindi senza dichiarazioni nei codici), può essere definito nell'elenco a priori:

 

Sloss=averagetruerange[14](close)*2

 

e richiamato alla fine sostituendolo alla X:

SET STOP LOSS Sloss

 

oppure può essere scritto direttamente alla fine:

 

SET STOP LOSS avreagetruerange[14](close)*2

 

In questo modo il programma setta lo stop loss ad una distanza dal prezzo di entrata pari a 2 volte l'ATR (in unità).

 

Se avete utilizzato invece l'opzione della determinazione del rischio in $, cioè per esempio:

BUY 200/(ENTRY - STOP LOSS) CASH AT MARKET

basta settare lo stop loss pari al rischio di 200$ e cioè:

SET STOP $LOSS 200

poichè il rischio è dato dalla distanza tra entry e stop loss.

 

Lo stesso principio vale per il target profit.

Se voglio impostare un target profit pari a 3 volte il mio rischio, imposterò a seconda dei 2 casi:

 

SET STOP LOSS averagetruerange[14](close)*6

oppure:

SET TARGET $PROFIT 600

 

Quindi è fondamentale indicare i parametri giusti dell'indicatore di stop loss, trailing o target e l'unità di misura: unità, punti, % o cash $

 

Un ulteriore opzione è quella di correlare STOP LOSS E TRAILING PROFIT insieme.

 

C'è la possibilità di impostare uno stop loss iniziale e farlo diventare un trailing profit quando il prezzo raggiunge un certo livello.

E' possibile settare stop e trailing di diversi tipi, per esempio:

 

SET STOP LOSS x TRAILING y

SET STOP LOSS x pTRAILING y

SET STOP LOSS x $TRAILING y

SET STOP LOSS x %TRAILING y

 

e tutte le altre combinazioni, in totale sono 16.

 

Per esempio:

 

SET STOP pLOSS 20 pTRAILING 50

 

In questo caso setto uno stop loss ad una distanza di 20 punti dal prezzo di entrata nel trade, ad esempio a 5000.

Lo stop loss è quindi posizionato a 4880.

Non appena la distanza tra stop loss e prezzo corrente diventa di 50 punti, scatta il trailing profit, cioè a 5030.

Quindi se successivamente il prezzo sale fino a 5100 il trailing profit si muove fino a 5050 rimanendo alla distanza di 50 punti.

Qualora il prezzo scenda a 5080, il trailing profit rimane a 5050.

 

N.B: IMPORTANTE!

Stop loss, target profit e trailing profit possono essere inclusi più specificatamente dopo le istruzioni di buy (acquisto) e sellshort (vendita allo scoperto) e prima dell'istruzione ENDIF.

In questo caso, potete settare parametri diversi per trades long e short, per esempio:

 

//long position entry
if not longonmarket and c1 then
buy 1 contracts at market
set stop $loss 50
set target $profit 200
set stop $trailing 100
endif

 

//short position entry
if not shortonmarket and c3 then
sellshort 10 contracts at market
set stop $loss 30
set target $profit 150
set stop $trailing 50
endif

 _________________________________________________________________________________

 

10) RICHIAMO DI INDICATORI PERSONALIZZATI

 

Come nel caso di Proscreener, anche con Probacktest possiamo richiamare indicatori personalizzati.

E' possibile, quando si ha progettato un indicatore personalizzato e quindi salvato, richiamare l'indicatore tramite la funzione "CALL" o richiamo.

Ciò va fatto inserendo nello screener la condizione con il richiamo del nostro indicatore e con i parametri da cui è costituito.

Esempio:

C1=CALL "nomeindicatore[a,b](price)"<=>valore

Le virgolette comprendono il nome ed i parametri.

 

 _________________________________________________________________________________

 

Possiamo ora scrivere il nostro modulo di programmazione base, che ci servirà come "modello" dei nostri sistemi di trading.

Vi consiglio di copiarlo nella vostra libreria di prorealtime come "sistema base" in modo che possiate inserire le condizioni e modificarlo a vostro piacimento.

Tutte le funzioni che non volete utilizzare come ad esempio stop loss, take profit, trailing profit, ecc.. lasciatele precedere dalle 2 barre e verranno ignorate.

 

defparam cumulateorders=false

defparam preloadbars = 10000

//defparam flatbefore= hhmmss

//defparam flatafter =hhmmss

 

// condizioni long

 

// entry long positions

if not longonmarket and condizioni long then

buy 1 contracts at market

//set stop $loss X

//set target $profit X

//set stop $trailing Y

//set stop $loss X $trailing Y

endif

 

// condizioni exit long

 

// exit long positions

if longonmarket and condizioni exit long then

sell 1 contracts at market

endif

 

// condizioni short

 

// entry short positions

 

if not shortonmarket and condizioni short then

sellshort 1 contracts at market

//set stop $loss X

//set target $profit X

//set stop $trailing Y

//set stop $loss X $trailing Y

endif

 

// condizioni exit short

 

// exit short positions

 

if shortonmarket and condizioni exit short then

exitshort 1 contracts at market

endif

 

_______________________________________________________________________________________

 

Facciamo un esempio.

 

defparam cumulateorders=false

defparam preloadbars = 10000

//defparam flatbefore= hhmmss

//defparam flatafter =hhmmss

 

// condizioni long

c1=close>exponentialaverage[10](close)

c2=exponentialaverage[20](close)>exponentialaverage[100](close)

c3=close[0]>open[0] and close[0]>close[1]

c4=macd[12,26,9]>0

c5=rsi[14]>50

c6=adx[14]>20

 

// entry long positions

if not longonmarket and c1 and c2 and c3 and c4 and c5 and c6 then

buy 1 contracts at market

set stop $loss 100

set target $profit 1000

//set stop $trailing Y

//set stop $loss X $trailing Y

endif

 

// condizioni exit long

c7=close[0]<lowest[10](low)[1]

 

// exit long positions

if longonmarket and c7 then

sell 1 contracts at market

endif

 

// condizioni short

c8=close<exponentialaverage[10](close)

c9=exponentialaverage[20](close)<exponentialaverage[100](close)

c10=close[0]<open[0] and close[0]<close[1]

c11=macd[12,26,9]<0

c12=rsi[14]<50

c13=adx[14]>20

 

// entry short positions

if not shortonmarket and c8 and c9 and c10 and c11 and c12 and c13 then

sellshort 1 contracts at market

set stop $loss 100

set target $profit 1000

//set stop $trailing Y

//set stop $loss X $trailing Y

endif

 

// condizioni exit short

c14=close[0]>highest[10](high)[1]

 

// exit short positions

if shortonmarket and c14 then

exitshort 1 contracts at market

endif

 

I codici che non mi servono restano inattivi mediante le 2 barre poste all'inizio.

 

 

 



Scrivi commento

Commenti: 9
  • #1

    Francesco (martedì, 05 febbraio 2019 10:08)

    Buongiorno, volevo farle una domanda. come posso fare un trading system ,
    Timeframe 1h
    dopo la prima ora se il prezzo è maggiore del massimo della prima barra entra long. Entra long sul prezzo max della prima barra ,1 tick o il primo prezzo sopra.
    Se il prezzo è minore del minimo della precedente barra entra short.
    Solo un'operazione. Entra short sul prezzo min della prima barra, 1 tick o il primo prezzo sotto.

    Grazie

  • #2

    Max (sabato, 09 febbraio 2019 17:40)

    Ciao Francesco, scusa il ritardo….
    non hai messo le condizioni di uscita nel tuo sistema, io ti ho messo uno stop loss e un take profit di 50 pips che puoi personalizzare oppure utilizzare altre condizioni di uscita a tuo piacimento.

    Per la strategia breakout devi utilizzare un grafico con timeframe inferiore, altrimenti se utilizzi il grafico orario e se il prezzo supera con la seconda candela sia il massimo che il minimo della candela precedente entra in entrambe le direzioni perché gli ordini vengono cancellati solo a chiusura candela.
    Il codice che ho scritto utilizza il timeframe a 5 minuti.

    defparam cumulateorders=false

    if intradaybarindex>11 and intradaybarindex<24 and not onmarket then
    buy 1 shares at (highest[13](high)+(1*pointsize)) stop
    endif

    if intradaybarindex>11 and intradaybarindex<24 and not onmarket then
    sellshort 1 shares at (lowest[13](low)-(1*pointsize))stop
    endif

    set stop ploss 50
    set target pprofit 50

    Provalo e se hai domande scrivi pure



  • #3

    ROBERTO (giovedì, 05 marzo 2020 15:03)

    Come posso rendere Flat cioè bloccare il buy o il sell del prezzo tra due superTrend.

  • #4

    Gaspare (mercoledì, 11 marzo 2020 00:05)

    defparam cumulateorders=false

    if intradaybarindex>11 and intradaybarindex<24 and not onmarket then
    buy 1 shares at (highest[13](high)+(1*pointsize)) stop
    endif

    if intradaybarindex>11 and intradaybarindex<24 and not onmarket then
    sellshort 1 shares at (lowest[13](low)-(1*pointsize))stop
    endif

    set stop ploss 50
    set target pprofit 50

    Ciao Max
    per favore, potresti spiegare in modo semplice ad un profano di programmazione, come funziona questo sistema?
    Io l'ho testato sul CFD mini SP500 della IG a 15 minuti e anche a 30 su uno storico di 10.000 unita'.
    Ha una resa guadagno/perdita 2,7 sul primo e 1,7 sul secondo, con un risultato mensile positivo per tutti e due i timefre.
    Chiedo scusa per la mia ignoranza.
    Grazie

  • #5

    Hengel (lunedì, 13 aprile 2020 14:36)

    Buona sera,
    non sono esperto di programmazione, ma sono riuscito ad organizzare il sistema di cui sotto.
    AutotradingProOrder lo rifiuta, chiedendo di sostituire le variabili con uno specifico valore.
    Chiedo la cortesia di un aiuto.
    Grazie in anticipo.

    DEFPARAM CumulateOrders = false
    n = 14
    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 20) THEN
    BUY 1 SHARES AT MARKET
    ENDIF

    IF (myInverseFisherTransformsRSI CROSSES UNDER 80) THEN
    SELL AT MARKET
    ENDIF

    IF (myInverseFisherTransformsRSI CROSSES UNDER 80) THEN
    SELLSHORT 1 SHARES AT MARKET
    ENDIF

    If (myInverseFisherTransformsRSI CROSSES OVER 20) THEN
    EXITSHORT AT MARKET
    ENDIF

    SET STOP $LOSS 200
    IF STRATEGYPROFIT [1] < -600 THEN
    QUIT
    ENDIF

  • #6

    Massimo (lunedì, 13 aprile 2020 14:54)

    Ho fatto copia/incolla della tua strategia e l'ho lanciata con proorder e non l'ha rifiutata anche perché alla variabile n è assegnato il valore 14.

  • #7

    Hengel (martedì, 16 giugno 2020 11:11)

    Buongiorno Massimo,
    vorrei abusare della tua competenza e cortesia per chiedere:
    Nella costruzione di un Trading System che opera sui volumi e non su time frame, quale sintassi della istruzione nel modo per default?
    Nel caso, esempio, di timeframe giornaliero utilizzo quale istruzione TIMEFRAME (Daily,default);
    Invece nel caso che si voglia operare su un indice con volume determinato di,ad esempio, 113000 volume giorno, sempre in modo default?
    Quale istruzione? e volendo poi far girare il sistema su volumi frazionati devo sempre dividere il valore di regime per un sottomultiplo?
    Spero di essere stato sufficientemente chiaro.
    Grazie infinite in anticipo.
    Cordiali saluti.
    Hengel


  • #8

    yann (venerdì, 02 aprile 2021 01:54)

    hello i find a good coder in prorealtime to improve strategies for me
    do you know sombody ?
    thanks

  • #9

    Max (lunedì, 05 aprile 2021)

    hello Yan, you may search for and ask here
    https://www.prorealcode.com
    have a nice day
    Max