Esta estrategia se basa en las señales de cruce del Hull Moving Average (HMA). El Hull Moving Average es un indicador técnico desarrollado por Alan Hull, que tiene como objetivo reducir el retraso de los promedios móviles tradicionales.
La HMA se calcula de la siguiente manera:
En comparación con el promedio móvil simple y el promedio móvil ponderado, el promedio móvil Hull tiene menos retraso, por lo que puede reaccionar más rápidamente a los cambios de precios, mejorando la capacidad de respuesta de la estrategia.
Al utilizar el cruce de dos HMA con períodos diferentes para generar señales, se puede filtrar eficazmente una gran cantidad de ruido y falsas señales, mejorando la fiabilidad de las señales.
Los parámetros son ajustables y, al ajustar los parámetros del período de las HMA, la estrategia puede adaptarse a diferentes mercados e instrumentos de negociación.
El Hull Moving Average es un indicador con retraso, que puede generar señales falsas en las primeras etapas de una inversión de tendencia.
Si el período es demasiado largo, la estrategia responderá lentamente; si el período es demasiado corto, puede dar lugar a señales falsas excesivas.
Como todas las estrategias basadas en un solo indicador, esta estrategia puede no funcionar bien en los mercados laterales, generando más señales falsas y perdiendo operaciones.
Considere la posibilidad de introducir otros indicadores técnicos o factores fundamentales como filtros, como el volumen de operaciones, los indicadores de tendencia, etc., para confirmar aún más la validez de las señales cruzadas de la HMA.
Para la optimización de parámetros, se pueden utilizar métodos como algoritmos genéticos y búsqueda en cuadrícula para encontrar la combinación óptima de parámetros en datos históricos que mejor se adapte al mercado actual.
Incorporar mecanismos de stop-loss y take-profit en la estrategia para controlar el riesgo y el rendimiento de cada operación.
Consideremos la tendencia del mercado: mediante la introducción de indicadores para juzgar las tendencias del mercado, se puede operar en mercados de tendencia y evitar mercados laterales.
La estrategia de cruce de promedio móvil de Hull es una estrategia de negociación simple y fácil de usar. Con la característica de respuesta rápida de HMA, puede capturar los cambios de precios de manera oportuna. Sin embargo, como todas las estrategias, también tiene sus limitaciones y su rendimiento se verá afectado por los tipos de mercado y la selección de parámetros. En la aplicación práctica, se puede combinar con otros métodos de análisis para confirmar aún más las señales. Al mismo tiempo, las medidas razonables de control de riesgos, como stop-loss y take-profit, gestión de posiciones, etc., también son partes indispensables para el funcionamiento estable de la estrategia.
/*backtest start: 2023-03-16 00:00:00 end: 2024-03-21 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //Basic Hull Ma Pack tinkered by InSilico strategy("RKTD BETA - Hull Suite by InSilico", overlay=true) //INPUT src = input(close, title="Source") modeSwitch = input("Ehma", title="Hull Variation", options=["Hma", "Thma", "Ehma"]) length = input(200, title="Length(180-200 for floating S/R , 55 for swing entry)") lengthMult = input(1.0, title="Length multiplier (Used to view higher timeframes with straight band)") useHtf = input(false, title="Show Hull MA from X timeframe? (good for scalping)") htf = input("240", title="Higher timeframe", type=input.resolution) switchColor = input(true, "Color Hull according to trend?") candleCol = input(false,title="Color candles based on Hull's Trend?") visualSwitch = input(true, title="Show as a Band?") thicknesSwitch = input(1, title="Line Thickness") transpSwitch = input(40, title="Band Transparency",step=5) // Alert Messages longAlertMessage = '{"base": "BTC", "quote": "USDT", "price": ' + tostring(close) + ', "action": "long", "orderType": "market", "close":true}' shortAlertMessage = '{"base": "BTC", "quote": "USDT", "price": ' + tostring(close) + ', "action": "short", "orderType": "market", "close":true}' //FUNCTIONS //HMA HMA(_src, _length) => wma(2 * wma(_src, _length / 2) - wma(_src, _length), round(sqrt(_length))) //EHMA EHMA(_src, _length) => ema(2 * ema(_src, _length / 2) - ema(_src, _length), round(sqrt(_length))) //THMA THMA(_src, _length) => wma(wma(_src,_length / 3) * 3 - wma(_src, _length / 2) - wma(_src, _length), _length) //SWITCH Mode(modeSwitch, src, len) => modeSwitch == "Hma" ? HMA(src, len) : modeSwitch == "Ehma" ? EHMA(src, len) : modeSwitch == "Thma" ? THMA(src, len/2) : na //OUT _hull = Mode(modeSwitch, src, int(length * lengthMult)) HULL = useHtf ? security(syminfo.ticker, htf, _hull) : _hull MHULL = HULL[0] SHULL = HULL[2] //COLOR hullColor = switchColor ? (HULL > HULL[2] ? #00ff00 : #ff0000) : #ff9800 //PLOT ///< Frame Fi1 = plot(MHULL, title="MHULL", color=hullColor, linewidth=thicknesSwitch, transp=50) Fi2 = plot(visualSwitch ? SHULL : na, title="SHULL", color=hullColor, linewidth=thicknesSwitch, transp=50) alertcondition(crossover(MHULL, SHULL), title="Hull trending up.", message="Hull trending up.") alertcondition(crossover(SHULL, MHULL), title="Hull trending down.", message="Hull trending down.") ///< Ending Filler fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch) ///BARCOLOR barcolor(color = candleCol ? (switchColor ? hullColor : na) : na) // Define Buy and Sell Conditions based on crossovers buyCondition = crossover(MHULL, SHULL) sellCondition = crossunder(MHULL, SHULL) // Plotting the Hull Moving Average (HMA) plot(MHULL, title="MHULL", color=hullColor, linewidth=thicknesSwitch) plot(SHULL, title="SHULL", color=hullColor, linewidth=thicknesSwitch, transp=transpSwitch) fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch) // Execute Strategy based on Buy and Sell Conditions strategy.entry("Buy", strategy.long, when=buyCondition, alert_message=longAlertMessage) strategy.entry("Sell", strategy.short, when=sellCondition, alert_message=shortAlertMessage) // Additional elements like bar coloring remain unchanged barcolor(color = candleCol ? (switchColor ? hullColor : na) : na)