Buongiorno,
sono tornato sull’indicatore Vidya purtroppo come da precedente topic trovo spesso qualche problema, in questo caso sto cercando un incrocio fra tue tipi di Vidya
una è la classica a 7 periodi:
ONCE SC = 2/(7+1)
AbsCMO = (Abs(Chandle[7](Close)))/100
IF BarIndex <= 100 THEN
Vidya = close
ELSE
Vidya = (SC*AbsCMO*Close)+(1-(SC*AbsCMO))*Vidya
ENDIF
c2= Vidya
l’altra è invece smussata con una media mobile weighted sempre a 7 periodi
ONCE SC = 2/(7+1)
AbsCMO = (Abs(Chandle[7](Close)))/100
IF BarIndex <= 100 THEN
Vidya = close
ELSE
Vidya = (SC*AbsCMO*Close)+(1-(SC*AbsCMO))*Vidya
ENDIF
c1 = weightedaverage[7](Vidya)
Il codice dello screener in teoria dovrebbe essere cosi:
ONCE SC = 2/(7+1)
AbsCMO = (Abs(Chandle[7](Close)))/100
IF BarIndex <= 100 THEN
Vidya = close
ELSE
Vidya = (SC*AbsCMO*Close)+(1-(SC*AbsCMO))*Vidya
ENDIF
c1 = weightedaverage[7](Vidya)
ONCE SC = 2/(7+1)
AbsCMO = (Abs(Chandle[7](Close)))/100
IF BarIndex <= 100 THEN
Vidya = close
ELSE
Vidya = (SC*AbsCMO*Close)+(1-(SC*AbsCMO))*Vidya
ENDIF
c2= Vidya
c3= c1 – c2
screener [c3]
il problema è quello che la maggior parte dei risultati che escono dallo screener relativi all’incrocio non è corretta,
vorrei risolvere questo problema in quanto questo tipo di indicatori li sto usando molto e ho in mente una strategia
grazie
Ciao. Qui hai uno screener che individua i crossover rialzista/ribassista. Se vuoi cercarne solo uno devi solo cancellarlo nell'ultima riga.
ONCE SC = 2/(7+1)
AbsCMO = (Abs(Chandle[7](Close)))/100
IF BarIndex <= 100 THEN
Vidya = close
ELSE
Vidya = (SC*AbsCMO*Close)+(1-(SC*AbsCMO))*Vidya
ENDIF
Vidya1= Vidya
Vidya2 = weightedaverage[7](Vidya)
screener[Vidya1 crosses over Vidya2 or Vidya1 crosses under Vidya2]
Ciao Ivan,
Grazie per l’aiuto, hai scritto un codice che con poche righe funziona benissimo,
ho visto che nell’ultima riga hai utilizzato il “crosses over” mentre io ho utilizzato “c3=c1-c2″
e poi hai utilizzato ” Vidya2 = weightedaverage[7](Vidya)” distinguendola (giustamente) dalla Vidya1,
in questo modo ho riscritto il codice mio precedente filtrando anche un po di volume:
MKC= Volume>100000
ONCE SC = 2/(7+1)
AbsCMO = (Abs(Chandle[7](Close)))/100
IF BarIndex <= 100 THEN
Vidya = close
ELSE
Vidya = (SC*AbsCMO*Close)+(1-(SC*AbsCMO))*Vidya
ENDIF
c1 = weightedaverage[7](Vidya)
ONCE SC = 2/(7+1)
AbsCMO = (Abs(Chandle[7](Close)))/100
IF BarIndex <= 100 THEN
Vidya2 = close
ELSE
Vidya2 = (SC*AbsCMO*Close)+(1-(SC*AbsCMO))*Vidya2
ENDIF
c2= Vidya2
c3= c2 crosses over c1
screener [MKC and c3]
direi che funziona bene, ma dove era l’errore del primo codice scritto da me,
l’utilizzo della differenza delle due Vidya “c3= c1 – c2” e non il crosses over?
Te lo chiedo perche l’indicatore con i richiami che utilizza la differenza fra le due Vidya sembra che funzioni bene
indicator1 = CALL “Vidya Weighted”[Periodi1]//periodi superiori a Vidya New altrimenti
//non tornano gli incroci
indicator2 = CALL “Vidya New”[Periodi]
c1 =-(indicator1-indicator2)
return c1,0
Ciao, nel tuo codice iniziale, lo screener non filtrava nulla. Avevi affermato che c3 = c2-c1. Se non dici altro lo screener mostrerà tutti i valori (tranne c2=c1, il che è molto strano). Se volessi usare la tua espressione, dovrebbe essere qualcosa del genere: screener[c3>0 and c3[1]<0] per un crossover rialzista screener[c3<0 and c3[1]>0] per un crossover ribassista
Devo entrare meglio nella logica della programmazione,,,,
avrei una domanda sempre con le Vidya ma con un indicatore quindi
la posterò nella sezione giusta.
Grazie Ivan sei stato di grande aiuto…..