Buongiorno volevo creare un sistema di trading da applicare a dei titoli estrapolati da uno screener, questo
Timeframe(1 h)
Inizio = 153000
Fine = 163000
GAP = Dopen(0)>1.15* Dclose(1)
SCAMBI = VOLUME >1000000
IF Time >= Inizio AND Time <= Fine THEN
IF Time = Inizio THEN
x = 0
HH = high
LL = low
ELSE
HH = max(HH,high)
LL = min(LL,low)
IF Time = Fine THEN
x = HH >= (LL * 1.20)
ENDIF
ENDIF
ENDIF
SCREENER[Gap and scambi and x]
(Realizzato con l aiuto di Roberto Gozzi) dove acquisto il titolo quando il prezzo ha superato il max. +0.5% ( per “garanzia”) della 1 candela di un ora e poi con uno SL -5% TP 30% TS 5% e con chiusura forzata a 5′ prima della chiusura della borsa di riferimento e se possibile con un utilizzo per singolo trade di 1/3 del capitale a disposizione
Questo è il codice c he ho provato sul DAX a 5 minuti (per potere uscire 5 minuti prima della chiusura), mentre lavora internamente sul 30 minuti (per potere utilizzare orari di mezz’ora). Ogni orario e parametro dovrai variarlo per adeguarlo al reale, in quanto io li ho indicati in modo casuale:
DEFPARAM CumulateOrders = false
Timeframe(Default)
ONCE Inizio = 083000
ONCE Fine = 093000
ONCE Chiusura = 172500
ONCE Capitale = 50000
ONCE LottiMin = 0.2
IF Not OnMarket THEN
Lotti = 1
Rischio = (Capitale + StrategyProfit) / 3
SogliaTS = 0
ENDIF
//
Timeframe(30 minute,UpdateOnClose)
GAP = Dopen(0)>(1.0002* Dclose(1))
SCAMBI = VOLUME >10000
IF Time >= Inizio AND Time <= Fine THEN
IF Time = Inizio THEN
x = 0
HH = high
LL = low
ELSE
HH = max(HH,high)
LL = min(LL,low)
IF Time = Fine THEN
x = HH >= (LL * 1.002)
ENDIF
ENDIF
ENDIF
Cond = Gap and Scambi and x
//
Timeframe(Default)
IF Cond AND Not OnMarket THEN
Entrata = close
SL = Entrata * 0.03 //2% SL
TP = Entrata * 0.08 //6% TP
SogliaTS = TP * 0.01 //10$ TS
Uscita = Entrata
k = SL / PipSize * PipValue
IF k > Rischio THEN
Temp = Rischio / k
y = Lotti * Temp
z = round((y * 10) - 0.5)
Lotti = max(LottiMin,z / 10)
ENDIF
BUY Lotti CONTRACT AT MARKET
SET TARGET PROFIT TP
SET STOP LOSS SL
ENDIF
IF OnMarket AND Time >= Chiusura THEN
SELL AT Market
ENDIF
IF OnMarket THEN
IF close >= Uscita + SogliaTS THEN
Uscita = Uscita + SogliaTS
ENDIF
IF Uscita > Entrata THEN
SELL AT Uscita STOP
ENDIF
ENDIF
//graph Lotti
//graph SL
//graph TP
//graph k
//graphonprice Entrata
//graphonprice Entrata - SL coloured(255,0,0,255)
//graphonprice Uscita + SogliaTS coloured(0,0,255,255)
Per i parametri, anche per quanto riguarda lo screener, sono estremamente selettivi.
Verifica che lde percentuali che mi hai detto siano quelle corrette, tenendo come esempio il DAX, che vale circa 16000. Il 30% sono 4800 pips, il 5% sono 800 pips, ecc…
DEFPARAM CumulateOrders = false
Timeframe(Default)
ONCE Inizio = 093000
ONCE Fine = 100000
ONCE Chiusura = 155500
ONCE Capitale = 50000
ONCE LottiMin = 0.2
IF Not OnMarket THEN
Lotti = 250
Rischio = (Capitale + StrategyProfit) / 3
SogliaTS = 0
ENDIF
//
Timeframe(30 minute,UpdateOnClose)
GAP = Dopen(0)>(1.0002* Dclose(1))
SCAMBI = VOLUME >1000000
IF Time >= Inizio AND Time <= Fine THEN
IF Time = Inizio THEN
x = 0
HH = high
LL = low
ELSE
HH = max(HH,high)
LL = min(LL,low)
IF Time = Fine THEN
x = HH >= (LL * 1.1)
ENDIF
ENDIF
ENDIF
Cond = Gap and Scambi and x
//
Timeframe(default)
IF Cond AND Not OnMarket THEN
Entrata = close
SL = Entrata * 0.03 //2% SL
TP = Entrata * 0.08 //6% TP
SogliaTS = TP * 0.05 //10$ TS
Uscita = Entrata
k = SL / PipSize * PipValue
IF k > Rischio THEN
Temp = Rischio / k
y = Lotti * Temp
z = round((y * 10) - 0.5)
Lotti = max(LottiMin,z / 10)
ENDIF
BUY Lotti CONTRACT AT MARKET
SET TARGET PROFIT TP
SET STOP LOSS SL
ENDIF
IF OnMarket AND Time >= Chiusura THEN
SELL AT Market
ENDIF
IF OnMarket THEN
IF close >= Uscita + SogliaTS THEN
Uscita = Uscita + SogliaTS
ENDIF
IF Uscita > Entrata THEN
SELL AT Uscita STOP
ENDIF
ENDIF
//graph Lotti
//graph SL
//graph TP
//graph k
//graphonprice Entrata
//graphonprice Entrata - SL coloured(255,0,0,255)
//graphonprice Uscita + SogliaTS coloured(0,0,255,255)
Ciao Roberto ho provato a far girare il tuo programma cambiando solo INIZIO FINE CHIUSURA VOLUME
Alcune cose non mi tornano
– Nel titolo deve entrare una sola volta e dopo le 15:55(per USA) non deve fare nessun trade, mentre qui entra ogni minuto e dopo le 15:55
– Deve entrare se prezzo e maggiore del max della prima candela di mezz’ora quella delle 9:30/10:00 mentre qui entra più in basso
– Volevo entrare con un terzo del capitale in ogni operazione , mentre qui entra in lotti/pezzi
– L’ingresso deve avvenire al prezzo max della candela ½ ora +0.5% , non lo vedo
Scrivi il testo nel post, non separatamnente.
Per i documenti devi utilizzare solo tra questi tipi di file:
– PDF per testi formattati
– TXT per testi non formattati
– JPG o PNG per le immagini.
Grazie 🙂
Ci darò un’occhiata appena possibile.
L’entrata si può fare SOLO in lotti, ovviamente vanno rapportati al rischio desiderato.
Ho aggiunto/modificato:
- entrata DOPO l’orario di FINE ed entro l’orario di CHIUSURA
- una sola entrata al giorno
- ho corretto il calcolo dei lotti in base al rischio
- il prezzo d’entrata adesso è sul MASSIMO + n%
L’ho provato sul DAX, 30 minuti, 200K barre. Ho messo percentuali abbastanza diverse da quelle da te indicate altrimenti non avrebbe fatto nessuna operazione. Ho provato a cercare l’azione della tua immagine, ma non l’ho trovata, IG ha solo BIOFRONTERA AG (non INC.).
Se vuoi usare solo UNA candela da 30 minuti indica INIZIO e FINE con la stessa ora.
DEFPARAM CumulateOrders = false
Timeframe(Default)
ONCE TradeON = 1
ONCE Inizio = 093000
ONCE Fine = 093000
ONCE Chiusura = 155500
ONCE Capitale = 50000
ONCE LottiMin = 0.2
IF Not OnMarket THEN
Lotti = 100 //100 per default, ma il calcolo sul rischio viene fatto all'entrata
Rischio = (Capitale + StrategyProfit) * 0.30 //30% rischio (sul capitale + utili)
SogliaTS = 0
ENDIF
IF IntraDayBarIndex = 0 AND Not OnMarket THEN
TradeON = 1
x = 0
ENDIF
//
Timeframe(30 minute,UpdateOnClose)
GAP = Dopen(0)>(1.0001* Dclose(1))
SCAMBI = VOLUME >10000
IF OpenTime >= Inizio AND OpenTime <= Fine THEN
IF OpenTime = Inizio THEN
HH = high
ENDIF
IF OpenTime = Fine THEN
HH = max(HH,high)
ENDIF
ENDIF
//
Timeframe(default)
IF x = 0 THEN
x = (close >= (HH * 1.01)) //Massimo + 0.1%
ENDIF
Cond = Gap and Scambi and x and OpenTime <= Chiusura and OpenTime >= Fine and TradeON
IF Cond AND Not OnMarket THEN
Entrata = close
SL = Entrata * 0.04 //4% SL
TP = Entrata * 0.15 //15% TP
SogliaTS = TP * 0.015 //1.5% TS
Uscita = Entrata
k = (SL / PipSize * PipValue) * Lotti
IF k > Rischio THEN
Temp = Rischio / k
y = Lotti * Temp
z = round((y * 10) - 0.5)
Lotti = max(LottiMin,z / 10)
ENDIF
BUY Lotti CONTRACT AT MARKET
TradeON = 0
SET TARGET PROFIT TP
SET STOP LOSS SL
ENDIF
IF OnMarket THEN
IF close >= Uscita + SogliaTS THEN
Uscita = Uscita + SogliaTS
ENDIF
IF Uscita > Entrata THEN
SELL AT Uscita STOP
ENDIF
ENDIF
//graph Lotti
//graph SL
//graph TP
//graph k
//graphonprice Entrata
//graphonprice Entrata - SL coloured(255,0,0,255)
//graphonprice Uscita + SogliaTS coloured(0,0,255,255)
Ok grazie domani provo, perchè l ingresso lo si può fare solo in lotti e non in cash?
DEFPARAM CumulateOrders = false
Timeframe(Default)
ONCE TradeON = 1
ONCE Inizio = 093000
ONCE Fine = 093000
ONCE Chiusura = 155500
ONCE Capitale = 50000
ONCE LottiMin = 0.2
IF Not OnMarket THEN
Lotti = 700 //100 per default, ma il calcolo sul rischio viene fatto all'entrata
Rischio = (Capitale + StrategyProfit) * 0.30 //30% rischio (sul capitale + utili)
SogliaTS = 0
ENDIF
IF IntraDayBarIndex = 0 AND Not OnMarket THEN
TradeON = 1
x = 0
ENDIF
//
Timeframe(30 minute,UpdateOnClose)
GAP = Dopen(0)>(1.15* Dclose(1))
SCAMBI = VOLUME >10000
IF OpenTime >= Inizio AND OpenTime <= Fine THEN
IF OpenTime = Inizio THEN
HH = high
ENDIF
IF OpenTime = Fine THEN
HH = max(HH,high)
ENDIF
ENDIF
//
Timeframe(default) // qui deve essere con TF 1 MInuto
IF x = 0 THEN
x = (close >= (HH * 1.05)) //Massimo + 0.5%
ENDIF
Cond = Gap and Scambi and x and OpenTime <= Chiusura and OpenTime >= Fine and TradeON
IF Cond AND Not OnMarket THEN
Entrata = close
SL = Entrata * 0.04 //4% SL
TP = Entrata * 0.15 //15% TP
SogliaTS = TP * 0.015 //1.5% TS
Uscita = Entrata
k = (SL / PipSize * PipValue) * Lotti
IF k > Rischio THEN
Temp = Rischio / k
y = Lotti * Temp
z = round((y * 10) - 0.5)
Lotti = max(LottiMin,z / 10)
ENDIF
BUY Lotti CONTRACT AT MARKET
TradeON = 0
SET TARGET PROFIT TP
SET STOP LOSS SL
ENDIF
IF OnMarket THEN
IF close >= Uscita + SogliaTS THEN
Uscita = Uscita + SogliaTS
ENDIF
IF Uscita > Entrata THEN
SELL AT Uscita STOP
ENDIF
ENDIF
//graph Lotti
//graph SL
//graph TP
//graph k
//graphonprice Entrata
//graphonprice Entrata - SL coloured(255,0,0,255)
//graphonprice Uscita + SogliaTS coloured(0,0,255,255)
Ho modificato la linea gap portandolo al 15%.Poi volevo cambiare il secondo time frame in quanto le operazioni di ingresso devono essere fatte con candele ad 1′ . Cmq va bene in quanto su questo titolo BFRI mi fa un ingresso giornaliero e basta, Pero due cose volevo chiederti , se non e proprio possibile inserire un acquisto in $ e non in lotti e seconda cosa questo programma mi permette di fare backtest ma io vorrei trasformarlo in uno screener e a seguire un ordine , la prima parte dove ha come criteri la candela di aperture superiore del 15% dal prezzo di chiusura che e la parte di scrrener e poi l acquisto