vorrei scrivere un indicatore che mi indicasse dopo che ho avuto un cross della close sopra una media mobile a 20 giorni tramite un for mi indicasse dove nelle nove barre antecedenti questo cross della close sopra la media a 20 giorni c ‘è stato un cross al ribasso sella close sulla stessa media
grazie
JSParticipant
Senior
La freccia verde verso l’alto indica il “crossover” della Chiusura in base alla media, il numero rosso sotto la freccia verde indica il numero di barre che hanno avuto luogo nel precedente “crossunder”…
//DefParam DrawOnLastBarOnly=True
MA20=Average[20](Close)
ATR=AverageTrueRange[14](Close) //Only for drawing purposes
If Close crosses over MA20 then
DrawArrowUp(BarIndex,High+ATR/4)Coloured("Green")
Bars=BarsSince(Close crosses under MA20)
If Bars<10 then
DrawText("#Bars#",BarIndex,High+ATR/8)Coloured("Red")
EndIf
EndIf
Return MA20
in realta a grafico vedo solo la freccia verde ma il numero non si legge
JSParticipant
Senior
Puoi mostrare il grafico con le impostazioni…?
adesso devo dire che è tutto ok e torna tutto ,probabilmente si era impallato il computer,
ma perche se scrivo questo codice che allego l indicatore non mi ritorna un cross della close sotto una media mobile a 20 giorni nelle nove barre precedenti il cross della close sopra la media a 20 giorni ma mi ritorna semplicemente quando la close crossa sopra la m20
MA20=Average[20](Close)
crossdown=0
if close crosses over ma20 then
for i=1 to 9 DO
if close[i]crosses under MA20 THEN
crossdown=1
BREAK
ENDIF
NEXT
endif
return crossdown
Manca [i] con la media:
if close[i]crosses under MA20[i] THEN
altrimenti verifica i prezzi passati con la media corrente.
avevo gia verificato questa ipotesi ma il risultato è identico, a me il codice sembra scritto corretto ma evidentemente c e qualcosa di sbagliato in come è scritto
in pratica mi ritorna il momento in cui la close crossa sopra la media mobile ritornandomelo sia come cross al rialzo della close sulla media e sia come cross al ribasso della close sulla media
MA20=Average[20](Close)
crossdown=0
crossup=0
if close crosses over ma20 then
crossup=1
for i=1 to 9 DO
if close[i]crosses under MA20[i] THEN
crossdown=1
ENDIF
NEXT
endif
return crossdown as “cd”,crossup as “cu”
Va usato 1 e -1 per vedere entrambi:
MA20=Average[20](Close)
crossdown=0
crossup=0
if close crosses over ma20 then
crossup=1
for i=1 to 9 DO
if close[i]crosses under MA20[i] THEN
crossdown=-1
break
ENDIF
NEXT
endif
return crossdown as "cd",crossup as "cu"
per quello che mi ero prefisso io l indicatore non funziona ti allego quello che fa l indicatore come lo hai proposto tu nel file “A1” come vedi quello che fa è indicare sia “cu” e sia “cd” nel momento in cui ho un cross al rialzo e precedentemente ho avuto un cross al ribasso entro le 9 barre fa , allora in questo caso lui segnala contemporaneamente cu e cd nella stessa barra (con lo spike che ho cerchiato di verde) pero’ se invece ho un cross al rialzo ma non ho nelle 9 barre precedenti un cross al ribasso allora lui segnala solo cu (con lo spike cerchiato di rosso in figura A1 )
mentre invece quello che vorrei ottenere io è quello descritto infigura “A2″cioe un unico spike quando ho il cross al rialzo (spike verde) e un unico spike quando ho avuto entro le 9 barre antecedenti un cross al ribasso (spike rosso)
Ah… deve restituirti semplicemente ogni incrocio ribassista e rialzista?
Eccolo:
MA20 = Average[20,0](Close)
crossdown = 0
crossup = 0
if close crosses over ma20 then
for i=1 to 9 DO
if close[i]crosses under MA20[i] THEN
crossdown=1
BREAK
ENDIF
NEXT
elsif close crosses under ma20 then
for i=1 to 9 DO
if close[i]crosses over MA20[i] THEN
crossup=1
BREAK
ENDIF
NEXT
endif
return crossdown AS "Cross UYnder",crossup AS "Cross Over"