R05Participant
Veteran
Gent.mi sto implementando un sistema intraday con le seguenti caratteristiche:
- si usano le candele heikin ashi (per il momento con time frame a 5 minuti ma appena ho il sistema completo farò delle prove anche con altri time frame ed eventualmente altre condizioni) e quando si ha il minimo di giornata si entra long sopra il massimo della candela heikin ashi e, viceversa, quando si ha un massimo di giornata si entra short alla rottura del minimo della candela heikin ashi (vi allego un esempio, file con nome “cattura”).
Il sistema è il seguente ed è tutto ok.
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
// Il sistema cancellerà tutti gli ordini in attesa e chiuderà tutte le posizioni a 0:00. Dopo l'orario "Flat Before" non saranno piazzati nuovi ordini o posizioni.
DEFPARAM FLATBEFORE = 090000
// Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all'orario "Flat After"
DEFPARAM FLATAFTER = 173000
xClose = (Open+High+Low+Close)/4
if(barindex>2) then
xOpen = (xOpen[1] + xClose[1])/2
endif
// Condizioni per entrare su posizioni long
c1 = dlow(0)
c2 = low
g1 = (c1=c2)
IF g1 THEN
BUY 1 CONTRACT AT xopen stop
ENDIF
// Condizioni per entrare su posizioni short
c10 = dhigh(0)
c20 = high
g10 = (c10=c20)
IF g10 THEN
sellshort 1 CONTRACT AT xopen stop
ENDIF
// Stop e target
SET STOP pLOSS 15
SET TARGET pPROFIT 15
Però vorrei chiedervi due cose:
- la prima, è che vorrei che il massimo e il minimo di giornata da prendere in considerazione siano quelli a partire dalle 8
- la seconda, è che quando si verifica ad esempio il massimo, dovendo entrare short alla rottura del minimo della candela in cui si è verificato, e dato che non sempre alla candela successiva si ha la rottura, si possa usare quella candela per almeno 5 barre successive (vi mostro un esempio per meglio capire; il file è quello col nome “esempio”)
Vi ringrazio.
Le righe 17 e 26 daranno rarissimamente segnali, perché che i valori siano esattamente uguali è quasi impossibile!
A cosa to servono le candele HA se non le usi, tranne per l’entrata?
Perché fai l’entrata sempre sull’open della candela HA, non volevi farlo alla rottura dei minimi/massimi? In tal caso ti manca la definizione di xLow e xHigh.
R05Participant
Veteran
Si Roberto grazie della risposta.
- L’heikin ashi mi serve per entrare in posizione perchè ho notato che la candela è più ampia di quella corrispondente a candele giapponesi, quindi l’entrata è un pò ritardata ma forse più attendibile (è come se aspettasse una conferma in più).
- Per quanto riguarda xhigh e xlow non so come ricavarli, anche se ho notato che nella stragrande maggioranza dei casi xopen coincide con xhigh o xlow a seconda, mentre il minimo della candela giapponese se è il valore più basso lo è anche per l’heikin ashi, infatti ho modificato il sistema nel seguente modo alle righe 20 e 29.
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
// Il sistema cancellerà tutti gli ordini in attesa e chiuderà tutte le posizioni a 0:00. Dopo l'orario "Flat Before" non saranno piazzati nuovi ordini o posizioni.
DEFPARAM FLATBEFORE = 090000
// Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all'orario "Flat After"
DEFPARAM FLATAFTER = 173000
xClose = (Open+High+Low+Close)/4
if(barindex>2) then
xOpen = (xOpen[1] + xClose[1])/2
endif
// Condizioni per entrare su posizioni long
c1 = dlow(0)
c2 = low
g1 = (c1=c2)
IF g1 THEN
BUY 1 CONTRACT AT max(xopen,high)+0.5 stop
ENDIF
// Condizioni per entrare su posizioni short
c10 = dhigh(0)
c20 = high
g10 = (c10=c20)
IF g10 THEN
sellshort 1 CONTRACT AT min(xopen,low)-0.5 stop
ENDIF
// Stop e target
SET STOP pLOSS 30
SET TARGET pPROFIT 18
- come ultima cosa, le operazioni le fa, ti allego il file. Le righe 17 e 26 sembrano incongruenti però mi spiego meglio con l’esempio seguente:
c1 = dlow(0)
c2 = low
g1 = (c1=c2)
Volevo scrivere, in modo sicuramente rozzo, che se c1 è il minimo a quel momento del giorno e c2 è il minimo della candela e quindi coincidono, allora il minimo della candela fatto registrare a quel momento è anche minimo della giornata.
Solo così riuscivo a scriverlo, comunque le entrate me le fa giuste (ho allegato anche l’esempio di ieri).
Questa è la definizione completa delle candele HA ( > 2 va bene ugualmente):
if barindex > 1 then
xClose = (open+close+low+high)/4 //TotalPrice
xOpen = (xOpen[1]+xClose[1])/2
haHigh = Max(xOpen, xClose)
haLow = Min(xOpen, xClose)
xHigh = Max(High,haHigh)
xLow = Min(Low,haLow)
xRange = abs(xClose - xOpen)
else
xClose = (open+close+low+high)/4 //TotalPrice
xOpen = (Open[1]+Close[1])/2
haHigh = Max(xOpen, xClose)
haLow = Min(xOpen, xClose)
xHigh = Max(High,haHigh)
xLow = Min(Low,haLow)
xRange = abs(xClose - xOpen)
endif
dovrai togliere ciò che non t’interessa. Ad ogni modo, se ti funziona com’è adesso non cambiare niente, almeno finché tutto non va come ti aspetti.
Aggiungere/modificare cose quando ancora c’è qualcosa da risolvere complica sicuramente la vita.
Bene, adesso ho capito che significa quel segno “=”. E’ corretto.
Per il minimo/massimo di giornata dalle 8, puoi scrivere:
// inizia con i nuovi valori alle 8 di ogni giorno
IF time = 080000 THEN
Minimo = low //o xLow
Massimo = high //o xHigh
ENDIF
// aggiorna i valori ogni candela (alle 8 saranno invariati, uguali a sopra)
Minimo = min(Minimo,low) //anche qui puoi usare le HA
Massimo = max(Massimo,high) //anche qui puoi usare le HA
dopodiche Fai riferimento a questi due valori e non più a DLOW e DHIGH.
Però non devi entrare dopo le 8 almeno, altrimenti ti entra subito, perché alle 8 i valori LOW e HIGH saranno uguali a MINIMO e MASSIMO.
Ti consiglio di usare + 0.5 * pipsize e – 0.5 * pipsize. Perché se lavori solo sul DAX può andare bene anche così, il rapporto Pip/Prezzo è 1:1, ma su altri srumenti può essere 1:10000. Indicando PipSize lasci che se ne preoccupi ProOrder e crei un codice portabile su tutti gli strumenti.
Quanto all’altro punto, quando si verificano le condizioni devi salvarti il prezzo d’ingresso in una variabile, diversa tra Long e Short (e devi metterlo a zero quando sarai a mercato), dopodiché ogni candela piazzi nuovamente l’ordine pendente finché lo vuoi tu, con la condizione:
IF PrezzoIngressoLong THEN
BUY 1 CONTRACT AT PrezzoIngressoLong stop
ENDIF
R05Participant
Veteran
Grazie Roberto, gentilissimo. Ho modificato il sistema come di seguito.
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
// Il sistema cancellerà tutti gli ordini in attesa e chiuderà tutte le posizioni a 0:00. Dopo l'orario "Flat Before" non saranno piazzati nuovi ordini o posizioni.
DEFPARAM FLATBEFORE = 090000
// Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all'orario "Flat After"
DEFPARAM FLATAFTER = 173000
once miopatternlong = 0
once miopatternshort = 0
IF OnMarket THEN
miopatternlong = 0 //resettare la variabile al valore iniziale, se a mercato
ENDIF
IF miopatternlong THEN
IF (BarIndex - miopatternlong) > 5 THEN
miopatternlong = 0 //resettare la variabile al valore iniziale dopo n candele
ENDIF
ENDIF
IF OnMarket THEN
miopatternshort = 0 //resettare la variabile al valore iniziale, se a mercato
ENDIF
IF miopatternshort THEN
IF (BarIndex - miopatternshort) > 5 THEN
miopatternshort = 0 //resettare la variabile al valore iniziale dopo n candele
ENDIF
ENDIF
xClose = (Open+High+Low+Close)/4
if(barindex>2) then
xOpen = (xOpen[1] + xClose[1])/2
endif
// inizia con i nuovi valori alle 8 di ogni giorno
IF time = 080000 THEN
Minimo = low //o xLow
Massimo = high //o xHigh
ENDIF
// aggiorna i valori ogni candela (alle 8 saranno invariati, uguali a sopra)
Minimo = min(Minimo,low) //anche qui puoi usare le HA
Massimo = max(Massimo,high) //anche qui puoi usare le HA
// Condizioni per entrare su posizioni long
c1 = minimo
c2 = low
g1 = (c1=c2)
IF g1 THEN
miopatternlong=barindex
Ingressolong = max(xopen,high)
ENDIF
if miopatternlong then
BUY 1 CONTRACT AT ingressolong+0.5*pipsize stop
endif
// Condizioni per entrare su posizioni short
c10 = massimo
c20 = high
g10 = (c10=c20)
IF g10 THEN
miopatternshort=barindex
Ingressoshort= min(xopen,low)
ENDIF
if miopatternshort then
sellshort 1 CONTRACT AT Ingressoshort -0.5*pipsize stop
endif
// Stop e target
SET STOP pLOSS 30
SET TARGET pPROFIT 18
Solo una conferma le righe 15 e 24 mi tengono aperta la condizione per le 5 candele successive alla condizione di setup? In allegato ti metto ciò che mi fa il sistema: la prima operazione è corretta, ma le altre successive non le riesco a capire. Praticamente raggiunto il target della prima operazione, che poi è l’unica che dovrebbe essere fatta, mi fa aprire a catena anche le altre.
Si, le righe 15 e 24 sono corrette.
L’altro problema potrebbe essere perché esce sulla stessa barra e OnMarket non ha modo di sapere che è già entrato a mercato per eseguire le righe 12 e 21 e si ferma solo dopo 5 barre.
Prova a modificare le righe 11 e 20 così:
If OnMarket or STRATEGYPROFIT <> STRATEGYPROFIT[1] Then
in questo modo capisce di essere entrato e uscito perché STRATEGYPROFIT è diverso dalla barra precedente.
R05Participant
Veteran
Ok grazie Roberto. Ho modificato le righe 11 e 20 come hai detto tu. Risolto. Grazie