쌍방향 홀 이동 평균 거래 전략은 쌍방향 홀 이동 평균을 거래 신호로 사용하는 양적 거래 전략이다. 이 전략은 전통적인 기술 분석에서 단일 이동 평균을 사용하는 방법을 모티브로 하여 쌍방향 홀 이동 평균을 사용하여 브레이크 포인트에서 구매 및 판매한다.
쌍방향 홀 이동 평균 거래 전략의 핵심은 쌍방향 홀 이동 평균 (Dual Hull Moving Average) 이다. 쌍방향 홀 이동 평균은 중간, 상단, 하단 세 개의 선으로 구성되어 있으며, 서로 다른 가격 평균을 나타냅니다. 계산 공식은 다음과 같습니다.
중도:Mode (modeSwitch, src, len) HULL[0] HULL[2]
여기서 Mode 함수는 Hull 이동 평균의 다른 변형을 선택할 수 있습니다. HMA, EHMA, THMA 등이 있습니다.
이 전략은 쌍방향 홀 이동 평균의 중궤도를 기준으로 가격과 중궤도의 관계를 판단하여 거래 신호를 수립한다:
즉, 현재 K 선의 종결값이 중궤도 값보다 크면 다음 K 선의 거래가 시작될 때 더 많이 한다. 만약 현재 K 선의 종결값이 중궤도 값보다 작으면 다음 K 선의 거래가 시작될 때 평점이다.
양방향 홀 이동 평균 거래 전략은 다음과 같은 장점이 있습니다.
단일 평행선 대신 쌍방향의 줄무늬 영역을 사용하는 것이 더 나은 지원과 저항 효과를 가지고 있으며 추세를 추적하는 데에도 더 도움이 됩니다.
일반적인 이동 평균에 비해 Hull 이동 평균은 지연성이 낮아 가격 변화에 더 빠르게 반응할 수 있다.
전통적인 기술 분석 방법을 활용하여 쉽게 이해할 수 있으며 자동화 거래에 적합합니다.
전략 논리는 간단하고 명확하며, 실행하기 쉽고, 고주파 알고리즘 거래에 적합하다.
사용자 정의 할 수 있는 Hull 이동 평균 유형 및 매개 변수, 다양한 품종 및 거래 시간 프레임에 대해 최적화 할 수 있습니다.
양방향 홀 이동 평균 거래 전략에는 장점이 많지만 주의해야 할 몇 가지 위험도 있습니다.
가격의 흔들림이 있을 때, 더 많은 손실이 발생할 수 있다. 적절한 파라미터를 조정할 수 있고, 부분적으로 노이즈 트레이딩을 필터링할 수 있다.
이 전략은 주로 트렌드를 따르는 것으로, 가격이 가로로 움직일 때 효과가 좋지 않다. 다른 지표나 메커니즘을 더해서 트렌드를 판단할 수 있다.
헐 이동 평균 자체는 특히 단기간에 지연성이 있다. 파라미터 최적화 및 조합 지표는 부분적으로 해결할 수 있다.
거래 신호가 빈번하고 과도하게 거래되기 쉽다. 위치 관리와 거래 빈도를 적절히 제어한다.
양방향 홀 이동 평균 거래 전략에는 다음과 같은 몇 가지 주요 최적화 방향이 있습니다.
헐 이동 평균의 종류와 매개 변수를 최적화하고, 다른 거래 품종에 적응하기 위해 중간 궤도의 민감성을 조정한다.
트레일링 스톱 (trailing stop) 또는 인큐멘터리 스톱 (incremental stop) 을 추가하여 단편 손실을 효과적으로 제어한다.
다른 지표와 결합하여 트렌드 방향과 강도를 판단하여, 매치되는 것을 피하십시오. 예를 들어 MACD, KD 등.
거래 횟수나 수익률에 기반한 전략 활성화 조건에 추가 . 폐쇄 회로 횟수를 제어하고, 평점을 줄여 .
다중 시간 프레임 결합. 높은 시간 프레임을 사용하여 트렌드 방향을 결정하고, 잡음으로 오해하지 마십시오.
출전 논리를 최적화한다. candle 형태를 기반으로 출전 확실성을 높인다.
쌍방향 홀 이동 평균 거래 전략은 전체적으로 트렌드 지수형 이동 평균을 사용하여 거래 신호를 구축하는 정량화 전략이다. 전통적인 이동 평균에 비해 반응이 더 빠르고 추적 효과가 더 좋다. 이 전략의 논리는 간단하고 명확하며 구현하기 쉬운 편이며 자동화 거래에 적합하다. 물론 일부 잡음 위험과 트렌드 추적 결점이 있습니다. 매개 변수 최적화, 스톱패스 메커니즘, 그리고 다른 지표의 조합과 같은 수단을 통해 이 전략이 실전에서의 성능을 강화할 수 있다.
/*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")