ProRealCode - Trading & Coding with ProRealTime™
Buongiorno a tutti,
tramite la comunità PRT utilizzo l’indicatore HA smoothed che vedete qui sotto.
Ho fatto vari tentativi ma non riesco a tramutare l’indicatore in uno screener che possa girare sulle liste in osservazione anzichè plottarlo su ogni grafico.
Sono grato per l’aiuto.
//Reglas en Heikin-Ashi:
//1- Secuencia de cuerpos blancos = tendencia alcista.
// Secuencia de cuerpos negros = tendencia bajista.
//2- Tendencia alcista fuerte = Grandes cuerpos blancos y sin sombras inferiores.
// Tendencia bajista fuerte = Grandes cuerpos negros sin sombras superiores.
//3- Cuando la tendencia se debilita surgen cuerpos pequeños con posibles sombras superior y/o inferior.
//4- Una consolidación se da cuando aparecen cuerpos pequeños con ambas sombras tanto arriba como abajo.
//5- La reversión de una tendencia se puede sospechar con la aparición de pequeños cuerpos con sombras largas tanto superiores como inferiores, o un cambio repentino de color.
// parámetros
ONCE SmoothPeriod=2 // valor por defecto
ONCE period=5 // valor por defecto
ONCE flecha=0
ONCE Dflech=barindex
// ciclo normal
IF BarIndex=0 THEN
xClose = (open+high+low+close)/4
xOpen = open
xHigh = high
xLow = low
ELSE
xClose = (open+high+low+close)/4
xOpen = (xOpen[1]+xClose[1])/2
xHigh = Max(max(high, xOpen), xClose)
xLow = Min(min(Low, xOpen), xClose)
endif
// SUAVIZADO con la media de 2 en las velas
if barindex>=(period+SmoothPeriod) then
AvOpen=exponentialAverage[SmoothPeriod](xOpen)
AvHigh=exponentialAverage[SmoothPeriod](xHigh)
AvLow=exponentialAverage[SmoothPeriod](xLow)
Avclose=exponentialAverage[SmoothPeriod](xClose)
endif
// y ésta es la que uso
DRAWCANDLE(AvOpen, AvHigh, AvLow, AvClose)
//ha7 para indicar cruces
// los valores para barindex<2 son especiales
If Barindex < SmoothPeriod then
Opcl=Open[1]
else
Opcl=Open
ENDIF
// calculo dos medias de 7 y de 10
Media7 = Average[7](Opcl)
Media10 = Average[10](Opcl)
rango= Media7/10
// uso rango para el dibujo
Alcista = AvOPen<AvClose
Alcista1 = AvOpen[1]<AvClose[1]
Bajista = AvOpen>AvClose
Bajista1 = AvOpen[1]>AvClose[1]
//Doji = Range[1] > ABS(AvOpen[1]-AvClose[1])*5
//no puede haber dos operaciones en dos dias
//valor representa mi compra cuando estoy dentro
// y el precio de venta cuando me salgo
IF Dflech < barindex[2] then
IF (Opcl>Media7 or Opcl>Media10) and not (Bajista and Bajista1) and flecha<1 then
// uso Range para que salgan visibles las flechas
DRAWARROWUP (barindex, AvHigh+Range) COLOURED (0, 0, 255)
flecha=1
Dflech = barindex
valor = AvClose
ELSIF (Opcl<Media7 or Opcl<Media10) and not (Alcista and Alcista1) and flecha>=1 then
DRAWARROWDOWN (barindex, AvHigh+Range) COLOURED (255, 0, 0)
flecha=-1
Dflech = barindex
valor = AvClose
ENDIF
ENDIF
RETURN Media7 COLOURED (0,0,255), Opcl-rango COLOURED(0,0,0) as “op-cl”, Media7-rango coloured (0,0,255) as “media7”, Media10-rango coloured(250,0,250) as “media10”, valor COLOURED (255,0,0) as “valor”
Per scrivere il codice , utilizza il pulsante <> “insert PRT code”, in modo da rendere il codice più leggibile. Grazie.
Ho commentato le righe con istruzioni grafiche (ProScreener non le supporta) ed ho inserito le righe 36 e 37 per evitare che certe variabili venissero segnalate come inutilizzate (non fanno assolutamente niente), ho sostituito la riga RETURN con SCREENER ed ho aggiunto la variabile Segnale.
Ecco il codice modificato, segnala 1 quando c’è una freccia verso l’alto e 2 quando è verso il basso.
//Reglas en Heikin-Ashi:
//1- Secuencia de cuerpos blancos = tendencia alcista.
// Secuencia de cuerpos negros = tendencia bajista.
//2- Tendencia alcista fuerte = Grandes cuerpos blancos y sin sombras inferiores.
// Tendencia bajista fuerte = Grandes cuerpos negros sin sombras superiores.
//3- Cuando la tendencia se debilita surgen cuerpos pequeños con posibles sombras superior y/o inferior.
//4- Una consolidación se da cuando aparecen cuerpos pequeños con ambas sombras tanto arriba como abajo.
//5- La reversión de una tendencia se puede sospechar con la aparición de pequeños cuerpos con sombras largas tanto superiores como inferiores, o un cambio repentino de color.
// parámetros
ONCE SmoothPeriod=2 // valor por defecto
ONCE period=5 // valor por defecto
ONCE flecha=0
ONCE Dflech=barindex
// ciclo normal
IF BarIndex=0 THEN
xClose = (open+high+low+close)/4
xOpen = open
xHigh = high
xLow = low
ELSE
xClose = (open+high+low+close)/4
xOpen = (xOpen[1]+xClose[1])/2
xHigh = Max(max(high, xOpen), xClose)
xLow = Min(min(Low, xOpen), xClose)
endif
// SUAVIZADO con la media de 2 en las velas
if barindex>=(period+SmoothPeriod) then
AvOpen=exponentialAverage[SmoothPeriod](xOpen)
AvHigh=exponentialAverage[SmoothPeriod](xHigh)
AvLow=exponentialAverage[SmoothPeriod](xLow)
Avclose=exponentialAverage[SmoothPeriod](xClose)
endif
// y ésta es la que uso
//DRAWCANDLE(AvOpen, AvHigh, AvLow, AvClose)
IF AvOpen + AvHigh + AvLow + AvClose + Rango + Valor THEN
ENDIF
//ha7 para indicar cruces
// los valores para barindex<2 son especiales
If Barindex < SmoothPeriod then
Opcl=Open[1]
else
Opcl=Open
ENDIF
// calculo dos medias de 7 y de 10
Media7 = Average[7](Opcl)
Media10 = Average[10](Opcl)
rango= Media7/10
// uso rango para el dibujo
Alcista = AvOPen<AvClose
Alcista1 = AvOpen[1]<AvClose[1]
Bajista = AvOpen>AvClose
Bajista1 = AvOpen[1]>AvClose[1]
//Doji = Range[1] > ABS(AvOpen[1]-AvClose[1])*5
//no puede haber dos operaciones en dos dias
//valor representa mi compra cuando estoy dentro
// y el precio de venta cuando me salgo
IF Dflech < barindex[2] then
IF (Opcl>Media7 or Opcl>Media10) and not (Bajista and Bajista1) and flecha<1 then
// uso Range para que salgan visibles las flechas
//DRAWARROWUP (barindex, AvHigh+Range) COLOURED (0, 0, 255)
Segnale = 1
flecha=1
Dflech = barindex
valor = AvClose
ELSIF (Opcl<Media7 or Opcl<Media10) and not (Alcista and Alcista1) and flecha>=1 then
//DRAWARROWDOWN (barindex, AvHigh+Range) COLOURED (255, 0, 0)
Segnale = 2
flecha=-1
Dflech = barindex
valor = AvClose
ENDIF
ENDIF
SCREENER [Segnale](Segnale AS "1=↑/2=↓")
//RETURN Media7 COLOURED (0,0,255), Opcl-rango COLOURED(0,0,0) as "op-cl", Media7-rango coloured (0,0,255) as "media7", Media10-rango coloured(250,0,250) as "media10", valor COLOURED (255,0,0) as "valor"
Roberto, grazie per lo screener HA smoothed. Avevo già caricato l’indicatore e lo screener completa il cassetto degli attrezzi… C’è un problema relativo al grande numero di risultati che vengono fuori perlopiù di tipo 2 ribassista. Forse sarebbe utile, ma io non riesco in quel codice così strutturato, inserire dei filtri, es. sopra/sotto medie mobili, volumi di un certo tipo, es. superiore a 1000K o altro che fornisse un risultato con un certo numero di titoli in ambedue le tipologie di situazione da tradare. Grazie ancora
Lancia lo screener, poi prova a mettere sul grafico una media a 50, 100 e 200, un Rsi, uno Stocastico, Volumi, magari non tutti insieme!
Vedi quali ti sembra siano migliori come filtri ed io te li aggiungo.
Inizierei con i prezzi sopra 2 medie mobili: la EMA8 e la SMA50, dove la EMA8 > SMA50 con pendenze al rialzo, per la fase 1 con la freccina su, mentre per la fase ribassista i prezzi dovrebbero essere sotto le 2 medie, dove la EMA8 < SMA50 con pendenze al ribasso. Come inizio proverei con questi filtri per scremare i risultati, spero che possa funzionare per rilevare le inversioni a favore di trend. Grazie ancora per la tua competenza e per la veloce efficienza nelle risposte
Grazie mille Roberto,
lo screener lo fa ed è un grosso passo avanti tuttavia mi sfugge la ratio del perchè evidenzi anche in alcuni casi l’ultima freccia “n” giorni prima e non sulla candela appena chiusa.
Grazie ancora per il prezioso supporto.
Prova questa versione dello screener trasformato in strategia, fai il backtest ed osserva, candela per candela, il valore delle variabili che vuoi con GRAPH e/o GRAPHONPRICE (io ne ho messe 2 a caso a titolo di esempio):
//Reglas en Heikin-Ashi:
//1- Secuencia de cuerpos blancos = tendencia alcista.
// Secuencia de cuerpos negros = tendencia bajista.
//2- Tendencia alcista fuerte = Grandes cuerpos blancos y sin sombras inferiores.
// Tendencia bajista fuerte = Grandes cuerpos negros sin sombras superiores.
//3- Cuando la tendencia se debilita surgen cuerpos pequeños con posibles sombras superior y/o inferior.
//4- Una consolidación se da cuando aparecen cuerpos pequeños con ambas sombras tanto arriba como abajo.
//5- La reversión de una tendencia se puede sospechar con la aparición de pequeños cuerpos con sombras largas tanto superiores como inferiores, o un cambio repentino de color.
// parámetros
ONCE SmoothPeriod=2 // valor por defecto
ONCE period=5 // valor por defecto
ONCE flecha=0
ONCE Dflech=barindex
// ciclo normal
IF BarIndex=0 THEN
xClose = (open+high+low+close)/4
xOpen = open
xHigh = high
xLow = low
ELSE
xClose = (open+high+low+close)/4
xOpen = (xOpen[1]+xClose[1])/2
xHigh = Max(max(high, xOpen), xClose)
xLow = Min(min(Low, xOpen), xClose)
endif
// SUAVIZADO con la media de 2 en las velas
if barindex>=(period+SmoothPeriod) then
AvOpen=exponentialAverage[SmoothPeriod](xOpen)
AvHigh=exponentialAverage[SmoothPeriod](xHigh)
AvLow=exponentialAverage[SmoothPeriod](xLow)
Avclose=exponentialAverage[SmoothPeriod](xClose)
endif
// y ésta es la que uso
//DRAWCANDLE(AvOpen, AvHigh, AvLow, AvClose)
IF AvOpen + AvHigh + AvLow + AvClose + Rango + Valor THEN
ENDIF
//ha7 para indicar cruces
// los valores para barindex<2 son especiales
If Barindex < SmoothPeriod then
Opcl=Open[1]
else
Opcl=Open
ENDIF
// calculo dos medias de 7 y de 10
Media7 = Average[7](Opcl)
Media10 = Average[10](Opcl)
rango= Media7/10
// uso rango para el dibujo
Alcista = AvOPen<AvClose
Alcista1 = AvOpen[1]<AvClose[1]
Bajista = AvOpen>AvClose
Bajista1 = AvOpen[1]>AvClose[1]
//Doji = Range[1] > ABS(AvOpen[1]-AvClose[1])*5
//no puede haber dos operaciones en dos dias
//valor representa mi compra cuando estoy dentro
// y el precio de venta cuando me salgo
IF Dflech < barindex[2] then
IF (Opcl>Media7 or Opcl>Media10) and not (Bajista and Bajista1) and flecha<1 then
// uso Range para que salgan visibles las flechas
//DRAWARROWUP (barindex, AvHigh+Range) COLOURED (0, 0, 255)
Segnale = 1
flecha=1
Dflech = barindex
valor = AvClose
ELSIF (Opcl<Media7 or Opcl<Media10) and not (Alcista and Alcista1) and flecha>=1 then
//DRAWARROWDOWN (barindex, AvHigh+Range) COLOURED (255, 0, 0)
Segnale = 2
flecha=-1
Dflech = barindex
valor = AvClose
ENDIF
ENDIF
//SCREENER [Segnale](Segnale AS "1=↑/2=↓")
//RETURN Media7 COLOURED (0,0,255), Opcl-rango COLOURED(0,0,0) as "op-cl", Media7-rango coloured (0,0,255) as "media7", Media10-rango coloured(250,0,250) as "media10", valor COLOURED (255,0,0) as "valor"
buy at -close limit //linea inutile, però è richiesta da ProBackTest
GRAPH Dflech //lo vedi nella finestra delle variabili
GRAPHONPRICE valor coloured(0,128,0,255) AS "V" //lo vedi sul grafico dei prezzi
Aggiungendo i filtri suggeriti da luxrun si ottiene una grossa scrematura:
//Reglas en Heikin-Ashi:
//1- Secuencia de cuerpos blancos = tendencia alcista.
// Secuencia de cuerpos negros = tendencia bajista.
//2- Tendencia alcista fuerte = Grandes cuerpos blancos y sin sombras inferiores.
// Tendencia bajista fuerte = Grandes cuerpos negros sin sombras superiores.
//3- Cuando la tendencia se debilita surgen cuerpos pequeños con posibles sombras superior y/o inferior.
//4- Una consolidación se da cuando aparecen cuerpos pequeños con ambas sombras tanto arriba como abajo.
//5- La reversión de una tendencia se puede sospechar con la aparición de pequeños cuerpos con sombras largas tanto superiores como inferiores, o un cambio repentino de color.
// parámetros
ONCE SmoothPeriod=2 // valor por defecto
ONCE period=5 // valor por defecto
ONCE flecha=0
ONCE Dflech=barindex
// ciclo normal
IF BarIndex=0 THEN
xClose = (open+high+low+close)/4
xOpen = open
xHigh = high
xLow = low
ELSE
xClose = (open+high+low+close)/4
xOpen = (xOpen[1]+xClose[1])/2
xHigh = Max(max(high, xOpen), xClose)
xLow = Min(min(Low, xOpen), xClose)
endif
// SUAVIZADO con la media de 2 en las velas
if barindex>=(period+SmoothPeriod) then
AvOpen=exponentialAverage[SmoothPeriod](xOpen)
AvHigh=exponentialAverage[SmoothPeriod](xHigh)
AvLow=exponentialAverage[SmoothPeriod](xLow)
Avclose=exponentialAverage[SmoothPeriod](xClose)
endif
// y ésta es la que uso
//DRAWCANDLE(AvOpen, AvHigh, AvLow, AvClose)
IF AvOpen + AvHigh + AvLow + AvClose + Rango + Valor THEN
ENDIF
//ha7 para indicar cruces
// los valores para barindex<2 son especiales
If Barindex < SmoothPeriod then
Opcl=Open[1]
else
Opcl=Open
ENDIF
// calculo dos medias de 7 y de 10
Media7 = Average[7](Opcl)
Media10 = Average[10](Opcl)
rango= Media7/10
// uso rango para el dibujo
Alcista = AvOPen<AvClose
Alcista1 = AvOpen[1]<AvClose[1]
Bajista = AvOpen>AvClose
Bajista1 = AvOpen[1]>AvClose[1]
//Doji = Range[1] > ABS(AvOpen[1]-AvClose[1])*5
//no puede haber dos operaciones en dos dias
//valor representa mi compra cuando estoy dentro
// y el precio de venta cuando me salgo
IF Dflech < barindex[2] then
IF (Opcl>Media7 or Opcl>Media10) and not (Bajista and Bajista1) and flecha<1 then
// uso Range para que salgan visibles las flechas
//DRAWARROWUP (barindex, AvHigh+Range) COLOURED (0, 0, 255)
Segnale = 1
flecha=1
Dflech = barindex
valor = AvClose
ELSIF (Opcl<Media7 or Opcl<Media10) and not (Alcista and Alcista1) and flecha>=1 then
//DRAWARROWDOWN (barindex, AvHigh+Range) COLOURED (255, 0, 0)
Segnale = 2
flecha=-1
Dflech = barindex
valor = AvClose
ENDIF
ENDIF
Ema8 = average[8,1](close)
Sma50 = average[50,0](close)
Rialzo = ((Ema8 > Sma50) AND (close > Ema8)) * Segnale
Ribasso = ((Ema8 < Sma50) AND (close < Ema8)) * Segnale
Segnale = Rialzo OR Ribasso
SCREENER [Segnale](Segnale AS "1=↑/2=↓")
//RETURN Media7 COLOURED (0,0,255), Opcl-rango COLOURED(0,0,0) as "op-cl", Media7-rango coloured (0,0,255) as "media7", Media10-rango coloured(250,0,250) as "media10", valor COLOURED (255,0,0) as "valor"
Roberto, premettendo che sei un grande e che ti ringrazio per il tempo speso, ho provato a plottare il tuo codice in probacktest ma mi dice “errore di sintassi, utilizza la variabile segnale” e non so come uscirne…
Nanni
Aggiungi in fondo:
If Segnale then
Endif
Ok, quindi l’output è come quello che ti allego?
Sopra prezzi Ha e sotto HA smoothed con le frecce di eventuale ingresso/uscita?
Poi dovessi codificarle con i parametri di buy e sellshort una volta rivisti con altri filtri la vedo difficile (per me…)
Grazie!
Si, è così.
Roberto, nel ringraziarti per l’aiuto, posto il codice dello screener che per me ha un senso e trova titoli (pochi) sia al rialzo che al ribasso; i quali comunque vanno confermati dal trend e da ulteriori verifiche di prezzo. Lo stocastico lento è l’oscillatore che mi ha soddisfatto di più perché rispetta le condizioni di ipercomprato e ipervenduto che ho impostato. Sulle azioni italiane ho avuto anche la corrispondenza tra cambio di candela e possibile inversione indicata anche dallo stocastico (segnale 1 o 2). Con l’RSI e le medie mobili non funzionava perché i titoli trovati erano tantissimi e non rispettavano la attesa condizione di inizio di potenziale rialzo e inizio di potenziale ribasso ottenuto con un qualsiasi tipo di filtro. Insomma bisogna continuare ad affinarlo se si vuole!
//Reglas en Heikin-Ashi:
//1- Secuencia de cuerpos blancos = tendencia alcista.
// Secuencia de cuerpos negros = tendencia bajista.
//2- Tendencia alcista fuerte = Grandes cuerpos blancos y sin sombras inferiores.
// Tendencia bajista fuerte = Grandes cuerpos negros sin sombras superiores.
//3- Cuando la tendencia se debilita surgen cuerpos pequeños con posibles sombras superior y/o inferior.
//4- Una consolidación se da cuando aparecen cuerpos pequeños con ambas sombras tanto arriba como abajo.
//5- La reversión de una tendencia se puede sospechar con la aparición de pequeños cuerpos con sombras largas tanto superiores como inferiores, o un cambio repentino de color.
// parámetros
ONCE SmoothPeriod=2 // valor por defecto
ONCE period=5 // valor por defecto
ONCE flecha=0
ONCE Dflech=barindex
// ciclo normal
IF BarIndex=0 THEN
xClose = (open+high+low+close)/4
xOpen = open
xHigh = high
xLow = low
ELSE
xClose = (open+high+low+close)/4
xOpen = (xOpen[1]+xClose[1])/2
xHigh = Max(max(high, xOpen), xClose)
xLow = Min(min(Low, xOpen), xClose)
endif
// SUAVIZADO con la media de 2 en las velas
if barindex>=(period+SmoothPeriod) then
AvOpen=exponentialAverage[SmoothPeriod](xOpen)
AvHigh=exponentialAverage[SmoothPeriod](xHigh)
AvLow=exponentialAverage[SmoothPeriod](xLow)
Avclose=exponentialAverage[SmoothPeriod](xClose)
endif
// y ésta es la que uso
//DRAWCANDLE(AvOpen, AvHigh, AvLow, AvClose)
IF AvOpen + AvHigh + AvLow + AvClose + Rango + Valor THEN
ENDIF
//ha7 para indicar cruces
// los valores para barindex<2 son especiales
If Barindex < SmoothPeriod then
Opcl=Open[1]
else
Opcl=Open
ENDIF
// calculo dos medias de 7 y de 10
Media7 = Average[7](Opcl)
Media10 = Average[10](Opcl)
rango= Media7/10
// uso rango para el dibujo
Alcista = AvOPen<AvClose
Alcista1 = AvOpen[1]<AvClose[1]
Bajista = AvOpen>AvClose
Bajista1 = AvOpen[1]>AvClose[1]
//Doji = Range[1] > ABS(AvOpen[1]-AvClose[1])*5
//no puede haber dos operaciones en dos dias
//valor representa mi compra cuando estoy dentro
// y el precio de venta cuando me salgo
IF Dflech < barindex[2] then
IF (Opcl>Media7 or Opcl>Media10) and not (Bajista and Bajista1) and flecha<1 then
// uso Range para que salgan visibles las flechas
//DRAWARROWUP (barindex, AvHigh+Range) COLOURED (0, 0, 255)
Segnale = 1
flecha=1
Dflech = barindex
valor = AvClose
ELSIF (Opcl<Media7 or Opcl<Media10) and not (Alcista and Alcista1) and flecha>=1 then
//DRAWARROWDOWN (barindex, AvHigh+Range) COLOURED (255, 0, 0)
Segnale = 2
flecha=-1
Dflech = barindex
valor = AvClose
ENDIF
ENDIF
// Ema8 = average[8,1](close)
// Sma50 = average[50,0](close)
Sto = Stochastic[10,3](close)
signal = average[3](sto)
STOUP = sto>80 AND sto[1]>signal[1] AND sto<signal
STODOWN = sto<20 AND sto[1]<signal[1] AND sto>signal
// Rialzo = ((Ema8 > Sma50) AND (close > Ema8)) * Segnale
// Ribasso = ((Ema8 < Sma50) AND (close < Ema8)) * Segnale
Rialzo = (STOUP) * Segnale
Ribasso =(STODOWN) * Segnale
Segnale = Rialzo OR Ribasso
SCREENER [Segnale](Segnale AS "1=↑/2=↓")
Buongiorno a tutti,
nel we ho provato in maniera “fai da te” a trasformare lo screener HA smoothed di questo topic in strategia con buy e sell più altri filtri ma non sono addivenuto a nulla…
Qualche anima pia avrebbe voglia di risolvere questo mio impasse?
Grazie mille.
Nanni
VARIARE UN INDICATORE HA SMOOTHED IN SCREENER
This topic contains 18 replies,
has 3 voices, and was last updated by nanniarc
6 years, 11 months ago.
| Forum: | ProScreener: Scansione Mercati & Screener |
| Language: | Italian |
| Started: | 03/20/2019 |
| Status: | Active |
| Attachments: | 2 files |
The information collected on this form is stored in a computer file by ProRealCode to create and access your ProRealCode profile. This data is kept in a secure database for the duration of the member's membership. They will be kept as long as you use our services and will be automatically deleted after 3 years of inactivity. Your personal data is used to create your private profile on ProRealCode. This data is maintained by SAS ProRealCode, 407 rue Freycinet, 59151 Arleux, France. If you subscribe to our newsletters, your email address is provided to our service provider "MailChimp" located in the United States, with whom we have signed a confidentiality agreement. This company is also compliant with the EU/Swiss Privacy Shield, and the GDPR. For any request for correction or deletion concerning your data, you can directly contact the ProRealCode team by email at privacy@prorealcode.com If you would like to lodge a complaint regarding the use of your personal data, you can contact your data protection supervisory authority.