Ho provato a creare un indicatore che mi attivasse degli allarmi allo scattare dei segnali di un sistema che su PRT non posso attivare su azionario.
Questo un codice di esempio:
// Parametri
StopLoss = 2000
TakeProfit = 3500
StartTime = 150000
EndTime = 180000
// Calcolo della dimensione della posizione
Capitale = 10000
MySize = Capitale / Close
// Logica di trading
IF Time >= StartTime AND Time < EndTime THEN
IF NOT ONMARKET THEN
// Ordine di acquisto al massimo della sessione
BUY MySize SHARES AT DHigh(0) STOP
// Imposta stop loss e take profit in valori monetari
SET STOP $LOSS StopLoss
SET TARGET $PROFIT TakeProfit
ENDIF
// Ordine di vendita al minimo della sessione
SELL AT DLow(0) STOP
ENDIF
E’ possibile crearci un indicatore per avere per lo meno gli allarmi che mi permettano di inserire poi ordini manuali ?
Se desideri un indicatore in cui vengono visualizzati i segnali di ingresso, puoi procedere come segue:
IF Time >= StartTime AND Time < EndTime and yourconditions THEN
drawarrowup(barindex,low)coloured("green")
endif
return
C’è modo di riuscire a plottare anche gli stop ? Il problema principale è questo… altrimenti le entrate in posizione fra strategia e indicatore escono inevitabilmente disallineate.
Comunque lato azioni in sistematico PRT è inutilizzabile e questo è un grosso limite…
@AndyB72
Pubblica il tuo argomento nel forum corretto ProBuilder: argomenti su indicatori.
L’ho spostato io dal precedente forum.
Tu hai creato una strategia automatizzata. Puoi usarla per i segnali e per visualizzare target e Stop, ma va tenuto il backtest sempre aperto e funzionante e va modificato il tuo codice come segue:
// Parametri
StopLoss = 2000
TakeProfit = 3500
StartTime = 150000
EndTime = 180000
// Calcolo della dimensione della posizione
Capitale = 10000
MySize = Capitale / Close
// Logica di trading
IF Time >= StartTime AND Time < EndTime THEN
IF NOT ONMARKET THEN
MyEntry = DHigh(0)
MyExit = DLow(0)
// Ordine di acquisto al massimo della sessione
BUY MySize SHARES AT MyEntry STOP
// Imposta stop loss e take profit in valori monetari
SET STOP $LOSS StopLoss
SET TARGET $PROFIT TakeProfit
ELSE
// Ordine di vendita al minimo della sessione
SELL AT MyExit STOP
ENDIF
ENDIF
//
GraphOnprice MyEntry + (TakeProfit / abs(CountOfPosition)) AS "Target" coloured("Green")
GraphOnprice MyEntry - (StopLoss / abs(CountOfPosition)) AS "Stop" coloured("Red")
GraphOnPrice MyEntry AS "Entry" coloured("Blue")
GraphOnPrice MyExit AS "Exit" coloured("Black")
Se, invece, vuoi un indicatore, questo deve simulare la strategia e visualizzare i dati sul grafico, con l’aggiunta di un segnale quando si verifica un’entrata o un’uscita, in modo che tu possa aggiungere degli allarmi sonori (tramite l’icona della “campanella”):
// Parametri
ONCE Offset = 100 * PipSize
ONCE StopLoss = 2000
ONCE TakeProfit = 3500
ONCE StartTime = 150000
ONCE EndTime = 180000
// Calcolo della dimensione della posizione
ONCE Capitale = 10000
ONCE MySize = Capitale / Close
//
ONCE LongTrade = 0
ONCE MyEntry = DHigh(0)
ONCE MyExit = DLow(0)
//
Segnale = 0
// Logica di trading
IF (Time >= StartTime) AND (Time < EndTime) THEN
IF (high >= MyEntry) AND (high[1] < MyEntry) AND Not LongTrade THEN
LongTrade = 1
Segnale = 1
myTarget = MyEntry + (TakeProfit / MySize)
myStop = MyEntry - (StopLoss / MySize)
ENDIF
IF NOT LongTrade AND (close < DHigh(0)) THEN
MyEntry = DHigh(0)
MyExit = DLow(0)
myTarget = MyEntry + (TakeProfit / MySize)
myStop = MyEntry - (StopLoss / MySize)
ENDIF
ENDIF
IF (((low <= MyExit) AND (low[1] > MyExit)) OR (low <= MyStop) OR (high >= myTarget)) AND LongTrade THEN
LongTrade = 0
Segnale = -1
ENDIF
IF Segnale = 1 THEN
DrawArrowUP(BarIndex,MyEntry - Offset - Range) coloured("Blue")
ELSIF Segnale = -1 THEN
DrawArrowDOWN(BarIndex,MyEntry - Offset - Range) coloured("Orange")
ENDIF
RETURN MyEntry AS "Entry" coloured("Blue"),MyExit AS "Exit" coloured("Black"),myTarget AS "Target" coloured("Green"),myStop AS "Stop" coloured("Red"),Segnale AS "Segnale" coloured(255,255,255,1)
quando setti l’allarme sul grafico, SEGNALE avrà valore 1 quando c’è un’entrata e valore -1 quando c’è un’uscita.
L’uscita verrà segnalata sempre con -1, qualunque sia il motivo (Stop Loss colpito, Target Profit raggiunto oppure quando il oprezzo scende solo DLow(0).
Grazie Roberto, davvero prezioso !
Mi studio il tutto.
Da un primo check mi sembra che i segnali di strategia e indicatori siano diversi a parità di strumento e timeframe.
Nei prossimi gg verifico meglio.
Se trovi differenze indicami:
- nome dello strumento
- timeframe usato
- data ed ora delle candele dove ci sono entrate/uscite difformi.
Buongiorno.
Molto probabilmente il fatto di essere a mercato nella strategia, rispetto all’indicatore (che non lo sa), influisce su tutto il backtest.
Non mi spiego però quando entrambi non sono a mercato perchè non hanno lo stesso ingresso.
In questo caso ho caricato entrambi su Tesla 15min. La strategia sul prezzo e l’indicatore sul pannello sotto.
qui uno zoom sull’ultimo periodo
Ho fatto delle modifiche, ma alcuni problemi restano. Sono legati all’entrate con ordini pendenti, che in un indicatore si gestiscono male:
ONCE Offset = 100 * PipSize
ONCE StopLoss = 2000
ONCE TakeProfit = 3500
ONCE StartTime = 150000
ONCE EndTime = 180000
// Calcolo della dimensione della posizione
ONCE Capitale = 10000
MySize = Capitale / Close
//
ONCE LongTrade = 0
ONCE MyEntry = DHigh(0)
ONCE MyExit = DLow(0)
//
Segnale = 0
// Logica di trading
IF (Time > StartTime) AND (Time < EndTime) THEN
IF (high >= MyEntry) AND (close[1] < MyEntry) AND Not LongTrade AND (Day = Day[1]) THEN
LongTrade = 1
Segnale = 1
myTarget = MyEntry + (TakeProfit / MySize)
myStop = MyEntry - (StopLoss / MySize)
ENDIF
IF NOT LongTrade AND (close < DHigh(0)) THEN
MyEntry = DHigh(0)
MyExit = DLow(0)
myTarget = MyEntry + (TakeProfit / MySize)
myStop = MyEntry - (StopLoss / MySize)
ENDIF
IF (((low <= MyExit) AND (low[1] > MyExit)) OR (low <= MyStop) OR (high >= myTarget)) AND LongTrade THEN
LongTrade = 0
Segnale = -1
ENDIF
ENDIF
IF Segnale = 1 THEN
DrawArrowUP(BarIndex,MyEntry - Offset - Range) coloured("Blue")
ELSIF Segnale = -1 THEN
DrawArrowDOWN(BarIndex,MyEntry - Offset - Range) coloured("Orange")
ENDIF
//RETURN LongTrade
//return DHigh(0),DLow(0)
RETURN MyEntry AS "Entry" coloured("Blue"),MyExit AS "Exit" coloured("Black"),myTarget AS "Target" coloured("Green"),myStop AS "Stop" coloured("Red"),Segnale AS "Segnale" coloured(255,255,255,1)
Infatti rimangono sballati.
Proseguo con la soluzione della strategia. Il vero problema è la mancanza dell’alert a questo punto.
Non ho ancora verificato se salvando il piano rimangono salvate anche le strategie attive o se vanno caricate ad ogni nuova apertura (che sarebbe ingestibile sopra un certo numero di titoli).
Certo che questo è sicuramente un limite importante di ProRealTime rispetto a diverse altre soluzioni (es. Tradestation o Multicharts)
I backtest salvati nel template vengono riaperti automaticamente.
Roberto buongiorno. Che tu sappia, c’è la possibilità di costruire un Alert basato sulla posizione della strategia ?
Un alert che scatti per esempio nel momento in cui la strategia è in posizione e noi no…. non so se mi spiego…
Nel frattempo ho riprovato a caricare strategia + indicatore, ovviamente con stesse variabili, sullo stesso sottostante.
Anche quando la strategia non è in posizione le righe “entry”, ecc non sono allineate. Mi aspetterei che nei momenti flat (quando la strategia non è in posizione da codice non ci sono ordini pendenti), dovrebbero coincidere, invece non è così.