Ciao a tutti, vorrei provare a fare un codice per provare ad automatizzare l’open in gap su us500
Il programma dovrebbe verificare la chiusura delle 22 dell’indice americano ed operare per chiudere il gap che si forma all’apertura del giorno dopo, quindi una entrata short se l’indice apre più alto della chiusura del giorno prima ed una entrata long se l’indice apre più basso della chiusura del giorno prima.
In entrambe i casi con target la chiusura del giorno prima e stop Loss di pochi punti
Naturalmente il tutto su timeframe giornaliero
Sarei davvero grato se qualcuno potrà aiutarmi
Eccolo:
Defparam CumulateOrders = false
//Short
If open > close[1] then
Sellshort 1 contract at market
Endif
//Long
If open < close[1] then
Buy 1 contract at market
Endif
//
Tp = abs(close - close[1])
Sl = Tp / 3
Set Target Profit Tp
Set Stop Loss Sl
Grazie Roberto sei sempre fantastico e volocissimo nel rispondere, ma probabilmente io non avrò i settaggi giusti per far funzionare il programma perche questo non mi rispetta la chiusura delle 22 e l’apertura delle 15,30 del mercato americano, ma testandolo vedo che ha delle entrate ed uscite differenti.
Faccio un esempio di venerdì 31 luglio dove ho tradato l’open in gap giovedì 30 luglio:
chiusura mercato ore 22 di giovedì a 3246
Apertura mercato ore 15,30 di venerdì a 3265
il programma dovrebbe aprire una posizione corta da 3265 punti con target 3246
Grazie ancora per la velocità e la cortesia
Gianni
In effetti c’è una candela di differenza, in quanto le strategie vengono SEMPRE eseguiti alla chiusura di ogni candela, quindi che il Venerdì ha aperto in gap rispetto al Giovedì la strategia verrà a saperlo alla chiusura del Venerdì, quindi entrerà a mercato all’apertura del Lunedì.
Per ovviare a questo si può utilizzare il supporto MTF, con un time frame ad 1 minuto (o anche minore) ed entrare poco dopo l’apertura.
Domani ti faccio una versione MTF.
Ok perfetto, ma per eseguire correttamente questo codice dovrò anche io avere la visualizzazione del grafico con apertura 15,30 e con chiusura 22?
Questo è il codice, ma va con le candele DAILY di IG, non credo corrispondano al mercato reale perché NON è un mercato reale, è un CFD creato da IG, quindi non ha orari borsistici.
Puoi provare ad intervenire sugli orari personalizzati (nelle opzioni della piattaforma si possono variare), ma non so quali effetti avranno sul risultato.
Devi eseguirlo su un TF ad 1 minuto, o inferiore (questo ridurrà lo storico disponibile in fase di backtest):
Defparam CumulateOrders = false
TIMEFRAME(1 Day)
ONCE DailyFlag = 1
DailyFlag = abs(DailyFlag - 1)
//Short
CondS = 0
If open > close[1] then
CondS = 1
CondL = 0
Endif
//Long
If open < close[1] then
CondL = 1
CondS = 0
Endif
//
Tp = abs(close - close[1]) * 20 //profitto 20 volte maggiore del GAP
Sl = Tp / 3 //Stop Loss 1/3 del Profitto
////////////////////////////////////////////////////////////////////////
TIMEFRAME(default)
Flag = DailyFlag
ONCE TradeON = 1
IF Flag <> Flag[1] THEN
TradeON = 1
ENDIF
If CondS AND Not OnMarket AND TradeON then
Sellshort 1 contract at market
TradeON = 0
Endif
//Long
If CondL AND Not OnMarket AND TradeON then
Buy 1 contract at market
TradeON = 0
Endif
Set Target Profit Tp
Set Stop Loss Sl
ho messo una condizione,
TradeON, per evitare che entri a mercato più volte durante lo stesso giorno.
Grazie mille Roberto, l’ho testato sulle azioni italiane tipo eni, in quanto hanno la chiusura alle 17,30 e l’apertura alle 9 e funziona, ma a volte non capisco perchè non rispetta il tp e lo stop loss.
Per testarlo ho aggiunto solo alcune funzioni, tipo che se il tp è minore di 30 centesimi allora non entra a mercato, tolto il profitto 20 volte il gap e lo stop /3, ed ho fatto comperare 100 azioni anziche una sola.
Defparam CumulateOrders = false
TIMEFRAME(1 Day)
ONCE DailyFlag = 1
DailyFlag = abs(DailyFlag - 1)
//Short
CondS = 0
If open > close[1] then
CondS = 1
CondL = 0
Endif
//Long
If open < close[1] then
CondL = 1
CondS = 0
Endif
//
Tp = abs(close - close[1]) //* 20 //profitto 20 volte maggiore del GAP
Sl = Tp /// 3 //Stop Loss 1/3 del Profitto
long=1
graph tp
short=1
if tp<0.30 then
long=0
short=0
endif
////////////////////////////////////////////////////////////////////////
TIMEFRAME(default)
Flag = DailyFlag
ONCE TradeON = 1
IF Flag <> Flag[1] THEN
TradeON = 1
ENDIF
If CondS and short AND Not OnMarket AND TradeON then
Sellshort 1000 lots at market
TradeON = 0
Endif
//Long
If CondL and long AND Not OnMarket AND TradeON then
Buy 1000 lots at market
TradeON = 0
Endif
Set Target Profit Tp
Set Stop Loss Sl