헐 이동 평균 교차 전략


생성 날짜: 2024-03-22 14:57:10 마지막으로 수정됨: 2024-03-22 14:57:10
복사: 2 클릭수: 1150
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

헐 이동 평균 교차 전략

전략 개요

이 전략은 헐 이동 평균 (Hull Moving Average, HMA) 의 교차 신호를 기반으로 거래한다. 헐 이동 평균 (Hull Moving Average, HMA) 은 이동 평균의 지연을 줄이기 위한 기술적 지표로, 앨런 헐 (Alan Hull) 이 개발했다. 이 전략은 두 개의 다른 주기 HMA 라인을 사용한다.

전략 원칙

  1. 헐 이동 평균 (HMA)

HMA의 계산 과정은 다음과 같습니다:

  • 우선 가격의 가중 이동 평균 ((WMA) 을 계산하고, 주기값은 입력 변수 length의 반이다.
  • WMA의 WMA를 계산하고,
  • 공식: HMA = 2 * WMA (length/2) - WMA (length)
  • 위의 결과에 대해 WMA를 다시 계산하고, 주기를 length의 제곱근으로 하여 최종 HMA를 얻는다.
  1. 거래 신호를 생성합니다.
  • HMA가 종결 가격에 부딪히면 구매 신호가 발생한다.
  • HMA가 종결 가격 아래로 넘어가면 판매 신호가 발생한다.
  1. 거래 신호에 따라 거래 실행
  • 구매 신호: 상장 포지션 개설
  • 판매 신호: 공백점

전략적 이점

  1. 헐 이동 평균은 단순 이동 평균과 가중 이동 평균에 비해 더 작은 지연성을 가지고 있으며, 따라서 가격 변화에 더 빨리 반응하여 전략의 민감성을 높인다.

  2. 두 개의 서로 다른 주기의 HMA선을 교차하여 신호를 생성하여 일부 노이즈와 가짜 신호를 효과적으로 필터링하여 신호의 신뢰성을 향상시킵니다.

  3. 매개 변수는 조정 가능하며, HMA의 주기 매개 변수를 조정하여 다른 시장과 거래 품종에 적응할 수 있다.

전략적 위험

  1. 헐 이동 평균 (Hull Moving Average) 은 지연된 지표로, 트렌드 반전의 초기 단계에서 잘못된 신호를 보낼 수 있다.

  2. 매개 변수 선택이 잘못되면 전략이 제대로 작동하지 않을 수 있다. 너무 긴 사이클 선택은 전략의 반응이 느려지고, 너무 짧은 사이클 선택은 너무 많은 가짜 신호를 유발할 수 있다.

  3. 모든 단일 지표에 기반한 전략과 마찬가지로, 이 전략은 불안정한 시장에서 좋지 않은 성과를 낼 수 있으며, 더 많은 가짜 신호와 손실 거래가 발생할 수 있습니다.

최적화 방향

  1. HMA 교차 신호의 유효성을 더 확인하기 위해 거래량, 트렌드 지표 등과 같은 다른 기술 지표 또는 기본 요소를 필터링 조건으로 도입하는 것이 고려 될 수 있습니다.

  2. 변수 최적화에는 유전 알고리즘, 격자 검색과 같은 방법을 사용하여 역사적 데이터에 대해 변수 최적화를 수행하여 현재 시장에 가장 적합한 변수 조합을 찾을 수 있습니다.

  3. 단편 거래의 위험과 수익을 통제하기 위해 전략에 중지 및 중지 장치를 포함하십시오.

  4. 시장의 경향성을 고려하여, 시장의 경향을 도입하여 지표를 판단할 수 있으며, 추세형 시장에서 거래하여 흔들림 시장을 피할 수 있다.

요약하다

헐 이동 평균 크로스 전략은 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)