In questo capitolo vedremo come impostare screeners per la ricerca di patters di candele giapponesi.
Una volta che conoscete le caratteristiche di un pattern, è possibile programmarlo.
Vedremo prima i singoli codici per ogni patterns e poi come impostare gli screeners.
Li ho divisi per patterns d'inversione di uptrend e downtrend e patterns di continuazione di uptrend e downtrend.
Questi screeners trovano patterns candlesticks di inversione o di continuazione.
Per determinare se la prima o la seconda tipologia devono essere coadiuvati da altre condizioni quali ipercomprato o ipervenduto e da condizioni di medie mobili per identificare il trend.
Ogni condizione raccoglie tutte le sottocondizioni per identificare un pattern candlestick e si dividono in patterns rialzisti e pattern ribassisti.
Basta copiare il codice.
PRINCIPALI PATTERNS D'INVERSIONE
// engulfing pattern rialzista (anche reversal day)
C1=range[0]>=range[1] AND close[1]<open[1] AND close[0]>open[0] AND open[0]<=close[1] AND close[0]>=open[1]
// engulfing pattern ribassista (anche reversal day)
C1=range[0]>=range[1] AND close[1]>open[1] AND close[0]<open[0] AND open[0]>=close[1] AND close[0]<=open[1]
// hammer rialzista
C1 = close[1]<open[1] AND open[0]>low[0]+(range*0.66) AND close[0]>low[0]+(range*0.66) AND range[0]>abs(open-close)*4 AND low[0]<low[1]
// shooting star ribassista
C1 = close[1]>open[1] AND open[0]<high[0]-(range*0.66) AND close[0]<high[0]-(range*0.66) AND range[0]>abs(open-close)*4 AND high[0]>high[1]
// piercing pattern rialzista
C1 = close[1]<open[1] AND open[0]<low[1] AND close[0]>=low[1]+(range[1]*0.50) AND close[0]<open[1]
// dark cloud cover ribassista
C1 = close[1]>open[1] AND open[0]>high[1] AND close[0]<=high[1]-(range[1]*0.50) AND close[0]>open[1]
// swing point low + one white soldier (rialzista)
C1 = close[2]<open[2] AND low[2]>low[1] AND low[0]>low[1] AND close[0]>open[0] AND close[0]>high[1] AND high[2]>high[1] AND high[0]>high[1] AND high[0]>high[2] AND close[0]>open[2] AND close[0]>=low[0]+(range[1]*0.50)
// swing point high + one white soldier (ribassista)
C1 = close[2]>open[2] AND high[2]<high[1] AND high[0]<high[1] AND close[0]<open[0] AND close[0]<low[1] AND low[2]<low[1] AND low[0]<low[1] AND low[0]<low[2] AND close[0]<open[2] AND close[0]<=high[0]-(range[1]*0.50)
_______________________________________________________________________________________
I patterns di inversione possono essere coadiuvati, per esempio
dalle seguenti condizioni quali:
mercato in ipervenduto per i pattern rialzisti od ipercomprato per i ribassisti mediante l'oscillatore RSI o altri oscillatori a piacere:
C2 = rsi[14](close)<40 o 50
C2 = rsi[14](close)>60 o 50
Prezzo sotto (p.rialzisti) o sopra (p. ribassisti) una media mobile per esempio a 20 o 10 periodi per definire il trend corrente:
C3 = close[0]<exponentialaverage[x](close)
C3 = close[0]>exponentialaverage[x](close)
Grandezza della candela reversal tramite indicatore ATR (con moltiplicatore*1 modificabile in base alla grandezza
richiesta):
C4= range[0]>averagetruerange[x](close)*1
aumento di volume su pattern reversal solo per azionario e commodities:
C5= volume[0]>volume[1]
C6= average[x](Volume)<volume[0]
Esistenza di trend
C7=ADX[14]>=20
Si possono utilizzare più patterns insieme nella ricerca, ponendoli successivamente mediante il comando screener con la congiunzione OR tra parentesi invece che AND.
Esempio proscreener (vanno messi i codici relativi):
C1=ENGULFING RIALZISTA
C2=HAMMER RIALZISTA
C3= SWING POINT LOW RIALZISTA
C4= VOLUME
C5= RSI
C6 = MEDIA MOBILE
screener [(C1 OR C2 OR C3) AND C4 AND C5 AND C6]
IMPORTANTE:
Va detto inoltre che i pattern d'inversione possono formarsi anche nella direzione del trend corrente come ad esempio dopo un ritracciamento, come nel caso della strategia swing trading.
Possono essere utilizzati come condizioni aggiuntive allo screener del swing trading visto al punto 4.
In questo caso si possono ricercare pattern d'inversione a favore di trend e quindi al di sopra di una o due medie mobili (vedi anche il capitolo sulla strategia swing trading).
Ecco sotto due esempi di pattern d'inversione:
contro trend ed a favore di trend.
Come vedete, in base alle condizioni aggiuntive potete determinare in che direzione utilizzare il pattern d'inversione.
Come nel caso dei patterns d'inversioni appena visti, anche questi patterns sono utilizzabili sia come preavviso di continuazione del trend che per una possibile inversione poichè rappresentano fasi di momentanea congestione raffigurate da vari tipi di inside day ed harami.
Per quanto riguarda la continuazione di trend basta che questi pattern siano al di sopra (per un uptrend) o al di sotto (per un downtrend) di 1 o 2 medie mobili (una breve ed una più lunga per determinare il trend) in quanto seguono il trend corrente.
Oppure l'ideale è utilizzarli con le condizioni dello screener 5 di trend continuo.
Se invece si cercano patterns reversal possono essere utilizzati aggiungendo gli strumenti citati nel paragrafo precedente.
// inside day (solo range) reversal rialzista o continuazione ribassista
C1= close[1]<open[1] AND high[0]<=high[1] AND low[0]>=low[1]
// inside day (solo range) reversal ribassista o continuazione rialzista
C1=close[1]>open[1] AND high[0]<=high[1] AND low[0]>=low[1]
// Harami (body+range) reversal rialzista o continuazione ribassista
C1=close[1]<open[1] AND open[0]>=close[1] AND close[0]<=open[1] AND open[0]<=open[1] AND close[0]>=close[1] AND
high[1]>=high[0] AND low[1]<=low[0]
// Harami (body+range) reversal ribassista o continuazione rialzista
C1=close[1]>open[1] AND open[0]<=close[1] AND close[0]>=open[1] AND open[0]>=open[1] AND close[0]<=close[1]AND high[1]>=high[0] AND low[1]<=low[0]
Per le multinside day basta creare il codice con più candele inserite all'interno del range di una più grande.
Le condizioni in blu sono quelle riguardanti i pattern inside di continuazione.
Potete scegliere di ometterli dai vostri screeners di inversione, scrivendo davanti ai codici relativi le due barre // e togliendoli dal codice finale screener.
TIMEFRAME (DAILY)
// periodo ATR
X=20
// moltiplicatore ATR
Y=1
// periodo media mobile volume
Z=60
// periodo media mobile
media=20
// engulfing pattern rialzista (anche reversal day)
C1=range[0]>=range[1] AND close[1]<open[1] AND close[0]>open[0] AND open[0]<=close[1] AND close[0]>=open[1] AND range[0]>averagetruerange[X](close)*Y AND volume[0]>volume[1] AND average[Z](Volume)<volume[0]
// hammer rialzista
C2 = close[1]<open[1] AND open[0]>low[0]+(range*0.66) AND close[0]>low[0]+(range*0.66) AND range[0]>abs(open-close)*4 AND low[0]<low[1] AND range[0]>averagetruerange[X](close)*Y AND volume[0]>volume[1] AND average[Z](Volume)<volume[0]
// piercing pattern rialzista
C3 = close[1]<open[1] AND open[0]<low[1] AND close[0]>=low[1]+(range[1]*0.50) AND close[0]<open[1] AND range[0]>averagetruerange[X](close)*Y AND volume[0]>volume[1] AND average[Z](Volume)<volume[0]
// swing point low + one white soldier (rialzista)
C4 = close[2]<open[2] AND low[2]>low[1] AND low[0]>low[1] AND close[0]>open[0] AND close[0]>high[1] AND high[2]>high[1] AND high[0]>high[1] AND high[0]>high[2] AND close[0]>open[2] AND close[0]>=low[0]+(range[1]*0.50) AND range[0]>averagetruerange[X](close)*Y AND volume[0]>volume[1] AND average[Z](Volume)<volume[0]
// inside day (solo range) reversal rialzista o continuazione ribassista
C5= close[1]<open[1] AND high[0]<=high[1] AND low[0]>=low[1] AND range[1]>averagetruerange[X](close)*Y
// Harami (body+range) reversal rialzista o continuazione ribassista
C6=close[1]<open[1] AND open[0]>=close[1] AND close[0]<=open[1] AND open[0]<=open[1] AND close[0]>=close[1] AND high[1]>=high[0] AND low[1]<=low[0] AND range[1]>averagetruerange[X](close)*Y
C7 = rsi[14](close)<40
C8 = close[0]<exponentialaverage[media](close)
C9=ADX[14]>=20
screener [(C1 OR C2 OR C3 OR C3 OR C4 OR C5 OR C6) AND C7 AND C8 AND C9]
Le condizioni in blu sono quelle riguardanti i pattern inside di continuazione.
Potete scegliere di ometterli dai vostri screeners di inversione, scrivendo davanti ai codici relativi le due barre // e togliendoli dal codice finale screener.
TIMEFRAME (DAILY)
// periodo ATR
X=20
// moltiplicatore ATR
Y=1
// periodo media mobile volume
Z=60
// periodo media mobile
media=20
// engulfing pattern ribassista (anche reversal day)
C1=range[0]>=range[1] AND close[1]>open[1] AND close[0]<open[0] AND open[0]>=close[1] AND close[0]<=open[1] AND range[0]>averagetruerange[X](close)*Y AND volume[0]>volume[1] AND average[Z](Volume)<volume[0]
// shooting star ribassista
C2 = close[1]>open[1] AND open[0]<high[0]-(range*0.66) AND close[0]<high[0]-(range*0.66) AND range[0]>abs(open-close)*4 AND high[0]>high[1] AND range[0]>averagetruerange[X](close)*Y AND volume[0]>volume[1] AND average[Z](Volume)<volume[0]
// dark cloud cover ribassista
C3 = close[1]>open[1] AND open[0]>high[1] AND close[0]<=high[1]-(range[1]*0.50) AND close[0]>open[1] AND range[0]>averagetruerange[X](close)*Y AND volume[0]>volume[1] AND average[Z](Volume)<volume[0]
// swing point high + one white soldier (ribassista)
C4 = close[2]>open[2] AND high[2]<high[1] AND high[0]<high[1] AND close[0]<open[0] AND close[0]<low[1] AND low[2]<low[1] AND low[0]<low[1] AND low[0]<low[2] AND close[0]<open[2] AND close[0]<=high[0]-(range[1]*0.50) AND range[0]>averagetruerange[X](close)*Y AND volume[0]>volume[1] AND average[Z](Volume)<volume[0]
// inside day (solo range) reversal ribassista o continuazione rialzista
C5=close[1]>open[1] AND high[0]<=high[1] AND low[0]>=low[1] AND range[1]>averagetruerange[X](close)*Y
// Harami (body+range) reversal ribassista o continuazione rialzista
C6=close[1]>open[1] AND open[0]<=close[1] AND close[0]>=open[1] AND open[0]>=open[1] AND close[0]<=close[1]AND high[1]>=high[0] AND low[1]<=low[0] AND range[1]>averagetruerange[X](close)*Y
C7 = rsi[14](close)>60
C8 = close[0]>exponentialaverage[media](close)
C9=ADX[14]>=20
screener [(C1 OR C2 OR C3 OR C3 OR C4 OR C5 OR C6) AND C7 AND C8 AND C9]
Le condizioni in blu sono quelle riguardanti i pattern inside di continuazione.
Potete scegliere di ometterli dai vostri screeners di inversione se volete utilizzare solo i pattern di inversione da swing trading, scrivendo davanti ai codici relativi le due barre // e togliendoli dal codice finale screener.
TIMEFRAME (DAILY)
// periodo ATR
X=20
// moltiplicatore ATR
Y=1
// periodo media mobile volume
Z=60
//periodo media mobile
media=20
// inside day (solo range) reversal ribassista o continuazione rialzista
C1=close[1]>open[1] AND high[0]<=high[1] AND low[0]>=low[1] AND range[1]>averagetruerange[X](close)*Y
// Harami (body+range) reversal ribassista o continuazione rialzista
C2=close[1]>open[1] AND open[0]<=close[1] AND close[0]>=open[1] AND open[0]>=open[1] AND close[0]<=close[1]AND high[1]>=high[0] AND low[1]<=low[0] AND range[1]>averagetruerange[X](close)*Y
// engulfing pattern rialzista (anche reversal day)
C3=range[0]>=range[1] AND close[1]<open[1] AND close[0]>open[0] AND open[0]<=close[1] AND close[0]>=open[1] AND range[0]>averagetruerange[X](close)*Y AND volume[0]>volume[1] AND average[Z](Volume)<volume[0]
// hammer rialzista
C4 = close[1]<open[1] AND open[0]>low[0]+(range*0.66) AND close[0]>low[0]+(range*0.66) AND range[0]>abs(open-close)*4 AND low[0]<low[1] AND range[0]>averagetruerange[X](close)*Y AND volume[0]>volume[1] AND average[Z](Volume)<volume[0]
// piercing pattern rialzista
C5 = close[1]<open[1] AND open[0]<low[1] AND close[0]>=low[1]+(range[1]*0.50) AND close[0]<open[1] AND range[0]>averagetruerange[X](close)*Y AND volume[0]>volume[1] AND average[Z](Volume)<volume[0]
// swing point low + one white soldier (rialzista)
C6 = close[2]<open[2] AND low[2]>low[1] AND low[0]>low[1] AND close[0]>open[0] AND close[0]>high[1] AND high[2]>high[1] AND high[0]>high[1] AND high[0]>high[2] AND close[0]>open[2] AND close[0]>=low[0]+(range[1]*0.50) AND range[0]>averagetruerange[X](close)*Y AND volume[0]>volume[1] AND average[Z](Volume)<volume[0]
C7 = rsi[14](close)>60
C8 = close[0]>exponentialaverage[media](close)
C9=ADX[14]>=20
screener [(C1 OR C2 OR C3 OR C3 OR C4 OR C5 OR C6) AND C7 AND C8 AND C9]
Le condizioni in blu sono quelle riguardanti i pattern inside di continuazione.
Potete scegliere di ometterli dai vostri screeners di inversione se volete utilizzare solo i pattern di inversione da swing trading, scrivendo davanti ai codici relativi le due barre // e togliendoli dal codice finale screener.
TIMEFRAME (DAILY)
// periodo ATR
X=20
// moltiplicatore ATR
Y=1
// periodo media mobile volume
Z=60
// periodo media mobile
media=20
// inside day (solo range) reversal rialzista o continuazione ribassista
C1= close[1]<open[1] AND high[0]<=high[1] AND low[0]>=low[1] AND range[1]>averagetruerange[X](close)*Y
// Harami (body+range) reversal rialzista o continuazione ribassista
C2=close[1]<open[1] AND open[0]>=close[1] AND close[0]<=open[1] AND open[0]<=open[1] AND close[0]>=close[1] AND high[1]>=high[0] AND low[1]<=low[0] AND range[1]>averagetruerange[X](close)*Y
// engulfing pattern ribassista (anche reversal day)
C3=range[0]>=range[1] AND close[1]>open[1] AND close[0]<open[0] AND open[0]>=close[1] AND close[0]<=open[1] AND range[0]>averagetruerange[X](close)*Y AND volume[0]>volume[1] AND average[Z](Volume)<volume[0]
// shooting star ribassista
C4 = close[1]>open[1] AND open[0]<high[0]-(range*0.66) AND close[0]<high[0]-(range*0.66) AND range[0]>abs(open-close)*4 AND high[0]>high[1] AND range[0]>averagetruerange[X](close)*Y AND volume[0]>volume[1] AND average[Z](Volume)<volume[0]
// dark cloud cover ribassista
C5 = close[1]>open[1] AND open[0]>high[1] AND close[0]<=high[1]-(range[1]*0.50) AND close[0]>open[1] AND range[0]>averagetruerange[X](close)*Y AND volume[0]>volume[1] AND average[Z](Volume)<volume[0]
// swing point high + one white soldier (ribassista)
C6 = close[2]>open[2] AND high[2]<high[1] AND high[0]<high[1] AND close[0]<open[0] AND close[0]<low[1] AND low[2]<low[1] AND low[0]<low[1] AND low[0]<low[2] AND close[0]<open[2] AND close[0]<=high[0]-(range[1]*0.50) AND range[0]>averagetruerange[X](close)*Y AND volume[0]>volume[1] AND average[Z](Volume)<volume[0]
C7 = rsi[14](close)<40
C8 = close[0]<exponentialaverage[media](close)
C9=ADX[14]>=20
screener [(C1 OR C2 OR C3 OR C3 OR C4 OR C5 OR C6) AND C7 AND C8 AND C9]
Scrivi commento
Gaspare (lunedì, 28 ottobre 2019 20:03)
Salve
forse chiedo troppo ma confido nella tua disponibilita' e gentilezza, grazie.
Si puo' costruire un TS basato sui PATTERNS CANDELE GIAPPONESI?
Cioe' si possono codificare in un sistema unico da mettere on line?
Certamente poi si dovra' scegliere il Time free piu' idoneo all'operativita'.
Ancora grazie
vincenzo (lunedì, 23 agosto 2021 12:05)
per individuare delle star graficamente come posso fare?
Max (lunedì, 23 agosto 2021 14:25)
https://www.prorealcode.com/prorealtime-indicators/candlestick-patterns-recognition/.
In questo caso a te servono solo i codici di Data2 e Data3 per le STAR.
Il resto se non ti serve cancellalo dal codice dell'indicatore.