Buon pomeriggio Roberto, vorrei impedire al sistema di continuare a comprare sui massimi, infatti nelle giornate di ribasso il sistema soffre parecchio entrando in acquisto al minimo rialzo dopo una candela H4 rossa, come potrei rendere il sistema Flat in queste fasi? avevo pensato di porre una condizione da utilizzare esclusivamente a determinati livelli di prezzo come quella di non fare entrare in acquisto il sistema se non ci sono prima almeno 2 candele verdi H4.
Inoltre è possibile impostare delle aree di acquisto? ad esempio porre tra le condizioni compra ai minimi di mese scorso da 13770 ?
Grazie mille.
Per le due candele in H4 ecco (la variabile Cond ti dirà quando ci sono 2 candele H4 rialziste):
Timeframe(4 hour,UpdateOnClose)
Cond = summation[2](close > open)
Timeframe(.....)
IF Mie CondizioniLong AND Not Onmarket AND Cond THEN
BUY 1 CONTRACT AT MARKET
ENDIF
Per l’altro non capisco:
- la relazione che dev’esserci tra il minimo del mese scorso e 13770
- come hai calcolato 13770.
Puoi provare a spiegarlo in un altro modo?
quindi se io nelle condizioni Cond volessi bloccare il sistema e non fargli più fare operazioni in acquisto per un determinato numero di candele ad un certo livello di prezzo (es. 15800) e poi renderlo di nuovo operativo dopo almeno 2 candele H4 verdi (all’apertura della terza candela entra in acquisto) come devo fare?
poi se volessi aggiungere un’altra condizione e cioè fare comprare una volta che il prezzo tocca i minimi di chiusura del mese precedente o i minimi di chiusura della settimana precedente (ma il sistema opera in H4) come devo fare?
quel valore a cui ti riferivi di 13770 è un livello di prezzo a cui vorrei far comprare al sistema una volta che il livello viene toccato (in pratica un ordine pendente in BUY) anche se è un’ennesima condizione indipendente dalle altre, quindi, solo (es. a determinati livelli di prezzo tipo massimi storici o di periodo) in alcuni periodi di mercato voglio applicare queste condizioni di “blocco” del sistema come devo fare?
grazie mille.
Eccolo:
Timeframe(4 hour,UpdateOnClose)
Cond = summation[2](close > open)
Timeframe(.....)
ONCE TradeON = 1
// riprendere l'operatività se è rimasta sospesa per 20 candele
IF Summation[20](TradeON = 0) = 20 THEN
TradeON = 1
ENDIF
IF Mie CondizioniLong AND Not Onmarket AND Cond AND TradeON THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// se a mercato già da 10 candele ed il prezzo raggiunge 15800, chiudere
// le posizioni e sospendere l'operatività
IF LongOnMarket AND ((BarIndex - TradeIndex) >= 10) AND (close >= 15800) THEN
TradeON = 0
ENDIF
In merito alla seconda domanda occorre piazzare un ordine BUY (Stop se uil prezzo d’entrata è peggiorativo, Limit se è migliorativo):
IF close < 13770 THEN //acquista ad un prezzo maggiore
BUY 1 CONTRACT AT 13770 STOP
ELSIF close > 13770 THEN //acquista ad un prezzo migliore
BUY 1 CONTRACT AT 13770 LIMIT
ELSE //acquista a mercato
BUY 1 CONTRACT AT MARKET
ENDIF
T’informo che gli ordini pendenti scadono OGNI barra, per cui se vuoi mantenerli attivi per più barre, devi piazzarli di nuovo alla barra successiva.
T’informo anche che IG (come ogni broker, con limiti più o meno alti) richiede che ci sia una distanza minima da rispettare tra il prezzo attuale e quello d’entrata. Se non si rispetta, la strategia viene interrotta (ovviamente non nel backtest, solo in demo o reale). Devi verificare sul sito o sulla piattaforma di IG qual’è questa distanza, che può variare durante il giorno.
Quindi se il prezzo sarà maggiore o uguale a 15800 verrà applicata la condizione di acquisto solo dopo 2 candele H4 verdi…..se invece il prezzo è minore di 15800 verrà applicato sempre la condizione delle 2 Candele verdi prima di entrare in acquisto? oppure verranno applicate le condizioni precedenti?
e poi a che righe del sistema devo applicare il codice delle condizione che hai formulato?
ciao, grazie.
Entra quando ci sono le TueCondizioni + 2 candele H4 rialziste consecutive.
Sospende tutto dopo 10 candele a mercato (se esce prima di 10 non sospende niente).
Dopo una sospensione riprende dopo 20 candele d’inattività.
15800 è un numero che hai indicato tu, non so cosa significhi e come tu l’abbia calcolato.
sospende tutto se il prezzo sarà maggiore o uguale a 15800, 15800 è il massimo storico registrato da Dax30 giorni fa, ma se il prezzo sarà minore di 15800 non dovrebbe sospendere dopo 10 candele o lo fa sempre? inoltre, scusami ma non sono per niente pratico di programmazione, a che riga devo inserire il copia ed incolla del tuo codice nel sistema che voglio integrare?
Grazie mille Roberto.
Sospende se il prezzo è > 15800 E sono passate 10 candele.
Devi aggiungere queste all’inizio del timeframe:
ONCE TradeON = 1
// riprendere l'operatività se è rimasta sospesa per 20 candele
IF Summation[20](TradeON = 0) = 20 THEN
TradeON = 1
ENDIF
po devi aggiungere, alle tue condizioni d’entrata:
AND TradeON
e queste dopo l’entrata:
// se a mercato già da 10 candele ed il prezzo raggiunge 15800, chiudere
// le posizioni e sospendere l'operatività
IF LongOnMarket AND ((BarIndex - TradeIndex) >= 10) AND (close >= 15800) THEN
TradeON = 0
ENDIF
Roberto in merito al Buy Stop se la posizione è già aperta (mi hai detto che ad ogni barra “scade” l’ordine pendente pre-inserito) come faccio a reinserire il Buy Stop alla candela successiva?
Basta che gli metti le condizioni ancora valide e gli fai eseguire BUY di nuovo.
perdonami non ho capito tecnicamente se la posizione già è aperta devo chiudere e riaprire?
Tu metti un ordine pendente per entrare a mercato,
Se è già entrato perché piazzarlo di nuovo?
Buon pomeriggio Roberto ho provato ad integrare i tuoi codici appena formulati con il sistema che avevo, ma mi dà errore alla riga 24 (timeframe…..), per cortesia puoi verificare se l’integrazione che ho fatto è corretta nell’inserimento delle righe, ma dubito che sia così:) infatti ho sbagliato di sicuro qualcosa.
Inoltre se cortesemente puoi correggerlo e testarlo.
Grazie mille.
Se lo pubblichi cerco di aiutarti.
oh scusami sono fuso 🙂 avevo dimenticato di pubblicarlo.
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
t1 = (OpenDayOfWeek = 1) AND (Time >= 010000) AND (Time <= 210000)
t2 = (OpenDayOfWeek = 2) AND (Time >= 010000) AND (Time <= 210000)
t3 = (OpenDayOfWeek = 3) AND (Time >= 010000) AND (Time <= 210000)
t4 = (OpenDayOfWeek = 4) AND (Time >= 010000) AND (Time <= 210000)
t5 = (OpenDayOfWeek = 5) AND (Time >= 010000) AND (Time <= 170000)
x1 = (OpenDayOfWeek = 1) AND (Time = 240000)
x2 = (OpenDayOfWeek = 2) AND (Time = 240000)
x3 = (OpenDayOfWeek = 3) AND (Time = 240000)
x4 = (OpenDayOfWeek = 4) AND (Time = 240000)
x5 = (OpenDayOfWeek = 5) AND (Time = 210000)
//
If OnMarket AND (x1 OR x2 OR x3 OR x4 OR x5) THEN
SELL AT MARKET
EXITSHORT AT MARKET
ENDIF
Timeframe(4 hour,UpdateOnClose)
Cond = summation[2](close > open)
Timeframe(…..)
ONCE TradeON = 1
// riprendere l’operatività se è rimasta sospesa per 20 candele
IF Summation[20](TradeON = 0) = 20 THEN
TradeON = 1
ENDIF
// Condizioni per entrare su posizioni long
L1 = t1 OR t2 OR t3 OR t4 OR t5
L2 = Not OnMarket
indicator1 = DonchianChannelDown[20]
c1 = (close <= indicator1)
indicator2 = Stochastic[50,1](close)
c2 = (indicator2 <= 78)
c3 = (close <= close[20])
IF c1 OR c2 OR c3 OR (L1 AND L2) AND Cond AND TradeON THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// se a mercato già da 10 candele ed il prezzo raggiunge 15800, chiudere
// le posizioni e sospendere l’operatività
IF LongOnMarket AND ((BarIndex – TradeIndex) >= 10) AND (close >= 15800) THEN
TradeON = 0
ENDIF
IF close < 13770 THEN //acquista ad un prezzo maggiore
BUY 1 CONTRACT AT 13770 STOP
ELSIF close > 13770 THEN //acquista ad un prezzo migliore
BUY 1 CONTRACT AT 13770 LIMIT
ELSE //acquista a mercato
BUY 1 CONTRACT AT MARKET
ENDIF
// Stop e target
SET STOP PLOSS 141 //529 //398//398
SET TARGET PPROFIT 271 //395