Sistema heikin ashi
Forums › ProRealTime forum Italiano › Supporto ProOrder › Sistema heikin ashi
- This topic has 13 replies, 2 voices, and was last updated 5 years ago by robertogozzi.
-
-
05/03/2019 at 12:00 PM #97607
Gent.mi, vorrei entrare in posizione, ad esempio long, quando si è avuto il minimo di giornata a partire dalle 8 e l’effettiva entrata si ha quando l’heikin ashi diventa verde (quindi si entrerà alla barra successiva). E uscirà dalla posizione al cambio opposto di colore dell’heikin ashi. Fin qui il codice l’ho ottenuto ed è quello che vi ho allegato sotto.
1234567891011121314151617181920212223242526272829defparam flatbefore = 090000defparam flatafter = 173000xClose = (Open+High+Low+Close)/4c10 = (close >= DLow(0))c20 = (close <= DHigh(0))if(barindex>2) thenxOpen = (xOpen[1] + xClose[1])/2endifc1 = xClose>xOpen AND xClose[1]<xOpen[1]c2 = xClose<xOpen AND xClose[1]>xOpen[1]if c1 AND Not LongOnMarket and c10 thenBUY 1 SHARE AT MARKETendifif c2 thensell 1 share at marketendifif c2 AND Not ShortOnMarket and c20 thenSELLSHORT 1 SHARE AT MARKETendifif c1 thenexitshort 1 share at marketendifVorrei però che ad ogni minimo o massimo mi facesse una sola entrata e non ogni qual volta mi cambia colore l’heikin ashi. Vi allego per meglio chiarirmi un file.
Alle 11 abbiamo avuto il massimo di giornata e alle 11:20 l’heikin ashi è diventata rossa, entrerò alla barra successiva short e poi il sistema mi farà uscire correttamente quando l’heikin ashi diventa verde. Il problema è che alle 11.50 l’hiekin ashi mi ridiventa di nuovo rossa e mi fa aprire un’altra posizioni short: qui il sistema non deve aprire la posizione, ma aprirà nell’eventualità un altro short solo se si formerà un nuovo massimo di giornata.
Spero di essere stato chiaro. Vi ringrazio.
05/03/2019 at 3:10 PM #97617Alla riga 3 scrivi:
1ONCE Attivo = 1 //1=trading attivo 0=trading disattivatoAlle righe 16 e 24 aggiungi, alle condizioni già presenti:
1AND AttivoTra le righe 17 e 18 e tra le righe 25 e 26 aggiungi questa:
1Attivo = 005/03/2019 at 3:13 PM #97618Fatto questo il Trading è disattivato, puoi riattivarlo quando vuoi, dopo un certo numero di barre usando un contatore.
Puoi riattivarlo alla prima candela di ogni nuovo giorno (così non potrai fare più di un’operazione al giorno) con:
123IF IntraDayBarIndex = 0 THENAttivo = 1ENDIFOppure puoi riattivarlo, sempre assegnandogli 1, quando si verifica una condizione di tua scelta.
05/03/2019 at 3:31 PM #97620Grazie Roberto, gentilissimo. Ho fatto le modifiche che mi hai detto solo che ora non mi fa aprire nessuna operazione.
1234567891011121314151617181920212223242526272829303132defparam flatbefore = 090000defparam flatafter = 173000ONCE Attivo = 1 //1=trading attivo 0=trading disattivatoxClose = (Open+High+Low+Close)/4c10 = (close >= DLow(0))c20 = (close <= DHigh(0))if(barindex>2) thenxOpen = (xOpen[1] + xClose[1])/2endifc1 = xClose>xOpen AND xClose[1]<xOpen[1]c2 = xClose<xOpen AND xClose[1]>xOpen[1]if c1 AND Not LongOnMarket and c10 AND Attivo thenBUY 1 SHARE AT MARKETAttivo = 0endifif c2 thensell 1 share at marketendifif c2 AND Not ShortOnMarket and c20 AND Attivo thenSELLSHORT 1 SHARE AT MARKETAttivo = 0endifif c1 thenexitshort 1 share at marketendif05/03/2019 at 4:42 PM #97623E’ veramente strano, però ho trovato il modo di farlo funzionare.
Togli le righe 19 e 28, poi aggiungi queste subito dopo la riga 3:
123456IF IntraDayBarIndex = 0 THENAttivo = 1endifif OnMarket THENAttivo = 0endifIn pratica invece di disattivare il trading quando esegue BUY o SELLSHORT lo fa disattivare quando rileva di essere a mercato (OnMarket).
Lo riabilita ad inizio giornata (altrimenti fa solo un’operazione), ma questo puoi deciderlo tu cambiando le istruzioni.
E’ un comportamento insolito, che non mi era mai capitato, in pratica fin dalla prima barra eseguiva le righe 19 e 28, ma non le righe 18 e 27!
05/03/2019 at 5:00 PM #97624Grazie Roberto funziona. Come mi scrivevi tu fa solo un’operazione al giorno, la prima. Non so, però, come cambiare le istruzioni per fargli fare tutte le operazioni che mi occorrono. Vorrei che a ogni nuovo massimo quando l’heikin ashi diventa rossa mi apre lo short e viceversa per il long ad ogni nuovo minimo. Come faccio a riattivare il sistema quando si verifica una condizione da me scelta?
05/03/2019 at 5:30 PM #97629Puoi scrivere:
123456789If xClose > Massimo thenNuovoMassimo = 1Massimo = xCloseElseNuovoMassimo = 0EndifIf NuovoMassimo[1] and xOpen > xClose thenAttivo = 1Endif05/06/2019 at 8:33 AM #97756Grazie Roberto. Ho provato a fare il sistema seguente ma non riesco proprio a capire come combinare le condizioni.
123456789101112131415161718192021222324252627282930313233343536373839defparam flatbefore = 090000defparam flatafter = 173000ONCE Attivo = 1 //1=trading attivo 0=trading disattivatoxClose = (Open+High+Low+Close)/4Massimo = dhigh(0)If xClose > Massimo thenNuovoMassimo = 1Massimo = xCloseElseNuovoMassimo = 0EndifIf NuovoMassimo[1] and xOpen > xClose thenAttivo = 1Endifif(barindex>2) thenxOpen = (xOpen[1] + xClose[1])/2endifc1 = xClose>xOpen AND xClose[1]<xOpen[1]c2 = xClose<xOpen AND xClose[1]>xOpen[1]if c1 AND Not LongOnMarket AND Attivo thenBUY 1 SHARE AT MARKETendifif c2 thensell 1 share at marketendifif c2 AND Not ShortOnMarket thenSELLSHORT 1 SHARE AT MARKETendifif c1 thenexitshort 1 share at marketendif05/06/2019 at 10:45 PM #97809Gent.mo Roberto, alla fine, dopo varie prove, sembra che il codice seguente riesca a fare quello che vorrei io, anche se un pò forzato.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556defparam flatbefore = 090000defparam flatafter = 173000xClose = (Open+High+Low+Close)/4timeframe(30 minutes,updateonclose)c20 = min(low,close)c21 = min(low[1],close[1])c22 = min(low[2],close[2])c23 = min(low[3],close[3])c24 = min(low[4],close[4])c25 = min(low[5],close[5])c26 = min(low[6],close[6])c27 = min(low[7],close[7])c28 = min(low[8],close[8])c29 = min(low[9],close[9])c50 = c20<c21 and c20<c22 and c20<c23 and c20<c24 and c20<c25 and c20<c26 and c20<c27 and c20<c28 and c20<c29c30 = max(high,close)c31 = max(high[1],close[1])c32 = max(high[2],close[2])c33 = max(high[3],close[3])c34 = max(high[4],close[4])c35 = max(high[5],close[5])c36 = max(high[6],close[6])c37 = max(high[7],close[7])c38 = max(high[8],close[8])c39 = max(high[9],close[9])c60 = c30>c31 and c30>c32 and c30>c33 and c30>c34 and c30>c35 and c30>c36 and c30>c37 and c30>c38 and c30>c39//"default" timeframe (the timeframe you will launch the strategy on)timeframe(default)if(barindex>2) thenxOpen = (xOpen[1] + xClose[1])/2endifc1 = xClose>xOpen AND xClose[1]<xOpen[1]c2 = xClose<xOpen AND xClose[1]>xOpen[1]if c1 AND Not LongOnMarket and c50 thenBUY 1 SHARE AT MARKETendifif c2 thensell 1 share at marketendifif c2 AND Not ShortOnMarket and c60 thenSELLSHORT 1 SHARE AT MARKETendifif c1 thenexitshort 1 share at marketendif05/08/2019 at 10:23 AM #97898A che servono le condizioni da C20 a C39?
E’ ovvio che
1min(low,close)restituirà SEMPRE il valore di Low, come fa Close ad essere < Low, al massimo può essere = Low. Quindi MIN() ti restituirà sempre il valore di Low, che sia inferiore o uguale!
Lo stesso vale per High.
Che intendi fare con quelle condizioni, che valore vuoi cercare?
05/08/2019 at 11:50 AM #97923Si Roberto ho visto la formula per creare le candele heikin ashi in cui il minimo dell’heikin ashi è dato dal valore più basso tra il minimo della candela in corso e l’apertura e chiusura della heikin ashi della barra precedente.
Ti riporto la formula:
Tale peculiarità deriva dal particolare metodo di costruzione delle candele Heiken Ashi (HA):
- Il dato di chiusura della candela HA è costituito da una sorta di media della candela corrente
ChiusuraHA = (Apertura + Massimo + Minimo + Chiusura) / 4. - L’apertura della HA corrisponde alla media del body (corpo) della candela precedente
AperturaHA = (AperturaHA[1] + ChiusuraHA[1]) / 2. - Il massimo della HA è il valore più alto tra il massimo della candela corrente, l’apertura e la chiusura sempre della candela corrente calcolata con il metodo HA visto ai precedenti punti 1 e 2
MassimoHA = Max (Massimo, AperturaHA, ChiusuraHA). - Il minimo della HA è il valore più basso tra il minimo della candela corrente, l’apertura e la chiusura sempre della candela corrente calcolata con il metodo HA visto ai precedenti punti 1 e 2
MinimoHA = Min (Minimo, AperturaHA, ChiusuraHA).
Quindi credevo che facendo in quel modo mi dava il valore inferiore proprio della candela heikin ashi. Ma ti dico, è tutto un pò forzato. Non so se faccio correttamente.
05/08/2019 at 12:05 PM #97929A parte che è uguale sia per le candele giapponesi che per quelle HA, il minimo è per forza minore (o al massimo uguale) alla chiusura e viceversa per il massimo, ma tu non fai riferimento alle candele HA ma a quelle giapponesi normali.
Perché la riga 4 non la sposti alla 35, che sarebbe più chiaro, pur trattandosi dello stesso TF?
Nel TF a 30 minuti ti riferisci alle candele normali, non alle giapponesi.
Francamente non capisco cosa tu voglia fare.
05/08/2019 at 1:29 PM #97948Praticamente, dato che non si riusciva, per me in modo semplice, a poter entrare in posizione, ad esempio short al cambio di colore della candela heikin ashi, quando c’era un massimo di giornata e ogni qual volta si verificasse un nuovo massimo (con conseguente cambio di colore sempre dell’heikin ashi); allora, ho cercato di superare questo ostacolo aiutandomi con il multitimeframe: in pratica, il seguente codice, mi dovrebbe riuscire a far in modo che, se sul 30 minuti il minimo della candela è più basso delle precedenti 9 candele, si presume che in quel momento sia il minimo di giornata (andando indietro di 9 candele di 30 minuti, salvo particolari eccezioni, dovrebbe essere il minimo di giornata o comunque a partire dalle 8) e se sul time frame di riferimento l’heikin ashi mi diventa verde entro long. Poi, ad un nuovo minimo sul 30 minuti che sia il minimo delle ultime 9 candele, essendo ovviamente a questo punto un nuovo minimo di giornata, allora rientrerò long sul time frame di riferimento al cambio colore dell’heikin ashi. E così via.
In effetti rivedendo min(low,close) non è molto chiaro; però il risultato finale, seppur in modo forzato, credo di averlo ottenuto. Infatti, in questo modo, il sistema non mi fa fare sempre operazioni ad ogni cambio di colore dell’heikin ashi, ma solo quando avviene dopo che si è formato un nuovo minimo sul 30 minuti. Non solo, ma il sistema non si ferma alla sola prima operazione di giornata ma prosegue ovviamente alla formazione di ogni minimo.
Spero, Roberto, di averti chiarito quello che ho fatto ma soprattutto quello che vorrei fare. Certo è un metodo abbastanza semplice, ciò non toglie che si possono aggiungere ulteriori condizioni per filtrare eventuali falsi segnali.
123456789101112c20 = min(low,close)c21 = min(low[1],close[1])c22 = min(low[2],close[2])c23 = min(low[3],close[3])c24 = min(low[4],close[4])c25 = min(low[5],close[5])c26 = min(low[6],close[6])c27 = min(low[7],close[7])c28 = min(low[8],close[8])c29 = min(low[9],close[9])c50 = c20<c21 and c20<c22 and c20<c23 and c20<c24 and c20<c25 and c20<c26 and c20<c27 and c20<c28 and c20<c2905/16/2019 at 10:15 AM #98593Scusami, se cerchi il LOW (minimo) più basso, perché usi CLOSE (chiusura)?
Per cercare un minimo di qualunque cosa per le ultime “x” barre scrivere:
1Minimo = lowest[x](...)dove X sarà un numero che tu vuoi (magari 9 come nel tuo caso) ed i puntini dovrai sostituirli con quello che tu vuoi trovare, LOW se cerchi il più basso tra i minimi, HIGH se cerchi il più basso tra i massimi, CLOSE se cerchi il più basso tra i CLOSE, una media se cerchi il valore più basso della media, ecc…
Per il cambio di colore di una candela giapponese si scrive:
12345Colore = close > open //va bene anche "Colore = close < open" se non t'interessa in quale direzione ma ti basta che ci sia stato un cambioIF Colore <> Colore[1] THEN..ENDIFper le candele HA basta che ad OPEN e CLOSE anteponga la x.
1 user thanked author for this post.
- Il dato di chiusura della candela HA è costituito da una sorta di media della candela corrente
-
AuthorPosts
Find exclusive trading pro-tools on