이 전략은 헐 이동 평균 (Hull Moving Average, HMA) 의 크로스오버 신호를 기반으로 한다. 헐 이동 평균 (Hull Moving Average, HMA) 은 앨런 헐 (Alan Hull) 이 개발한 기술 지표로, 전통적인 이동 평균의 지연을 줄이는 것을 목표로 한다. 이 전략은 서로 다른 기간을 가진 두 개의 HMA를 사용한다. 짧은 기간 HMA가 더 긴 기간 HMA를 넘을 때 구매 신호가 생성되고, 반대로 발생하면 판매 신호가 생성된다.
HMA는 다음과 같이 계산됩니다.
단순 이동 평균과 가중 이동 평균에 비해, 헐 이동 평균은 더 적은 지연을 가지고 있으며, 따라서 가격 변화에 더 빨리 반응하여 전략의 반응성을 향상시킬 수 있습니다.
신호를 생성하기 위해 서로 다른 기간을 가진 두 HMA의 크로스오버를 사용하면 많은 잡음과 잘못된 신호를 효과적으로 필터링하여 신호의 신뢰성을 향상시킬 수 있습니다.
매개 변수들은 조정 가능하며, HMA의 기간 매개 변수를 조정함으로써, 전략은 다른 시장과 거래 도구에 적응할 수 있습니다.
Hull Moving Average는 트렌드 전환의 초기 단계에서 잘못된 신호를 생성 할 수있는 지표입니다.
부적절한 매개 변수 선택은 전략 성능의 저하로 이어질 수 있습니다. 기간이 너무 길다면 전략은 반응이 느려질 것입니다. 기간이 너무 짧으면 과도한 잘못된 신호로 이어질 수 있습니다.
단일 지표에 기반한 모든 전략과 마찬가지로 이 전략은 부상 시장에서 좋은 성과를 거두지 않을 수 있으며 더 많은 잘못된 신호를 생성하고 거래 손실을 초래할 수 있습니다.
HMA의 크로스오버 신호의 유효성을 더 확인하기 위해 거래량, 트렌드 지표 등과 같은 다른 기술적 지표 또는 근본적인 요소를 필터로 도입하는 것을 고려하십시오.
매개 변수 최적화를 위해 유전 알고리즘과 그리드 검색과 같은 방법을 사용하여 현재 시장에 가장 적합한 역사적 데이터에 최적의 매개 변수 조합을 찾을 수 있습니다.
각 거래의 위험과 수익을 통제하기 위해 전략에 스톱 로스 및 수익을 취하는 메커니즘을 포함합니다.
시장의 트렌드를 고려하십시오. 시장 동향을 판단하기위한 지표를 도입함으로써 트렌딩 시장에서 거래하고 옆 시장을 피할 수 있습니다.
헐 이동평균 크로스오버 전략은 간단하고 사용하기 쉬운 거래 전략이다. HMA의 빠른 반응 특성으로 가격 변화를 적시에 파악할 수 있다. 그러나 모든 전략과 마찬가지로 그 또한 한계가 있으며 그 성능은 시장 유형과 매개 변수 선택에 의해 영향을 받을 것이다. 실질적인 응용에서는 신호를 더욱 확인하기 위해 다른 분석 방법과 결합될 수 있다. 동시에, 스톱-로스 및 테이크-프로프트, 포지션 관리 등 합리적인 위험 통제 조치는 전략의 안정적인 운영에 필수적인 부분이다.
/*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)