이중형 이동평균 거래 전략

저자:차오장, 날짜: 2023-12-11 11:30:15
태그:

img

전반적인 설명

듀얼 헐 이동 평균 거래 전략 (Dual Hull Moving Average Trading Strategy) 은 듀얼 헐 이동 평균을 거래 신호로 사용하는 양적 거래 전략이다. 단일 이동 평균 라인을 사용하는 전통적인 기술 분석 접근 방식을 바탕으로 크로스오버 지점에서 길고 짧은 결정을 내리기 위해 듀얼 헐 이동 평균으로 대체한다.

원칙

듀얼 헐 이동 평균 거래 전략의 핵심은 듀얼 헐 이동 평균 (DHMA) 이다. DHMA는 세 개의 라인으로 구성되어 있습니다. 중간, 상부 및 하부 레일, 서로 다른 평균 가격 값을 나타냅니다. 공식은 다음과 같습니다:

중철: 모드 (modeSwitch, src, len)
상부 레일: HULL[0] 하부 레일: HULL[2]

여기서 모드 함수는 HMA, EHMA 또는 THMA와 같은 다른 Hull MA 변수 중 하나를 선택할 수 있습니다. Src는 가격 소스를 의미하며 len은 기간 매개 변수입니다.

이 전략은 DHMA의 중간 레일을 기준으로 가격 관계를 결정하고 거래 신호를 생성합니다.

  • 가격이 중간선 위에 넘어가면, 길게 가세요.
  • 가격이 중간 레일 아래로 넘어가면 포지션을 닫습니다.

다른 말로, 현재 바의 닫기 가격이 중간 레일 값보다 높으면 다음 바에 긴 지점을 매입하고, 닫기 가격이 낮다면 다음 바에 긴 지점을 매입합니다.

장점

이중형 이동평균 거래 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 더 나은 지원/저항 효과와 트렌드 추적을 위해 단일 이동 평균 라인 대신 삼중 밴드 메커니즘을 사용합니다.

  2. 일반적인 MAs와 비교하면 Hull 이동 평균은 더 적은 지연을 가지고 있으며 가격 변화에 더 잘 반응합니다.

  3. 알고 트레이딩에 적합한 쉽게 이해하기 위해 전통적인 기술 분석 기술을 채택합니다.

  4. 논리는 간단하고 명확하고, 구현하기 쉽고, 고주파 알고리즘 거래에 적합합니다.

  5. 다양한 제품과 시간 프레임에 최적화를 위해 사용자 정의 할 수 있는 Hull MA 타입과 매개 변수

위험성

이 전략은 많은 장점을 가지고 있지만 몇 가지 위험을 초래합니다.

  1. 부진한 시장을 통해 더 많은 위프사이즈가 발생할 수 있습니다. 소음 거래를 필터링하기 위해 세밀한 조정 매개 변수입니다.

  2. 이 전략은 주로 추세를 따르지만 평형 기간에는 덜 효과적입니다. 추세 강도를위한 추가 필터가 도움이 될 수 있습니다.

  3. 선체 MAs는 여전히, 특히 짧은 기간에 약간의 지연을 가지고 있습니다. 매개 변수 최적화와 콤보 지표는 이것을 완화 할 수 있습니다.

  4. 빈번한 신호는 과도한 거래로 이어질 수 있습니다. 포지션 크기와 거래 빈도를 관리하십시오.

최적화 방향

다음은 전략에 최적화 할 수있는 몇 가지 주요 측면입니다:

  1. 각기 다른 제품에 대한 중간 레일 감도를 정밀 조정하기 위해 Hull MA 유형과 매개 변수를 최적화합니다.

  2. 트레이일링 스톱 또는 인크리멘탈 스톱 손실과 같은 스톱 손실 메커니즘을 추가하여 단일 거래 손실 금액을 제어합니다.

  3. 트렌드 방향과 강도를 결정하기 위해 다른 지표와 결합하여 함정을 피합니다. 예를 들어 MACD, KD 등.

  4. 트레이드 수 또는 이익 비율에 기반한 전략 활성화 조건을 추가하여 사이클 종료 수를 제어하여 출구를 줄입니다.

  5. 다중 시간 프레임 조합. 소음을 피하기 위해 전체 추세를 결정하기 위해 더 높은 TF를 사용하십시오.

  6. 입력 논리를 정제하고 입력 패턴을 확인해 입력 확실성을 높여

결론

요약하자면, 이중 헐 이동 평균 거래 전략은 트레이딩 신호를 구성하기 위해 빠르게 반응하는 트렌드를 따르는 헐 이동 평균을 활용하는 양적 접근법이다. 전통적인 MAs와 비교하면 더 빠른 반응과 더 나은 추적 능력을 가지고 있다. 전략 논리는 간단하고 명확하며 알고리즘 거래에 자동화하기 쉽습니다. 여전히 잡음과 트렌드를 따르는 제한의 위험이 있습니다. 매개 변수 조정, 중지 손실 및 다른 지표의 결합과 같은 기술은 실용적인 성능을 향상시킬 수 있습니다.


/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//Basic Hull Ma Pack tinkered by InSilico 
//Converted to Strategy by DashTrader
strategy("Hull Suite Strategy", overlay=true, pyramiding=1, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0)
//////////////////////////////////////////////////////////////////////
// Testing Start dates
testStartYear = input(2016, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
//Stop date if you want to use a specific range of dates
testStopYear = input(2030, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)


testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
// Component Code Stop
//////////////////////////////////////////////////////////////////////
//INPUT
HAClose = security(heikinashi(syminfo.tickerid), timeframe.period, close)
src = input(close, title="Source")
modeSwitch = input("Hma", title="Hull Variation", options=["Hma", "Thma", "Ehma"])
length = input(55, title="Length(180-200 for floating S/R , 55 for swing entry)")
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)

//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, length)
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)
///< Ending Filler
fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch)
///BARCOLOR
barcolor(color = candleCol ? (switchColor ? hullColor : na) : na)


if HULL[0] > HULL[2] and testPeriod()
    strategy.entry("long", strategy.long)
if HULL[0] < HULL[2] and testPeriod()
    strategy.close("long")

더 많은