Ciao a tutti,
sto lavorando su un sistema che sfrutta il breakout su Oil H1 alla rottura del max/min della candela delle 14-15. Queste le caratteristiche:
Nessun Take profit.
Chiusura del sistema alle 22.
Stop Loss sul max/min della candela di setup.
Per ora ho scritto buona parte del codice e mi sembra funzionare, ma avrei bisogno di impostare il sistema in modo che non esegua più di un’operazione al giorno. Mi spiego meglio. Nel caso in cui il sistema parta con il breakout della candella delle 14 e l’operazione finisca in stop prima delle 22 non voglio che il sistema faccia partire una seconda operazione al successivo break della candela oraria.
Ho provato a inserire le indicazioni presenti in questo topic:
come limitare ad una posizione al giorno intraday
ma non riesco a far funzionare correttamente il sistema.
Potete darmi una mano?
Vi allego il sistema che ho scritto. Grazie!
Defparam cumulateorders = false
DEFPARAM FLATBEFORE = 150000
DEFPARAM FLATAFTER = 220000
//Set livelli di Stop
MyStopLossLong= (open-low)+2*Pipsize
MyStopLossShort= range[1]+2*Pipsize
//candela ingresso -entry-
BuyPrice = High+2*Pipsize
SellPrice = Low-2*Pipsize
// Condizioni per entrare su posizioni long
IF NOT ONMARKET THEN
BUY 1 CONTRACTS AT BuyPrice STOP
SET STOP LOSS MyStopLossLong
ENDIF
// Condizioni per entrare su posizioni short
IF NOT ONMARKET THEN
SELLSHORT 1 CONTRACTS AT SellPrice STOP
SET STOP LOSS MyStopLossShort
ENDIF
L’ho modificato e dovrebbe funzionare quasi sempre, nel senso che alcune volte esegue anche più di un trade sulla stessa candela e questo non so come poterlo evitare, ma in generale funziona.
Defparam cumulateorders = false
DEFPARAM FLATBEFORE = 150000
DEFPARAM FLATAFTER = 220000
ONCE TradeOn = 1 //abilitare il trading per default
IF OnMarket THEN
TradeOn = 0 //disabilitare il trading dopo un'operazione
ENDIF
IF IntraDayBarIndex = 0 THEN //riabilitare il trading all'inizio di ogni giorno
TradeOn = 1
ENDIF
//Set livelli di Stop
MyStopLossLong= (open-low)+2*Pipsize
MyStopLossShort= range[1]+2*Pipsize
//candela ingresso -entry-
BuyPrice = High+2*Pipsize
SellPrice = Low-2*Pipsize
// Condizioni per entrare su posizioni long
IF NOT ONMARKET AND TradeOn THEN
BUY 1 CONTRACTS AT BuyPrice STOP
SET STOP LOSS MyStopLossLong
ENDIF
// Condizioni per entrare su posizioni short
IF NOT ONMARKET AND TradeOn THEN
SELLSHORT 1 CONTRACTS AT SellPrice STOP
SET STOP LOSS MyStopLossShort
ENDIF
Roberto
Ho capito il problema di più operazioni sulla stessa candela.
Tu piazzi due ordini pendenti contemporaneamente, siccoma la candela dura un’ora, quindi è un TF abbastanza lungo, può capitare che un’operazione vada in stop e l’altro ordine pendente venga pure esso eseguito!
Un’altra cosa, tu non hai inserito una riga dova prendi i valori alle 15, perché le righe 19-20 (12-13 del tuo codice originale) prendono sempre i valori nuovi ogni ora.
Tu forse hai ritenuto che
DEFPARAM FLATBEFORE = 150000
Facesse partire la strategia alle 15:00. Purtroppo Non è così!!! Ogni strategia funziona continuamente, candela dopo candela. FLATBEFORE impedisce solo che, anche a condizioni verificate, un’operazione non venga aperta.
Per cui l’ho ulteriormente modificata:
Defparam cumulateorders = false
DEFPARAM FLATBEFORE = 150000
DEFPARAM FLATAFTER = 220000
ONCE TradeOn = 1 //abilitare il trading per default
IF OnMarket THEN
TradeOn = 0 //disabilitare il trading dopo un'operazione
ENDIF
//Set livelli di Stop
MyStopLossLong= (open-low)+2*Pipsize
MyStopLossShort= range[1]+2*Pipsize
//candela ingresso -entry-
IF time = 150000 then //alle 15:00 prendi i valori da usare per il breakout
BuyPrice = High+2*Pipsize
SellPrice = Low-2*Pipsize
TradeOn = 1 //riabilitare il trading
endif
// Condizioni per entrare su posizioni long
IF NOT ONMARKET AND TradeOn THEN
BUY 1 CONTRACTS AT BuyPrice STOP
SET STOP LOSS MyStopLossLong
ENDIF
// Condizioni per entrare su posizioni short
IF NOT ONMARKET AND TradeOn THEN
SELLSHORT 1 CONTRACTS AT SellPrice STOP
SET STOP LOSS MyStopLossShort
ENDIF
Roberto
Ciao Roberto,
scusa per il ritardo con cui ti rispondo… in effetti hai centrato perfettamente il mio obiettivo! Ti ringrazio moltissimo per l’implementazione del codice!
Adesso ho ripreso a litigare con gli stop… mi sembravano corretti quando ti ho scritto ma rifacendo il backtest non mi soddisfano… ma niente di insuperabile!
Nel caso ti disturbo di nuovo…:-)
Grazie ancora!!!!
Roberto, ari-eccomi…
Ho inserito delle modifiche per gli stop e questa è la sequenza completa:
Defparam cumulateorders = false
DEFPARAM FLATBEFORE = 150000
DEFPARAM FLATAFTER = 220000
ONCE TradeOn = 1 //abilitare il trading per default
IF OnMarket THEN
TradeOn = 0 //disabilitare il trading dopo un'operazione
ENDIF
//candela ingresso -entry-
IF time = 150000 then //alle 15:00 prendi i valori da usare per il breakout
BuyPrice = High+2*Pipsize
SellPrice = Low-2*Pipsize
MyStopLossLong= (high-low)+4*pipsize
MyStopLossShort= (low[1]-high[1])+4*pipsize
TradeOn = 1 //riabilitare il trading
endif
// Condizioni per entrare su posizioni long
IF NOT ONMARKET AND TradeOn THEN
BUY 1 CONTRACTS AT BuyPrice STOP
SET STOP LOSS MyStopLossLong
ENDIF
// Condizioni per entrare su posizioni short
IF NOT ONMARKET AND TradeOn THEN
SELLSHORT 1 CONTRACTS AT SellPrice STOP
SET STOP LOSS MyStopLossShort
ENDIF
In backtest funziona ma quando vado a metterla in test normale PRT arresta il sistema e mi da questo allarme:
“Questo sistema di trading si è interrotto perchè ha voluto piazzare uno stop o un limite ad un livello di prezzo negativo. La prego di aggiungere le dovute protezioni al suo codice per prevenire l’immissione di ordini con livelli di rpezzo negativi” … è la prima volta che mi succede… puoi dirmi dove sto sbagliando?
Grazie ancora!
Intanto devi modificare SET STOP LOSS in
SET STOP PLOSS
per settare lo stop in Pips, anziché ad un certo prezzo.
E’ negativo il valore dello Stop SHORT perché l’espressione
low[1]-high[1]
non può che essere negativa (ad esempio, 9999 – 10000), credo tu debba invertirla, oppure sostituirla con:
abs(low[1]-high[1])
Inoltre, se vuoi fare il debugging è bene che aggiunga, in backtest soltanto, queste righe che ti consentono di esaminare il valore delle variabili:
GRAPH BuyPrice
GRAPH SellPrice
GRAPH MyStopLossLong
GRAPH MyStopLossShort
Roberto
Roberto, non so come ringraziarti!
Adesso funziona tutto! Metto il sistema in test e incrocio le dita, grazie ancora per il supporto!!!