Hola, compañer@s. Os agradezco pudierais echarme una mano con la conversión a PRT del indicador en Pinescript del indicador “Buy Low Sell High Composite” creado por zacmcc (https://www.tradingview.com/script/turEX2Ly-Buy-Low-Sell-High-Composite/). He intentado hacer la conversión pero los resultados de mi script en PRT son diferentes al indicador original y no soy capaz de ver donde me he equivocado por mucho que revise el código. A ver si podéis decirme donde me he equivocado.
Mi script en PRT es el siguiente (veréis que por la organización del script no soy programador/desarrollador así que es muy fácil que me haya equivocado en algún punto),
ATRLENGTH=9
RSILENGTH=14
EMA1LENGTH=5
EMAL2ENGTH=35
MACDFAST=12
MACDSLOW=26
MACDSIGNAL1=9
SUMA=14
SRC=CUSTOMCLOSE
ATRVALUE=AverageTrueRange[ATRLENGTH](SRC)
PRICERANGE=2*ATRVALUE
//NORMALIZER FUNCTION-------------------------------------------------------
//Normalize(value, minValue, maxValue) =>
//range = maxValue - minValue == 0 ? 0.0001 : maxValue - minValue
//-1 + (((value - minValue) / range) * 2)
//--------------------------------------------------------------------------
//NORMALIZED RSI------------------------------------------------------------
//--------------------------------------------------------------------------
RSIVALUE=RSI[14](SRC)
RSIRANGE=75-25
NRSIVALUE=-1+(((RSIVALUE-25)/RSIRANGE)*2)
IF NRSIVALUE<=0 THEN
RSIR=255
RSIG=165
RSIB=0
ELSE
RSIR=255
RSIG=255
RSIB=0
ENDIF
//--------------------------------------------------------------------------
//NORMALIZED EMA------------------------------------------------------------
//--------------------------------------------------------------------------
EMADIFFF=AVERAGE[EMA1LENGTH,1](SRC)-AVERAGE[EMAL2ENGTH,1](SRC)
NEMADIFF=-1+(((EMADIFFF-(-PRICERANGE))/PRICERANGE)*2)
//--------------------------------------------------------------------------
//NORMALIZED NACD-----------------------------------------------------------
//--------------------------------------------------------------------------
FASTEMA=AVERAGE[MACDFAST,1](SRC)
SLOWEMA=AVERAGE[MACDSLOW,1](SRC)
MACDVALUE=FASTEMA-SLOWEMA
MACDSIGVALUE=AVERAGE[MACDSIGNAL1,0](MACDVALUE)
MACDHIVALUE=MACDVALUE-MACDSIGVALUE
NMACDVALUE= -1+(((MACDVALUE -(-PRICERANGE))/PRICERANGE)*2)
NMACDSIGVALUE=-1+(((MACDSIGVALUE-(-PRICERANGE))/PRICERANGE)*2)
NMACDHIVALUE= -1+(((MACDHIVALUE -(-PRICERANGE))/PRICERANGE)*2)
IF MACDVALUE>=MACDSIGVALUE THEN
MACDR=0
MACDG=255
MACDB=0
ELSE
MACDR=255
MACDG=0
MACDB=0
ENDIF
buySignal=NMACDVALUE crosses over NMACDSIGVALUE
sellSignal=NMACDVALUE crosses under NMACDSIGVALUE
if buysignal then
drawpoint(barindex[1],NMACDSIGVALUE[1],2)coloured(255,165,0)
drawpoint(barindex[1],NMACDSIGVALUE[1],3)coloured(255,165,0,100)
elsif sellSignal then
drawpoint(barindex[1],NMACDSIGVALUE[1],2)coloured(255,255,0)
drawpoint(barindex[1],NMACDSIGVALUE[1],3)coloured(255,255,0,100)
endif
//--------------------------------------------------------------------------
//NORMALIZED MFI------------------------------------------------------------
//--------------------------------------------------------------------------
hlc3 = (high+low+close)/3
rawMoneyFlow = hlc3 * volume
positiveFlow = 0.0
if hlc3 > hlc3[1] then
positiveFlow = positiveFlow + rawMoneyFlow
else
positiveFlow = positiveFlow
endif
negativeFlow = 0.0
if hlc3 < hlc3[1] then
negativeFlow = negativeFlow + rawmoneyFlow
else
negativeFlow = negativeFlow
endif
moneyFlowRatio = average [suma,0](positiveFlow) /average[suma,0](negativeFlow)
MFIVALUE = 100 - 100 / (1 + moneyFlowRatio)
NMFIVALUE=-1+(((MFIVALUE-25)/RSIRANGE)*2)
//--------------------------------------------------------------------------
//NORMALIZED COMPOSITE FUNCTION---------------------------------------------
//--------------------------------------------------------------------------
COMPOSITEV=NEMADIFF+NRSIVALUE+NMACDHIVALUE+NMFIVALUE-2
COMPOSITERANGE=4-(-4)
NCOMPOSITEV=-1+(((COMPOSITEV-(-4))/COMPOSITERANGE)*2)
IF COMPOSITEV<=0 THEN
CR=255
CG=0
CB=0
ELSE
CR=0
CG=255
CB=0
ENDIF
//--------------------------------------------------------------------------
//PLOT------**********------------------------------------------------------
//--------------------------------------------------------------------------
RETURN NCOMPOSITEV AS "COMPOSITE" COLOURED(CR,CG,CB)STYLE(HISTOGRAM), NMACDSIGVALUE AS "MACDSG" COLOURED(MACDR,MACDG,MACDB)STYLE(LINE,2)
La info del indicador para TV es la siguiente:
“Combines RSI, EMA difference, and MacD into a single indicator. Buy when it’s very red, sell when it’s very green.”
ver adjunto
//@version=3
study(title="Buy Low Sell High Composite", shorttitle="BLSH")
// normalize values into the range -1 to +1
normalize(value, minValue, maxValue) =>
range = maxValue - minValue == 0 ? 0.0001 : maxValue - minValue
-1 + (((value - minValue) / range) * 2)
atrValue = atr(9)
priceRange = 2 * atrValue
// RSI
rsiValue = rsi(close, 14)
rsiValueNormalized = normalize(rsiValue, 25, 75)
rsiColor = rsiValueNormalized <= 0 ? orange : yellow
// Elliot Wave
emaDiff = ema(close, 5) - ema(close, 35)
emaDiffNormalized = normalize(emaDiff, -priceRange, priceRange)
emaColor = emaDiff <= 0 ? red : lime
// MACD
fastMovingAverage = ema(close, 12)
slowMovingAverage = ema(close, 26)
macd = fastMovingAverage - slowMovingAverage
macdSignal = sma(macd, 9)
macdHistogram = macd - macdSignal
macdNormalized = normalize(macd, -priceRange, priceRange)
macdSignalNormalized = normalize(macdSignal, -priceRange, priceRange)
macdHistogramNormalized = normalize(macdHistogram, -priceRange, priceRange)
isMACDAbove = macd >= macdSignal
crossoverColor = isMACDAbove ? lime : red
crossoverValue = cross(macd, macdSignal) ? macdSignalNormalized : na
// MFI
positiveFlow = sum(volume * (change(hlc3) <= 0 ? 0 : hlc3), 14)
negativeFlow = sum(volume * (change(hlc3) >= 0 ? 0 : hlc3), 14)
mfiValue = rsi(positiveFlow, negativeFlow)
mfiValueNormalized = normalize(mfiValue, 25, 75)
// Composite
compositeValue = emaDiffNormalized + rsiValueNormalized + macdHistogramNormalized + mfiValueNormalized
compositeNormalized = normalize(compositeValue, -4, 4)
compositeColor = compositeValue <= 0 ? red : lime
compositeStyle = histogram
// Plots
plot(compositeNormalized, title="Composite", color=compositeColor, style=area, linewidth=2, transp=60)
plot(macdSignalNormalized, title="MacD Signal", style=line, linewidth=1, color=crossoverColor)
plot(crossoverValue, title="Crossover", style=circles, linewidth=3, color=crossoverColor)
Cualquier ayuda/comentario/critica al respecto es bien recibida.
Muchas gracias,
Un cordial saludo,
Pedro.