Trading system con le divergenze
Forums › ProRealTime forum Italiano › Supporto ProOrder › Trading system con le divergenze
- This topic has 11 replies, 3 voices, and was last updated 7 years ago by R05.
-
-
09/28/2017 at 1:17 PM #4766910/01/2017 at 9:59 AM #47906
Ciao, posso darti un codice che ho scritto per individuare le divergenze tra nuovi massimi/minimi di prezzo e massimi decrescenti/minimi crescenti dell’oscillatore.
Ti faccio un esempio con RSI, ma può essere fatto con altri oscillatori come CCI, stocastico, Williams% ecc…
Puoi partire da questo e modificarlo od integrarlo con altri indicatori come medie mobili, patterns candlestick, ecc….puoi utilizzarlo come indicatore di divergenze o come condizioni per gli screeners.
In pratica imposto il canale di donchian sull’oscillatore in modo da tracciare il più alto massimo ed il più basso minimo di un determinato periodo. Lo stesso lo applico al prezzo.
Quando il prezzo fa un nuovo massimo ma l’oscillatore fa un massimo minore, mi segnala una divergenza. Lo stesso quando si comporta al contrario con i minimi:
maxprice=high>=highest[donchian](high)[1]
minprice=low<=lowest[donchian](low)[1]maxosc=rsi[rsiperiod](close)<=highest[donchian](rsi[rsiperiod](close))[1] and rsi[rsiperiod](close)>=50
minosc=rsi[rsiperiod](close)>=lowest[donchian](rsi[rsiperiod](close))[1] and rsi[rsiperiod](close)<=50In aggiunta puoi impostare i livelli di ipercomprato e ipervenduto dei massimi e minimi del canale di donchian applicato all’oscillatore.
ipercom=highest[donchian](rsi[rsiperiod](close))[1]>=60
ipervend=lowest[donchian](rsi[rsiperiod](close))[1]<=40
in pratica, se si verifca maxprice e maxosc in ipercom, c’è una divergenza ribassista,
al contrario se si verifica minprice e minosc in ipervend, si verifica una divergenza rialzista.
Le variabili sono:
donchian= n° di periodi che traccia i massimi/minimi del prezzo e dell’indicatore, per esempio 20
rsiperiod= periodo del RSI, per esempio 14
Fammi sapere se hai bisogno di delucidazioni.
Massimo
10/01/2017 at 4:35 PM #47936Ok grande grazie Massimo tutto chiaro, gentilissimo. L’ho codificato così per fare una prova e vedere il funzionamento sul giornaliero senza nessun ulteriore filtro. Si può migliorare però il sistema c’è, qualcosa con le divergenze si può implementare. Grazie.
123456789101112131415161718192021maxprice=high>=highest[20](high)[1]minprice=low<=lowest[20](low)[1]maxosc=rsi[14](close)<=highest[20](rsi[14](close))[1] and rsi[14](close)>=50minosc=rsi[14](close)>=lowest[20](rsi[14](close))[1] and rsi[14](close)<=50ipercom=highest[20](rsi[14](close))[1]>=60ipervend=lowest[20](rsi[14](close))[1]<=40if maxprice and maxosc and ipercom thensellshort 1 contract at marketendifif minprice and minosc and ipervend thenbuy 1 contract at marketendifset stop ploss 40set target profit 5010/01/2017 at 8:33 PM #47945Di niente figurati, ci sto lavorando anche io….ah bene, hai già fatto il backtest col DAX!
come base è ok, il problema che ho riscontrato nel forex intraday è che si presentano tante false divergenze prima che il prezzo effettivamente inverta, stavo cercando di creare un codice contatore di divergenze in modo che possa entrare in posizione dopo 3 o + divergenze per esempio.
Teniamoci in contatto, appena riusciamo ad implementarlo ci aggiorniamo!
Massimo
10/01/2017 at 11:36 PM #4795310/02/2017 at 8:17 PM #48058Ciao,
se ti può servire, ho scritto il codice per individuare più divergenze in un dato periodo di tempo:
a=summation[n](((rsi[rsiperiod](close)) < highest[donchian](rsi[rsiperiod](close)[1]))and (high > highest[donchian](high)[1])) >= ndiver
b=highest[donchian](rsi[rsiperiod](close)[1])>60c=summation[n](((rsi[rsiperiod](close)) > lowest[donchian](rsi[rsiperiod](close)[1]))and (low < lowest[donchian](low)[1])) >= ndiver
d=lowest[donchian](rsi[rsiperiod](close)[1])<40variabili:
n=periodo preso in considerazione, es: 10 ultime barre
rsiperiod=14 (periodo rsi)
donchian=20 (nuovi massimi o minimi)
ndiver= n° di divergenze minime (es: 3)
in pratica, se ci sono le condizioni a e b, significa che in un dato periodo di tempo (es: ultime 10 barre) ci sono state almeno 3 divergenze ribassiste, con nuovi massimi di prezzo a 20 periodi (donchian) e massimi decrescenti dell’RSI 14.
Se c e d, al contrario significa che ci sono state almeno 3 divergenze rialziste, con nuovi minimi di prezzo a 20 periodi e minimi crescenti dell’RSI 14.
Max
10/02/2017 at 9:15 PM #48064Per rendere il codice più comprensibile è opportuno usare l’apposito pulsante “Inser PRT code” identificato con “<>” nella barra grigia.
10/02/2017 at 11:07 PM #48072Ciao Max, riguardo il sistema che ho riportato ieri ho aggiunto le bande di Bollinger e pur facendo meno operazioni migliora la performance. Questo gira sul giornaliero. Ho aumentato il target profit in 120: qui però sia sul target che sullo stop dipende anche dalla massima perdita che uno è disposto a perdere e anche dal massimo drawdown. Considera che quando prende lo stop in alcuni casi va prima in utile ma non raggiungendo il target, tornando indietro prende lo stop, mentre in un altro caso qualche punto in più di stop loss e non avrebbe preso la perdita.
Credo, che sul giornaliero, l’unica cosa che si possa fare è il trailing stop: nel senso se sta guadagnando ad esempio 40 punti di mettere lo stop a pareggio (così se va indietro non prende lo stop) e poi nel caso lasciare il target, ma sto verificando; perchè altrimenti mettere ulteriori indicatori o filtri potrebbe ridurre ancora di più le operazioni. Poi non saprei.
A proposito, dalle varie combinazioni in backtest, è uscito che rsi a 13 periodi e donchian a 14 è più performante.
12345678910111213141516171819202122232425262728maxprice=high>=highest[14](high)[1]minprice=low<=lowest[14](low)[1]maxosc=rsi[13](close)<=highest[14](rsi[13](close))[1] and rsi[13](close)>=50minosc=rsi[13](close)>=lowest[14](rsi[13](close))[1] and rsi[13](close)<=50ipercom=highest[14](rsi[13](close))[1]>=60ipervend=lowest[14](rsi[13](close))[1]<=40// Condizioni per entrare su posizioni longindicator2 = BollingerDown[20](close)c2 = (DLow(0) < indicator2)if minprice and minosc and ipervend and c2 thenbuy 1 contract at marketendif// Condizioni per entrare su posizioni shortindicator1 = BollingerUp[20](close)c1 = (DHigh(0) > indicator1)if maxprice and maxosc and ipercom and c1 thensellshort 1 contract at marketendifset stop ploss 40set target profit 12010/02/2017 at 11:16 PM #48073Ciao Max riguardo il tuo ultimo codice è veramente molto interessante, grazie del tuo contributo. E’ un metodo molto utile per l’intraday. Ho provato a codificare il seguente codice sul time frame orario ed è molto interessante. In questo caso è più performante senza bollinger.
A proposito i backtest li faccio sempre sul Dax e da gennaio di quest’anno (anche per il precedente).
Con calma farò ulteriori prove per vedere anche altri time frame.
Grazie.
1234567891011121314151617181920212223242526272829303132defparam cumulateorders = falsea=summation[10](((rsi[14](close)) < highest[20](rsi[14](close)[1]))and (high > highest[20](high)[1])) >= 3b=highest[20](rsi[14](close)[1])>60c=summation[10](((rsi[14](close)) > lowest[20](rsi[14](close)[1]))and (low < lowest[20](low)[1])) >= 3d=lowest[20](rsi[14](close)[1])<40maxprice=high>=highest[14](high)[1]minprice=low<=lowest[14](low)[1]maxosc=rsi[13](close)<=highest[14](rsi[13](close))[1] and rsi[13](close)>=50minosc=rsi[13](close)>=lowest[14](rsi[13](close))[1] and rsi[13](close)<=50ipercom=highest[14](rsi[13](close))[1]>=60ipervend=lowest[14](rsi[13](close))[1]<=40// Condizioni per entrare su posizioni longif minprice and minosc and ipervend and c and d thenbuy 1 contract at marketendif// Condizioni per entrare su posizioni shortif maxprice and maxosc and ipercom and a and b thensellshort 1 contract at marketendifset stop ploss 40set target profit 12010/04/2017 at 8:22 PM #48221Si infatti, su questo tipo di sistemi “potenzialmente” reversal la differenza la fa il money management e gli ordini stop, sopratutto il trailing profit.
Ottima idea quella di integrare anche le bande di bollinger!
Potresti provare ad utilizzare il codice trailing profit di Nicolas che sembra essere più funzionale di quello di default di prorealtime, dagli un’occhiata
https://www.prorealcode.com/blog/trading/complete-trailing-stop-code-function/
Scriviamoci in caso di novità!
P.S: Per Roberto: hai perfettamente ragione, utilizzerò l’opzione insert code d’ora in avanti, non l’avevo vista!
Massimo
10/05/2017 at 10:12 AM #4824310/11/2017 at 2:34 PM #49045Ciao Massimo e salve a tutti, dopo un pò di prove torno a scrivere in questo thread in quanto, nonostante molti tentativi, non riesco a trovare, o perlomeno ancora per il momento, qualcosa nell’intraday con le divergenze che dia buoni risultati.
In compenso ho trovato questo link sui pattern di Unger che mi sembra molto interessante, da applicare anche al forex con la sola eccezione di non usare la domenica come range di riferimento per la candela successiva. Assolutamente da provare.
-
AuthorPosts
Find exclusive trading pro-tools on