Ho utilizzato (male) un codice che Roberto Gozzi mi aveva fornito in risposta ad una domanda di un qualche topic in precedenza. Il risultato non è quello voluto: il sistema mi fa, durante la giornata, non solo uno Stop and Reverse ma più. E’ possibile modificare il codice in modo che ne faccia uno solo? grazie. Allego il codice del BT
// Chiusura temporale alla chiusura cash
// ATTENZIONE!!!
// se si usa un grafico con chiusura oraria
// diversa occorre modificare il codice ******
//
DEFPARAM FlatAfter = 214500 //*******
DEFPARAM FlatBefore = 074500
// Solo un ordine a mercato
DEFPARAM CumulateOrders = False
// Definizione dello SL e TP
TIMEFRAME(DAILY)
SL=AverageTrueRange[5](close)/3
//TP=AverageTrueRange[5](close)/1.5
TIMEFRAME(DEFAULT)
// Orario Chiusura trade
ONCE CloseTime= 214500 //dax 8:00-22:00 TF m15 *****
OTD = (Barindex - TradeIndex(1)) > IntradayBarIndex
// Orari limite per trade
FIRSTIN=080000 //
LASTIN=173000 //
// Inserimento di un offset per ridurre falsi segnali
ONCE OFFSET=4 //OTTIMIZZATO 0-15 SU DAX FULL m15
LONGCOND=close>(Dhigh(1)+OFFSET) // AND Close>(Dhigh(2)+OFFSET)AND Close>(Dhigh(3)+OFFSET)//CONDIZIONE SPECIFICA DI MASSIMO DI X GG
// Condizioni per entrare su posizioni long
IF NOT LongOnMarket AND LONGCOND AND Time<LASTIN AND Time >FIRSTIN AND OTD THEN //con filtri orario di trading
//IF NOT LongOnMarket AND LONGCOND AND OTD THEN //senza filtri orari di trading
//entro LONG al break del massimo del giorno precedente
buy 1 CONTRACTS AT MARKET
ENDIF
SHORTCOND=close<(Dlow(1)-OFFSET)// AND Close<(Dlow(2)-OFFSET)AND Close<(Dlow(3)-OFFSET)//CONDIZIONE SPECIFICA DI MINIMO DI X GG
// Condizioni per entrare su posizioni short
IF NOT ShortOnMarket AND SHORTCOND AND Time<LASTIN AND Time >FIRSTIN AND OTD THEN //con filtri orario di trading
//IF NOT ShortOnMarket AND SHORTCOND AND OTD THEN //senza filtri orari di trading
//entro SHORT al break del minimo del giorno precedente
SELLSHORT 1 CONTRACTS AT MARKET
ENDIF
//STOP AND REVERSE
Reversed=0
IF (StrategyProfit<StrategyProfit[1])AND(Reversed=0) THEN
Reversed=1
If LongOnMarket[1] AND Time<LASTIN THEN
SELLSHORT 1 Contract at Market
ELSIF ShortOnMarket[1] AND Time<LASTIN THEN
BUY 1 Contract at Market
ENDIF
SET STOP pLOSS SL
SET TARGET pPROFIT SL
ENDIF
// Condizioni per uscire da posizioni long
If LongOnMarket AND Time = CloseTime THEN
//chiudo il LONG a fine orario cash
SELL AT MARKET
ENDIF
// Condizioni per uscire da posizioni short
IF ShortOnMarket AND Time = CloseTime THEN
//chiudo lo SHORT a fine orario cash
EXITSHORT AT MARKET
ENDIF
// Stop e target: Inserisci qui i tuoi stop di protezione e profit target
SET STOP pLOSS SL
//SET TARGET pPROFIT TP
Quindi il sistema deve poter fare anche più operazioni, ma nel caso debbano esserci più Stop & Reverse ne deve fare solo uno?
Il giorno successivo può farne di nuovo?
Ogni giorno una operazione in una direzione con relativo SAR. Grazie
Ecco:
// Chiusura temporale alla chiusura cash
// ATTENZIONE!!!
// se si usa un grafico con chiusura oraria
// diversa occorre modificare il codice ******
//
DEFPARAM FlatAfter = 214500 //*******
DEFPARAM FlatBefore = 074500
// Solo un ordine a mercato
DEFPARAM CumulateOrders = False
// Definizione dello SL e TP
TIMEFRAME(DAILY)
SL=AverageTrueRange[5](close)/3
//TP=AverageTrueRange[5](close)/1.5
TIMEFRAME(DEFAULT)
ONCE Tradare = 1
ONCE Reversed = 0
IF IntraDayBarIndex = 0 THEN
Tradare = 1
Reversed = 0
ENDIF
// Orario Chiusura trade
ONCE CloseTime= 214500 //dax 8:00-22:00 TF m15 *****
// Orari limite per trade
FIRSTIN=080000 //
LASTIN=173000 //
// Inserimento di un offset per ridurre falsi segnali
ONCE OFFSET=4 //OTTIMIZZATO 0-15 SU DAX FULL m15
LONGCOND=close>(Dhigh(1)+OFFSET) // AND Close>(Dhigh(2)+OFFSET)AND Close>(Dhigh(3)+OFFSET)//CONDIZIONE SPECIFICA DI MASSIMO DI X GG
// Condizioni per entrare su posizioni long
IF NOT LongOnMarket AND LONGCOND AND Time<LASTIN AND Time >FIRSTIN AND Tradare THEN //con filtri orario di trading
//IF NOT LongOnMarket AND LONGCOND AND OTD THEN //senza filtri orari di trading
//entro LONG al break del massimo del giorno precedente
buy 1 CONTRACTS AT MARKET
Tradare = 0
ENDIF
SHORTCOND=close<(Dlow(1)-OFFSET)// AND Close<(Dlow(2)-OFFSET)AND Close<(Dlow(3)-OFFSET)//CONDIZIONE SPECIFICA DI MINIMO DI X GG
// Condizioni per entrare su posizioni short
IF NOT ShortOnMarket AND SHORTCOND AND Time<LASTIN AND Time >FIRSTIN AND Tradare THEN //con filtri orario di trading
//IF NOT ShortOnMarket AND SHORTCOND AND OTD THEN //senza filtri orari di trading
//entro SHORT al break del minimo del giorno precedente
SELLSHORT 1 CONTRACTS AT MARKET
Tradare = 0
ENDIF
//STOP AND REVERSE
IF (StrategyProfit<StrategyProfit[1])AND(Reversed=0) THEN
Reversed=1
If LongOnMarket[1] AND Time<LASTIN THEN
SELLSHORT 1 Contract at Market
Reversed = 1
ELSIF ShortOnMarket[1] AND Time<LASTIN THEN
BUY 1 Contract at Market
Reversed = 1
ENDIF
SET STOP pLOSS SL
SET TARGET pPROFIT SL
ENDIF
// Condizioni per uscire da posizioni long
If LongOnMarket AND Time = CloseTime THEN
//chiudo il LONG a fine orario cash
SELL AT MARKET
ENDIF
// Condizioni per uscire da posizioni short
IF ShortOnMarket AND Time = CloseTime THEN
//chiudo lo SHORT a fine orario cash
EXITSHORT AT MARKET
ENDIF
// Stop e target: Inserisci qui i tuoi stop di protezione e profit target
SET STOP pLOSS SL
//SET TARGET pPROFIT TP
Scusa Roberto, ho notato che il reverse non viene chiuso in giornata ma, in alcuni casi all’open del giorno successivo, come devo modificare il codice? grazie
Su quale strumento e timeframe l’hai provato?
Dax full m30 (esempio allegato)
Non esce perché hai indicato un orario in cui la candela non chiude/apre alla mezz’ora.
Se il codice lo provi su 1 minuto, oppure sul 5 o 15 minuti funzionerà (non funzionerà sul 10 minuti perché l’orario termina con 5).