
이 전략의 핵심 아이디어는 Hull 평균선과 실제 파도 크기를 ((ATR) 결합하여 시장의 경향 방향을 식별하고 트렌드 방향이 확인된 후에 입주를 하는 것이다. 구체적으로, 특정 주기 동안의 Hull 평균선과 이전 주기 Hull 평균선 사이의 차이를 계산하여, 차이는 상승하면 낙관적 추세로 판단하고, 차이는 떨어지면 낙관적 추세로 판단한다. 동시에 ATR 지표의 지표 판단과 결합하여, 트렌드 방향이 확인된 동시에 파도가 계속 확대될 때 입주를 선택한다.
이 전략은 주로 헐 평균선과 ATR 두 종류의 지표에 기반한다.
헐 평균은 미국의 선물 거래자 앨런 헐 (Alan Hull) 가 개발한 트렌드 추적 형식의 지표이다. 헐 평균은 이동 평균과 비슷하지만, 헐 평균은 더 높은 민감성을 가지고 있으며, 가격 변화의 트렌드를 더 빨리 포착할 수 있다. 전략에는 조정 가능한 변수 hullLength가 설치되어 있으며, 이는 헐 평균의 주기 길이를 제어하고, 현재 주기와 이전 주기의 헐 평균 사이의 차이를 계산하여 현재의 가격 트렌드 방향을 판단한다.
ATR은 Average True Range, 즉 실제 파장이다. 그것은 매일의 가격 변동의 폭을 반영한다. 변동이 커지면 실제 파장은 상승한다. 변동이 줄어들면 실제 파장은 떨어진다.
이 전략의 논리는 다음과 같습니다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
이 전략에는 몇 가지 위험도 있습니다.
대응방법:
이 전략의 최적화 가능성은 매우 넓고, 다음과 같은 부분에서 시작될 수 있습니다.
이 전략은 Hull 평평선의 트렌드 추적 능력과 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")