선체 이동 평균 크로스오버 전략

저자:차오장, 날짜: 2024-03-22 14:57:10
태그:

img

전반적인 설명

이 전략은 헐 이동 평균 (Hull Moving Average, HMA) 의 크로스오버 신호를 기반으로 한다. 헐 이동 평균 (Hull Moving Average, HMA) 은 앨런 헐 (Alan Hull) 이 개발한 기술 지표로, 전통적인 이동 평균의 지연을 줄이는 것을 목표로 한다. 이 전략은 서로 다른 기간을 가진 두 개의 HMA를 사용한다. 짧은 기간 HMA가 더 긴 기간 HMA를 넘을 때 구매 신호가 생성되고, 반대로 발생하면 판매 신호가 생성된다.

원칙

  1. 선체 이동 평균 (HMA) 계산

HMA는 다음과 같이 계산됩니다.

  • 먼저, 입력 매개 변수 length의 절반의 기간으로 가격의 가중화 이동 평균 (WMA) 을 계산합니다.
  • 다음으로, length의 기간으로 이전 WMA의 WMA를 계산합니다.
  • 수식을 사용하세요: HMA = 2 * WMA (장/2) - WMA (장)
  • 위의 결과의 WMA를 다시 계산하여 최종 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)


더 많은