이 전략의 핵심 아이디어는 헐 이동 평균과 평균 진정한 범위 (ATR) 를 결합하여 시장 트렌드 방향을 파악하고, 트렌드 방향이 확인된 후 포지션을 입력하는 것입니다. 구체적으로, 특정 기간과 이전 기간의 헐 이동 평균 사이의 차이를 계산합니다. 차이가 상승하면 상승 추세를 나타냅니다. 차이가 감소하면 하락 추세를 나타냅니다. 동시에 ATR 인덱스는 진폭을 결정하는 데 사용됩니다. 트렌드가 확인되고 진폭이 계속 확장되면 포지션을 입력합니다.
이 전략은 주로 두 가지 유형의 지표에 의존합니다. Hull 이동 평균과 ATR.
헐 이동 평균 (Hull moving average) 은 미국의 선물 거래자 앨런 헐 (Alan Hull) 이 개발한 트렌드를 따르는 지표이다. 이동 평균과 비슷하게, 헐 이동 평균은 더 높은 민감성을 가지고 있으며 가격 변화와 추세를 더 빠르게 파악할 수 있다. 전략은 헐 이동 평균의 기간을 제어하기 위해 조정 가능한 매개 변수 hullLength를 설정한다. 현재 기간 Hull MA와 이전 기간 MA 사이의 차이를 계산함으로써, 현재 가격 트렌드 방향을 결정한다.
ATR는 평균 진 범위 (Average True Range) 를 의미합니다. 그것은 매일 가격 변동의 폭을 반영합니다. 변동성이 증가하면 ATR이 상승하고 변동성이 감소하면 ATR이 떨어집니다. 전략은 ATR 계산을 제어하기 위해 atrLength 및 atrSmoothing과 같은 매개 변수를 설정합니다. 그리고 ATR은 항목에 대한 한 참조로 차트에 그려집니다.
구체적으로, 전략 논리는 다음과 같습니다.
이 전략의 장점:
이 전략의 몇 가지 위험:
해결책:
여전히 최적화 할 여지가 있습니다.
이 전략은 추세에 따른 함선 MA의 용량과 ATR의 열 판단 능력을 통합합니다. 추세가 확인되고 변동성이 증가하면 일부 유효하지 않은 신호를 필터링하기 위해 포지션을 입력합니다. 파라미터 최적화와 더 나은 위험 관리로 추가 향상이 가능합니다. 요약하면이 전략은 트렌드 추적 및 열 판단의 여러 요인을 결합합니다. 파라미터가 정밀하게 조정되면 좋은 결과를 얻을 수 있습니다.
/*backtest start: 2024-01-07 00:00:00 end: 2024-01-14 00:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 // Hull cross and ATR strategy("Hull cross and ATR", shorttitle="H&ATR", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_order_fills=true, calc_on_every_tick=true, pyramiding=0) keh=input(title="Hull Length",defval=50) length = input(title="ATR Length", defval=50, minval=1) smoothing = input(title="ATR Smoothing", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"]) p=input(ohlc4,title="Price data") n2ma=2*wma(p,round(keh/2)) nma=wma(p,keh) diff=n2ma-nma sqn=round(sqrt(keh)) n2ma1=2*wma(p[1],round(keh/2)) nma1=wma(p[1],keh) diff1=n2ma1-nma1 sqn1=round(sqrt(keh)) n1=wma(diff,sqn) n2=wma(diff1,sqn) ma_function(source, length) => if smoothing == "RMA" rma(p, length) else if smoothing == "SMA" sma(p, length) else if smoothing == "EMA" ema(p, length) else wma(p, length) plot(ma_function(tr(true), length), title = "ATR", color=black, transp=50) closelong = n1<n2 if (closelong) strategy.close("buy") closeshort = n1>n2 if (closeshort) strategy.close("sell") if (ma_function(tr(true), length)<p and p>p[length] and n1>n2) strategy.entry("buy", strategy.long, comment="BUY") if (ma_function(tr(true), length)>p and p<p[length] and n1<n2) strategy.entry("sell", strategy.short, comment="SELL")