
Una estrategia de comercio de puntuación de múltiples indicadores realiza el comercio automático mediante la integración de la puntuación de indicadores técnicos, la identificación de la dirección y la intensidad de la tendencia. La estrategia considera integralmente un conjunto de indicadores, que incluyen la nube de Ichimoku, HMA, RSI, Stoch, CCI y MACD.
La estrategia se compone de varias partes:
Se calcula un conjunto de indicadores, que incluyen la nube de Ichimoku, el promedio móvil de Hull, el índice de fuerza relativa, el índice aleatorio, el índice de canales de mercancías y la sensibilidad a los promedios móviles.
Cada indicador recibe una puntuación. Se le da un punto positivo cuando el indicador muestra una señal de cabeza múltiple y un punto negativo cuando muestra una señal de cabeza vacía.
Se obtiene una puntuación global sumando y promediando todas las puntuaciones indicadoras.
Comparar la calificación global con los umbrales preestablecidos para determinar la dirección de la tendencia general. La calificación es alta cuando está por encima del umbral y baja cuando está por debajo del umbral.
La apertura de la posición se realiza de acuerdo con los resultados de la evaluación.
El stop loss se establece a través del indicador ATR.
Esta estrategia aprovecha las ventajas de varios indicadores para determinar la dirección de la tendencia del mercado. En comparación con un solo indicador, puede filtrar algunas señales falsas y mejorar la fiabilidad de la señal.
La estrategia tiene las siguientes ventajas:
La estrategia, que utiliza una puntuación promedio, es eficaz para filtrar las señales falsas.
Utiliza la ventaja de los indicadores para identificar la tendencia y la intensidad actual. Por ejemplo, la nube Ichimoku determina la tendencia general, y Stoch determina la sobreventa.
Las operaciones automáticas evitan los efectos emocionales y ejecutan estrictamente las señales estratégicas.
El uso de ATR para establecer el beneficio de stop loss es beneficioso para el control de riesgos.
Se pueden ajustar los parámetros para diferentes variedades. Se pueden optimizar los parámetros indicadores y los umbrales de calificación.
La lógica de la estrategia es simple y clara, fácil de entender y modificar.
La estrategia también tiene los siguientes riesgos:
La combinación de varios indicadores no siempre es mejor que un solo indicador, y se requiere una prueba repetida para encontrar el mejor parámetro.
Cuando el indicador emite una señal errónea, el promedio de puntuación no puede evitar completamente la pérdida.
El deterioro ATR puede ser demasiado cercano o demasiado relajado y necesita ser ajustado según las características de la variedad.
Se debe evitar la adaptación de la curva causada por la optimización excesiva. Se debe probar la solidez de la estrategia en diferentes variedades y períodos de tiempo.
La frecuencia de las transacciones puede ser excesiva y los costos de las transacciones pueden afectar los ingresos finales.
La estrategia puede ser optimizada en los siguientes aspectos:
Prueba más combinaciones de indicadores para encontrar la mejor opción para una variedad en particular.
Ajustar las ponderaciones de cada indicador y optimizar los algoritmos de puntuación
Ajuste dinámico de los parámetros de ATR para que el paro de pérdidas sea más adecuado para la volatilidad del mercado.
Se añaden condiciones de filtración de transacciones para reducir la frecuencia innecesaria de las operaciones, tales como filtración de tendencias, filtración de volumen de transacciones, etc.
Optimización progresiva para encontrar el intervalo de optimización de parámetros, luego optimización aleatoria / de la red para encontrar la combinación de parámetros óptima.
Prueba la solidez de la estrategia en varios marcos de tiempo de varias variedades y evita la optimización excesiva.
Combinar otras estrategias de negociación efectivas para formar una combinación de estrategias.
La estrategia de comercio de puntuación de múltiples indicadores mejora la precisión y la fiabilidad de la evaluación de la señal mediante el pensamiento de puntuación promedio. La estrategia tiene un gran espacio para ajustar los parámetros y puede optimizarse para diferentes variedades.
/*backtest
start: 2022-10-31 00:00:00
end: 2023-11-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="Ichi HMA RSI Stoch CCI MACD Technicals Rating Strategy",shorttitle="TRSv420",overlay=true,default_qty_type=strategy.percent_of_equity,default_qty_value=50,commission_type=strategy.commission.percent,commission_value=0.05)
res = input("", title="Indicator Timeframe", type=input.resolution)
Period = input(defval = 14, title = "Period Length", minval = 2)
MinSignalStrength= input(title="Minimum Signal Strength", type=input.float, defval=1.1, minval=0.00, maxval=2.00, step=0.1)
Price = input(defval=open, title="Price Source", type=input.source)
Use_Only_Buy= input(false, title = "Use ONLY BUY mode",type=input.bool)
Use_Only_Sell= input(false, title = "Use ONLY SELL mode",type=input.bool)
Use_ATR_SL_TP= input(true, title = "Use ATR for TP & SL",type=input.bool)
Use_Ichimoku= input(true, title = "Use Ichimoku",type=input.bool)
Use_HMA= input(true, title = "Use Hull MA",type=input.bool)
Use_RSI= input(true, title = "Use RSI",type=input.bool)
Use_Stoch= input(true, title = "Use Stoch",type=input.bool)
Use_CCI= input(true, title = "Use CCI",type=input.bool)
Use_MACD= input(true, title = "Use MacD",type=input.bool)
// Ichimoku Cloud
donchian(len) => avg(lowest(len), highest(len))
ichimoku_cloud() =>
conversionLine = donchian(9)
baseLine = donchian(26)
leadLine1 = avg(conversionLine, baseLine)
leadLine2 = donchian(52)
[conversionLine, baseLine, leadLine1, leadLine2]
[IC_CLine, IC_BLine, IC_Lead1, IC_Lead2] = ichimoku_cloud()
calcRatingMA(ma, src) => na(ma) or na(src) ? na : (ma == src ? 0 : ( ma < src ? 1 : -1 ))
calcRating(buy, sell) => buy ? 1 : ( sell ? -1 : 0 )
calcRatingAll() =>
//============== HMA =================
HMA10 = hma(Price, Period)
HMA20 = hma(Price, 20)
HMA30 = hma(Price, 30)
HMA50 = hma(Price, 50)
HMA100 = hma(Price, 100)
HMA200 = hma(Price, 200)
// Relative Strength Index, RSI
RSI = rsi(Price,14)
// Stochastic
lengthStoch = 14
smoothKStoch = 3
smoothDStoch = 3
kStoch = sma(stoch(Price, high, low, lengthStoch), smoothKStoch)
dStoch = sma(kStoch, smoothDStoch)
// Commodity Channel Index, CCI
CCI = cci(Price, 20)
// Moving Average Convergence/Divergence, MACD
[macdMACD, signalMACD, _] = macd(Price, 12, 26, 9)
// -------------------------------------------
PriceAvg = hma(Price, Period)
DownTrend = Price < PriceAvg
UpTrend = Price > PriceAvg
float ratingMA = 0
float ratingMAC = 0
if(Use_HMA)
if not na(HMA10)
ratingMA := ratingMA + calcRatingMA(HMA10, Price)
ratingMAC := ratingMAC + 1
if not na(HMA20)
ratingMA := ratingMA + calcRatingMA(HMA20, Price)
ratingMAC := ratingMAC + 1
if not na(HMA30)
ratingMA := ratingMA + calcRatingMA(HMA30, Price)
ratingMAC := ratingMAC + 1
if not na(HMA50)
ratingMA := ratingMA + calcRatingMA(HMA50, Price)
ratingMAC := ratingMAC + 1
if not na(HMA100)
ratingMA := ratingMA + calcRatingMA(HMA100, Price)
ratingMAC := ratingMAC + 1
if not na(HMA200)
ratingMA := ratingMA + calcRatingMA(HMA200, Price)
ratingMAC := ratingMAC + 1
if(Use_Ichimoku)
float ratingIC = na
if not (na(IC_Lead1) or na(IC_Lead2) or na(Price) or na(Price[1]) or na(IC_BLine) or na(IC_CLine))
ratingIC := calcRating(
IC_Lead1 > IC_Lead2 and Price > IC_Lead1 and Price < IC_BLine and Price[1] < IC_CLine and Price > IC_CLine,
IC_Lead2 > IC_Lead1 and Price < IC_Lead2 and Price > IC_BLine and Price[1] > IC_CLine and Price < IC_CLine)
if not na(ratingIC)
ratingMA := ratingMA + ratingIC
ratingMAC := ratingMAC + 1
ratingMA := ratingMAC > 0 ? ratingMA / ratingMAC : na
float ratingOther = 0
float ratingOtherC = 0
if(Use_RSI)
ratingRSI = RSI
if not(na(ratingRSI) or na(ratingRSI[1]))
ratingOtherC := ratingOtherC + 1
ratingOther := ratingOther + calcRating(ratingRSI < 30 and ratingRSI[1] < ratingRSI, ratingRSI > 70 and ratingRSI[1] > ratingRSI)
if(Use_Stoch)
if not(na(kStoch) or na(dStoch) or na(kStoch[1]) or na(dStoch[1]))
ratingOtherC := ratingOtherC + 1
ratingOther := ratingOther + calcRating(kStoch < 20 and dStoch < 20 and kStoch > dStoch and kStoch[1] < dStoch[1], kStoch > 80 and dStoch > 80 and kStoch < dStoch and kStoch[1] > dStoch[1])
if(Use_CCI)
ratingCCI = CCI
if not(na(ratingCCI) or na(ratingCCI[1]))
ratingOtherC := ratingOtherC + 1
ratingOther := ratingOther + calcRating(ratingCCI < -100 and ratingCCI > ratingCCI[1], ratingCCI > 100 and ratingCCI < ratingCCI[1])
if(Use_MACD)
if not(na(macdMACD) or na(signalMACD))
ratingOtherC := ratingOtherC + 1
ratingOther := ratingOther + calcRating(macdMACD > signalMACD, macdMACD < signalMACD)
ratingOther := ratingOtherC > 0 ? ratingOther / ratingOtherC : na
float ratingTotal = 0
float ratingTotalC = 0
if not na(ratingMA)
ratingTotal := ratingTotal + ratingMA
ratingTotalC := ratingTotalC + 1
ratingTotal := ratingTotal + ratingOther
ratingTotalC := ratingTotalC + 1
ratingTotal := ratingTotalC > 0 ? ratingTotal / ratingTotalC : na
[ratingTotal, ratingOther, ratingMA, ratingOtherC, ratingMAC]
[ratingTotal, ratingOther, ratingMA, ratingOtherC, ratingMAC] = security(syminfo.tickerid, res, calcRatingAll(), lookahead=false)
tradeSignal = ratingTotal+ratingOther+ratingMA
dynSLpoints(factor) => factor * atr(14) / syminfo.mintick
if not (Use_Only_Sell)
strategy.entry("long", strategy.long, when = tradeSignal > MinSignalStrength)
if not (Use_Only_Buy)
strategy.entry("short", strategy.short, when = tradeSignal < -MinSignalStrength)
if(Use_ATR_SL_TP)
strategy.exit("sl/tp", loss = dynSLpoints(3), trail_points = dynSLpoints(5), trail_offset = dynSLpoints(2))