Canale di donchian automatico
Forums › ProRealTime forum Italiano › Supporto ProBuilder › Canale di donchian automatico
- This topic has 26 replies, 6 voices, and was last updated 1 week ago by maximus78.
-
-
10/17/2024 at 8:09 PM #239167
Buonasera a tutti, avrei bisogno di un aiuto:
voglio impostare un indicatore sul prezzo automatico che segnali massimi e minimi di periodo (canale di donchian) anche di diversi valori secondo i seguenti parametri:
a=highest[HH](high)
b=lowest[LL](low)
c= a=a[1] // massimi di periodo = a quelli precedenti
d= b=b[1] // minimi di periodo = a quelli precedenti– deve trovare automaticamente:
– il più basso valore di HH (quindi più recente) in cui la linea del massimo rimane orizzontale fino al prezzo corrente (per più barre possibile)
– il più basso valore di LL (quindi più recente) in cui la linea del minimo rimane orizzontale fino al prezzo corrente (per più barre possibile)In pratica, trova i massimi e minimi di periodo senza impostare nulla.
Se il prezzo è in uptrend cioè, se High>high[1] dovrebbe risultare HH=1Se low<low[1] dovrebbe segnare in automatico LL=1
Nell’allegato ad esempio impostato manualmente, la linea del massimo è HH=1, mentre quella del minimo LL=3.
Vi ringrazio in anticipo!
Max
10/18/2024 at 12:18 PM #239193Grazie per la tua spiegazione. Ora ho compreso che quello che desideri è un indicatore che conti il numero di barre consecutive in cui il massimo o il minimo rimangono orizzontali (invariati). Con questo in mente, ti propongo il seguente codice, che dovrebbe soddisfare il tuo requisito.
123456789101112131415161718192021222324// Parametri del canale di DonchianHH = 20 // Periodo per i massimiLL = 20 // Periodo per i minimi// Calcolo dei massimi e minimi di periodohighMax = highest[HH](high)lowMin = lowest[LL](low)// Controllo se il massimo rimane orizzontale per il maggior numero di barreif highMax = highMax[1] thenmaxOrizzontale = maxOrizzontale+1elsemaxOrizzontale = 0 // opure 1endif// Controllo se il minimo rimane orizzontale per il maggior numero di barreif lowMin = lowMin[1] thenminOrizzontale = minOrizzontale-1elseminOrizzontale = 0 // opure 1endif// Visualizzazione dei valori di HH e LLRETURN minOrizzontale style(histogram)coloured("red"),maxOrizzontale style(histogram)coloured("green")Spiegazione:
maxOrizzontale e minOrizzontale sono contatori che aumentano di 1 ogni volta che il massimo o il minimo rimangono uguali durante una nuova barra.
Quando il massimo o il minimo cambiano, i contatori vengono resettati a 0.
RETURN visualizza i contatori come un istogramma: uno per i massimi (in verde) e uno per i minimi (in rosso).Questo dovrebbe funzionare come desiderato.
1 user thanked author for this post.
10/19/2024 at 4:59 PM #239252Ciao Ivan, ti ringrazio per la tua celere e comunque utilissima risposta,
ma non volevo un contatore di barre che conti le barre in cui il prezzo di highest[20](high) e lowest[20](low) rimane orizzontale.
Vorrei che in automatico, senza impostare un periodo di riferimento, nel tuo caso HH e LL [20], l’indicatore trovi in automatico highest[HH](high) e lowest[LL](low) per i quali le linee rimangano orizzontali per almeno due barre o più partendo
dall’ultima barra (più recente) cioè high[0] e low[0].
Come in quest’altro esempio che ti allego, la linea lowest[LL](low) copre almeno 2 barre orizzontali di minimo, ed il valore di LL risulta 7, quindi è lowest[7](low).
Mentre quella del massimo è highest[1](high) perchè è un massimo storico del titolo, e quindi non c’è nessun valore di HH maggiore di 1, partendo dall’ultima barra più recente (high[0] ) per la quale la linea di massimo copra almeno 2 barre.
Spero di essermi spiegato….non so se è possibile fare un indicatore del genere, ma spero tu mi possa essere di aiuto.
Ti ringrazio ancora per il tuo tempo. Attendo tue….
Max
10/23/2024 at 10:06 AM #239361Posso provare ad aiutarti, ma ad essere sincero non ho capito che tipo di canale Donchian vuoi e che linee deve stampare.
10/23/2024 at 7:50 PM #239382Ciao Roberto, grazie per la disponibilità….la logica è più semplice di quanto sembra….per spiegarmi meglio ti allego un esempio e te lo descrivo….
E’ un titolo a caso, vedi nel jpg cattura 1, le linee di donchian.
Nel pannello che vedi sotto il grafico, i periodi da settare li chiamo HH per highest[HH](high) e LL per lowest[LL](low), quindi sono i massimi e minimi di diversi periodi.
NN che nel nostro caso è sempre settato a 0 equivale a highest[HH](high)[NN], cioè i periodi precedenti……. Lascia perdere la variabile “perc”.
Per trovare i valori di HH e LL, che vorrei si settassero in automatico, cioè che me li trovi l’indicatore stesso….lo posso fare manualmente muovendo i valori HH e LL da 1, cioè
highest[1](high) e lowest[1](low) in su fino a trovare i primi valori utili in modo che le due linee siano orizzontali.
In questo caso i primi valori utili per cui le linee siano flat sono HH=6 cioè Highest[6](high) per 5 barre (ultima compresa), e LL=3, cioè lowest[3](low) per 3 barre (ultima compresa).
In pratica l’indicatore dovrebbe disegnare automaticamente il canale di donchian con valori diversi per il massimo e il minimo in base ai più recenti supporti e resistenze possibili.
Nel JPG 2 ti faccio vedere la condizione appena prima che si verifichino le condizioni ricercate. Vedi che highest[5](high) e lowest[2](low) piegano e non sono flat.
Ovviamente se il titolo sta facendo un massimo o un minimo storico, il valore che trova sarà highest[1](high) o lowest[1](low) perchè non avrà massimi o minimi precedenti che permetteranno di fare una linea orizzontale.
Spero di essermi spiegato e che sia possibile concretizzarlo, se hai dubbi scrivimi pure.
Grazie mille Roberto.
10/25/2024 at 4:33 PM #239473Non sono ancora riuscito a capire bene.
Ti allego una foto con due copie dello stesso grafico, su un grafico c’è il comune Canale Donchian, l’altro è vuoto e vorrei che, cominciando dalla prima candela sulla sinistra tu tracciassi le due linee, candela per candela, spiegandomi in quale posizione le disegni (a quale livello di prezzo, sia HH che LL).
Questo dovrebbe aiutarmi a capire.
10/26/2024 at 10:38 AM #239496Non riesco a segnartelo sul grafico da te allegato, anche perchè le linee del canale di donchian che voglio vedere si impostano in base agli alti/bassi dell’ultima candela, quindi cambiano in continuazione.
Ma ti posso scrivere dei codici in modo da capire ciò che vorrei, e ti scrivo anche gli errori che mi risultano:
Quello che devo trovare:
– Highest[HH](high) // i valori di HH alla barra corrente che soddisfi la condizione:
Highest[HH](high) [N]=Highest[HH](high) [N+1]:
Highest[HH](high)[0] =Highest[HH](high) [1], Highest[HH](high)[1] =Highest[HH](high) [2], Highest[HH](high)[2] =Highest[HH](high) [3]……
e così via fino a quando la linea dei massimi del canale è flat, orizzontale….per il maggior numero di barre possibili.
Quindi l’indicatore deve scansire i periodi di HH, da 1 in su, fino a che non trova che la condizione sopra è vera, cioè la linea highest di donchian rimane costante. (CICLO FOR)
-stessa cosa per Lowest[LL](low) // i valori di LL alla barra corrente.
Deve trovare le stesse condizioni, quindi, il valore di LL può essere diverso da HH, e crea due linee di donchian con valori indipendenti tra loro, non come il normale canale di donchian che ha lo stesso periodo per highest e lowest.
Quindi l’indicatore deve scansire i valori di LL fino a quando rimane vero : Lowest[LL](low) [N]=Lowest[LL](low) [N+1]:
Lowest[LL](low) [0]=Lowest[LL](low) [1], Lowest[LL](low) [1]=Lowest[LL](low) [2], Lowest[LL](low)[2] =Lowest[LL](low) [3]…..ecc…
Eccezioni:
Se il titolo sta facendo un massimo/minimo storico i valori di HH e/o LL devono dare [1]:
if high[0]>=Highest[barindex](high)[1] then
HH=1
endif
if low<=lowest[barindex](low) [1]then
LL=1
endif
In questo caso, mi da un errore perchè dice che un parametro di tipo intero positivo è atteso con con highest[barindex](high)
Non capisco il perchè visto che barindex da il numero di barre nel grafico ed è sempre un valore intero positivo.
10/26/2024 at 5:52 PM #239530Non mi servono le righe del codice. Ho bisogno di una dscrizione testuale di quello che fai manualmente e mentalmente quando vedi un grafico vuoto e vuoi iniziare a vedere quello che tu desideri, candela per candela, partendo da un punto a tua scelta e andando verso destra, spiegandomi ad ogni candela cosa occorre calcolare, cosa occorre visualizzare e perché.
Se non vuoi usare il grafico che avevo allegato, usane uno tuo, magari ricostruiscilo con eXcel e facci delle annotazioni.
10/26/2024 at 5:56 PM #239531forse vuoi una cosa cosi ?
10/26/2024 at 6:54 PM #23953710/26/2024 at 8:56 PM #239547Si, stavolta penso di avere capito.
Te lo farò appena possibile.
10/27/2024 at 6:38 PM #239577Vediamo se ho ben capito:
12345678910111213141516171819202122232425262728293031// Parametri del canale di DonchianONCE HH = 5 // Periodo per i massimiONCE LL = 3 // Periodo per i minimi// Calcolo dei massimi e minimi di periodohighMax = highest[HH](high[1])lowMin = lowest[LL](low[1])//ONCE HHbars = 1ONCE LLbars = 1//IF highMax = highMax[1] THENHHbars = HHbars + 1ELSEHHbars = 1ENDIF//IF lowMin = lowMin[1] THENLLbars = LLbars + 1ELSELLbars = 1ENDIF//Offset = highest[max(1,max(HH,LL))](range)IF HHbars >= HH THENDrawText("#HHbars#",BarIndex, highMax + Offset) coloured("Blue")ENDIFIF LLbars >= LL THENDrawText("#LLbars#",BarIndex, lowMin - Offset) coloured("Red")ENDIF//RETURN highMax AS "Upper",lowMin AS "Lower"10/27/2024 at 8:00 PM #239580Ciao Roberto, ti ringrazio per il tuo tempo ed il tuo aiuto, ma purtroppo non è quello che intendevo…i parametri 5 e 3 del mio esempio e che hai impostato tu, li deve trovare l’indicatore, non vanno impostati a priori.
Ma forse ho trovato il modo migliore di spiegarlo.
Date le formule di partenza del canale di donchian:
Massimo=highest[H](high) // H è l’incognita
Minimo= lowest[L](low) // L è l’incognita
Per trovare H, l’indicatore deve analizzare i periodi di H da 1 a barindex (totale delle barre) fino a che trova la condizione massimo[0]=massimo[1] vera.
Per trovare L, deve analizzare i periodi di L da 1 a barindex fino a che trova la condizione minimo[0]=minimo [1] vera.
Inoltre, se H risulta = barindex, cioè se è ad un massimo storico, va sostituito con valore =1, quindi solo in questo caso H=1
lo stesso con L, se L = barindex, va sostituito con valore=1, L=1
Forse in questo modo è più semplice.
Scusami se non riesco a spiegarmi bene.
10/27/2024 at 9:37 PM #239583//Zigo
defparam calculateonlastbars=1000
timeframe(default, updateonclose)once n =0
once m=0
n=n+1
m=m+1HH=Highest[n](high)
LL=lowest[m](low)
if high < hh then
DRAWTEXT(“-“, barindex, HH)
endif
if low >LL then
DRAWTEXT(“-“, barindex, LL)
endif
return10/28/2024 at 2:08 PM #239612Ho leggermente modificato l’indicatore di Zigo cambiando il disegno dei segmenti.
In allegato il codice.
Mi spieghi come vuoi usarlo ?
Grazie
-
AuthorPosts
Find exclusive trading pro-tools on