Fr7Participant
Master
Solicito, si es posible, convertir el indicador adjunto:
Aprendizaje automático: clasificación lorentziana
Un clasificador de distancia de Lorentz (LDC) es un algoritmo de clasificación de aprendizaje automático capaz de categorizar datos históricos de un espacio de características multidimensional. Este indicador demuestra cómo la clasificación de Lorentz también se puede utilizar para predecir la dirección de futuros movimientos de precios cuando se utiliza como métrica de distancia para una implementación novedosa de un algoritmo de vecinos más cercanos aproximados (ANN).
https://es.tradingview.com/script/WhBzgfDu-Machine-Learning-Lorentzian-Classification/
Este indicador me tiene maravillado y sería de gran ayuda para la comunidad empezar a ver en PROREALTIME indicadores de aprendizaje automático. Es un indicador muy complejo para traducir y espero que sea factible su traducción.
A ver si Iván el moderador lo puede traducir.
Muchas gracias.
Veo complicada la traducción… intentaré sacarlo de todas formas.
Empieza a coger forma:
defparam calculateonlastbars = 1000
neighborsCount = 8 // Número de vecinos a considerar
maxBarsBack = 700 // Máximo número de barras hacia atrás
featureCount = 5 // Número de características
useEmaFilter=0
emaPeriod=700
useSmaFilter=0
smaPeriod=200
useKernelFilter=1
hh=8 //Lookback Window
r=8 //Relative Weighting
x=25 //Regression level
lag=2 //Lag
//----------------------------------------------------------------//
//----Next Bar Classification-------------------------------------//
src=close
directionShort = -1
directionLong = 1
directionNeutral = 0
if src[4]<src[0] then
yTrainSeries=directionShort
elsif src[4]>src[0] then
yTrainSeries=directionLong
else
yTrainSeries=directionNeutral
endif
//----------------------------------------------------------------//
//----Core ML logic-----------------------------------------------//
lastDistance=-1
size=min(maxBarsBack-1,barindex-1)
sizeloop=min(maxBarsBack-1,size)
f1 = RSI[14]
ap=(high+low+close)/3
esa=average[10,1](ap)
d1=average[10,1](abs(ap-esa))
ci=(ap-esa)/(0.015*d1)
f2=average[11,1](ci)
f3 = CCI[20]
f4 = ADX[20]
f5 =RSI[9]
if barindex >= maxBarsBack then
$distances[0]=0
$predictions[0]=0
n=0
for i=0 to sizeloop do
d = LOG(1+ABS(f1[i]-f1))+LOG(1+ABS(f2[i]-f2))+LOG(1+ABS(f3[i]-f3))+LOG(1+ABS(f4[i]-f4))+LOG(1+ABS(f5[i]-f5))
if d >= lastdistance and i MOD 4 = 0 THEN
lastdistance=d
$distances[n+1]=d
$predictions[n+1]=round(yTrainSeries[i])
n=n+1
IF n > neighborsCount THEN
lastDistance = $distances[round(neighborsCount * 3 / 4)]
$predictions[n]=0
$distances[n]=0
endif
endif
next
prediction=0
for j=n downto 0 do
prediction=prediction+$predictions[j]
next
endif
//----------------------------------------------------------------//
//-----Prediction Filters-----------------------------------------//
//-----Ema Trend filter
if useEmaFilter then
isEmaUptrend=close>average[emaPeriod,1](close)
isEmaDowntrend=close<average[emaPeriod,1](close)
else
isEmaUptrend=1
isEmaDowntrend=1
endif
//-----Sma Trend filter
if useSmaFilter then
isSmaUptrend=close>average[smaPeriod,0](close)
isSmaDowntrend=close<average[smaPeriod,0](close)
else
isSmaUptrend=1
isSmaDowntrend=1
endif
if prediction>0 then
signal=1
elsif prediction<0 then
signal=-1
else
signal=signal
endif
//-----Bar-Count Filter
if signal<>signal[1] then
barsHeld=0
else
barsHeld=barsHeld+1
endif
isHeldFourBars=barsHeld=4
isHeldLessThanFourBars=BarsHeld>0 and BarsHeld<4
//-----Fractal Filters
isDifferentSignalType=signal<>signal[1]
isEarlySignalFlip=signal<>signal[1] and (isDifferentSignalType[1] or isDifferentSignalType[2] or isDifferentSignalType[3])
isBuySignal= signal=1 and isEmaUpTrend and isSmaUptrend
isSellSignal= signal=-1 and isEmadownTrend and isSmaDownTrend
isNewBuySignal=isDifferentSignalType and isBuySignal
isNewSellSignal=isDifferentSignalType and isSellSignal
//-----Kernel Regression Filter
//Nadaraya-Watson Envelope
hh=8 //Lookback Window
r=8 //Relative Weighting
x=25 //Regression level
lag=2 //Lag
currentWeight=0
cumulativeWeight=0
for i = 0 to hh+x do
y=src[i]
w = pow(1+(pow(i,2)/(pow(hh,2)*2*r)),-r)
currentWeight = currentWeight+y*w
cumulativeWeight = cumulativeWeight+w
next
yhat1 = currentWeight/cumulativeWeight
isBullish = yhat1>yhat1[1]
isBearish = yhat1<yhat1[1]
if isBullish then
r=0
g=255
b=255
elsif isBearish then
r=255
g=51
b=255
endif
//-----Entry Conditions
startLongTrade=isNewBuysignal and isBullish and isEmaUpTrend and isSmaUpTrend
startShortTrade=isNewSellSignal and isBearish and isEmaDowntrend and isSmaDownTrend
maxPrediction=highest[300](prediction)
ratmax=round(255/maxPrediction)
transparencymax=prediction*ratmax
minPrediction=lowest[300](prediction)
ratmin=round(255/minPrediction)
transparencymin=prediction*ratmin
if startLongTrade then
drawarrowUp(barindex,low-range)coloured(102,255,102,transparencymax)
drawtext("#prediction#",barindex,low-1.5*range)coloured(102,255,102)
elsif startShortTrade then
drawarrowdown(barindex,high+range)coloured("red",transparencymin)
drawtext("#prediction#",barindex,high+1.5*range)coloured("red")
endif
return yhat1 as "Kernel Regression Estimate"style(line,2)coloured(r,g,b)
Muy interesante,gracias Iván
Hola Ivan
gran trabajo como siempre, por lo tanto faltan las flechas ? que me dices
gracias y buenas tardes.
Buenas!
Las flechas están, lo que ocurre es que aparecen más que en el código orignal. Falta filtrar.
Si te fijas en el color de las flechas, verás que la intesidad cambia en función de la predicción.
Cuando hay una mayor puntuación en la predicción hay mayor intensidad en el color de las flechas.
En las primeras señales, al no haber con quién comparar, la intensidad es máxima pero a partir de varias predicciones ya se nota que la intensidad del color varía en cada flecha.
Tengo que terminar de depurarlo un poco más.
cual es el valor de tu ejemplo para comparar con lo que tengo ? a mi no me aparece nada , tengo el fondo negro eso puede ser un problema?
Buenas! no lo recuerdo 🙁
De todas formas seguro que es porque tienes cargadas 200 barras. Si cargas 1000 ya verás las flechas.
En el código pide 700 barras para comenzar a calcular. Esto se puede modificar.
Hola Ivan,
He cargado maxbarsback = 1000 y ne me funciona el codigo con les flechas ?
Aui te pongo 4 valors
un saludo.
No sé qué decirte… A mi sí que me aparecen…
las unidades en tu gráfico deben ser más de 1000, y si todavía no te salen pon más, hasta q te salgan
Ya lo tengo, que tonto soy ! tengo el grafico con 75 dias , lo he puesto con 1000 y funciona perfectamente
muchas gracias y buen dia.
adjunto ASML con flechas
Una imagen de Ivan el terrible |
Fr7Participant
Master
Muchas gracias Iván !!Estaba seguro de que sólo un crack como tú lo podía conseguir!!Pensaba que era imposible la traducción por su dificultad…y dos meses después lo has conseguido!! Espero que valga de inspiración y sea útil a otros usuarios. Y si a alguien se le ocurre cómo mejorarlo, se agradece. Yo voy a probarlo y testearlo a ver qué tal…….. Ojalá que poco a poco se vayan incorporando más indicadores en PRT basados en aprendizaje automático.
Hola todos
para los amantes de los proyectores aqui teneis 2 screeners Up and down
un saludo