salve vorrei capire come impostare il codice di un indicatore che mi somma il numero di barre che si formano tra un incrocio rialzista di due medie mobili da 10 e 20 periodi (la 10 che va sopra la 20), fino al verificarsi dell’incrocio al ribasso di queste due medie mobili,(la 10 che va sotto la 20)
Cioé contare quante barre ci sono tra questo spazio utilizzando come punto di riferimento l’incrocio delle medie mobili, e mi deve restituire la somma di queste barre.
L’indicatore deve iniziare a contare quando si verifica l’incrocio a rialzo, e finisce con l’incrocio a ribasso, successivamente riparte quando si riverifica l’incrocio al rialzo.
Ciao Luigi, ti allego l’indicatore.
Le variabili da settare sono:
Breve: periodo media mobile breve
Lunga: periodo media mobile lunga
Tipo 1 e Tipo 2: tipologia di medie mobili, semplice, esponenziale, ecc…
Prezzo da applicare: open, close, ecc….
Max
grazie, se inveve io vorrei che l’ultimo valore dell’indicatore mi segnasse la somma delle barre totali sia al rialzo che ribasso.
Ho provato a modificare il codice cosi, secondo voi potrebbe andare bene?
grazie, saluti.
media1=average[breve,tipo1](customclose)
media2=average[lunga,tipo2](customclose)
increase = media1>media2
crossover =0
WHILE increase[crossover] DO
crossover = crossover+1
WEND
decrease = media1<media2
crossunder =0
WHILE decrease[crossunder] DO
crossunder = crossunder+1
WEND
if increase then
x = crossover+x
elsif decrease then
x = crossunder+x
endif
return x coloured(0,0,0)
Se vuoi che l’indicatore calcoli il totale delle barre crossover e crossunder in un dato periodo fai:
media1=average[breve,tipo1](customclose)
media2=average[lunga,tipo2](customclose)
increase = media1>media2
crossover =0
WHILE increase[crossover] DO
crossover = crossover+1
WEND
decrease = media1<media2
crossunder =0
WHILE decrease[crossunder] DO
crossunder = crossunder+1
WEND
totalcrossover=summation[10000](crossover)
totalcrossunder=summation[10000](crossunder)
return totalcrossover, totalcrossunder
In questo caso ho impostato il periodo 10000 barre, ma puoi cambiarlo a tuo piacimento.
Cambia anche l’impostazione istogramma e metti le linee.
Max
ho provato a fare questo codice ma non mi da il totale di entrambi i valori, cioe la somma totalcrossover diminuisce.
Scusa, allora non ho capito io bene cosa vuoi che l’indicatore faccia.
La modifica che ho fatto calcola le barre totali di crossover e di crossunder delle 2 medie mobili in un dato periodo di tempo.
Puoi spiegarti meglio facendo un esempio con dei dati?
grazie
Max
ecco l’esempio che dico, nella parte inferiore del grafico la linea colorata di arancione dovrebbe essere l’indicatore che mi dovrebbe restituire la somma mobile delle barre che trascorrono tra un incrocio ed un altro.
Ok, si in questo caso è giusto il codice che hai integrato tu, ho verificato.
Max
pero se vai a vedere essattamente sull’indicatore, il valore, se inizi dall’incrocio delle medie, e a barra a barra vai avanti, noterai che il valore aumenta non ad 1 ad 1 ma inizia ad esempio da 10 e cammina facendo 12, 14,18,25, cioe non in maniera aggiugento 1 valore, non so se hai capito.
nell’immagine che ho allegato si vede chiaramente il problema, inffatti sono partito sul valore 1032, e secondo il righello sono passati 17 barre dell’incrocio ribassista, quindi la somma deve essere 1032+17 = 1049 e non 1157.
Non riesco a capire perchè fa cosi, ho provato anche facendo il comando summation ma niente.
Ciao, hai ragione….leggendo il codice sembrava giusto, in realtà somma proprio come dici tu!
Allora basta che utilizzi il contatore di barre del grafico…visto che il conteggio è continuo, senza interruzioni
semplicemente con la formula
return barindex
Prova questo e fammi sapere (io l’ho provato solo una volta sul DAX daily):
DEFPARAM CalculateOnLastBars = 2000
media1=average[breve,tipo1](customclose)
media2=average[lunga,tipo2](customclose)
ONCE CrossOverBar = 0
IF media1 CROSSES OVER media2 THEN
CrossOverBar = BarIndex
ENDIF
ReturnBar = CrossOverBar
IF media1 CROSSES UNDER media2 THEN
CrossOverBar = 0
ENDIF
return (ReturnBar > 0) * (BarIndex - ReturnBar)
Roberto
Niente roberto non funziona, non mi restituisce la somma totale, ho allegato la foto.
Utilizza il codice
return barindex
ti conta tutte le barre del grafico.
Funziona
si infatti funziona maximus78, ma ho provato anche a fare questo codice è funziona lo stesso:
media1=average[10](close)
media2=average[20](close)
increase = media1>media2
decrase = media1<media2
for i=1 to 1 do
if increase then
y = y+i
elsif decrase then
y = y
endif
next
return y coloured(0,0,0)
comunque grazie per l’intervento, finalmente abbiamo risolto, grazie e buone feste a tutti.
Ottimo!!
Grazie e buone feste anche a te, a Roberto a e tutti!
Max