이 전략은 트렌드 다음 전략에 속하는 앨런 헐 (Alan Hull) 이 발명한 헐 이동 평균 지표 (Hull Moving Average) 를 기반으로 한다. 헐 MA는 이동 평균의 지연을 줄이고 가격 변화에 더 빠르게 대응할 수 있다. 이 전략은 트렌드 방향을 결정하고 추가 필터를 사용하여 거래 신호를 생성한다.
짧은 기간과 긴 기간 Hull MAs를 계산합니다. 특정 무역 방향에 대한 짧은 기간, 전체 추세에 대한 긴 기간.
단기 Hull MAs가 넘어가면 트렌드 반전을 결정합니다.
성공적 브레이크오웃을 보장하기 위해 Hull MA 조건으로 가격 브레이크오웃을 추가합니다.
바람직하지 않은 유출 진입을 방지하기 위해 가격 변화율 필터를 추가합니다.
스톱 로스를 설정하고 리스크를 통제하기 위해 수익을 취합니다.
간단한 이동 평균에 비해 이 전략의 장점은 다음과 같습니다.
헐 MA는 가격 변화에 더 빠르게 반응하고, 트렌드 전환을 적시에 파악할 수 있습니다.
듀얼 헐 (Dual Hull) MA 구조는 긴 시간 프레임과 짧은 시간 프레임에서 동향을 결정할 수 있습니다.
가격 유출 및 변화율 필터는 거짓 유출을 피하는 데 도움이 됩니다.
동적 스톱 로스 및 취득은 수익에 잠금하고 위험을 제어합니다.
이 전략의 위험:
부적절한 매개 변수 설정은 가격 트렌드 전환을 놓칠 수 있습니다.
잘못된 전체 트렌드 판단은 역 트렌드 거래를 유발할 수 있습니다.
너무 넓게 정지 손실을 설정하면 큰 손실이 발생할 수 있습니다.
너무 빈번한 거래는 거래 비용과 미끄러짐 위험을 증가시킵니다.
다음 부분에서 최적화 될 수 있습니다.
감수성과 부드러움을 균형있게 유지하기 위해 Hull MA 기간을 최적화하십시오.
입구와 출구 매개 변수를 최적화하여 최적의 값을 찾습니다.
적응력을 향상시키기 위해 다양한 기기에 대한 매개 변수 견고성을 테스트합니다.
분산 위험을 피하기 위해 부피를 포함합니다.
안정성을 높이기 위해 조건을 추가합니다.
전반적으로,이 전략은 트렌드를 제때 따라가는 허ల్ MA의 반응성을 활용하고 위험 통제를 통해 강력한 수익성을 가지고 있습니다. 그러나 매개 변수 최적화가 필요하며 피할 수없는 일부 체계적 위험으로부터 보호해야합니다.
/*backtest start: 2023-09-11 00:00:00 end: 2023-09-12 22:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 //SeaSide420 strategy("SS420FX", overlay=true, default_qty_type=strategy.percent_of_equity, max_bars_back=720, default_qty_value=100, calc_on_order_fills= true, calc_on_every_tick=true, pyramiding=0) q=input(title="HullMA Short",defval=14) z=input(title="HullMA Long",defval=14) dt = input(defval=0.0010, title="Decision Threshold", type=float, step=0.0001) SL = input(defval=-50000.00, title="Stop Loss in $", type=float, step=1) TP = input(defval=100000.00, title="Target Point in $", type=float, step=1) ot=1 n2ma=2*wma(close,round(q/2)) nma=wma(close,q) diff=n2ma-nma sqn=round(sqrt(q)) n2ma1=2*wma(close[1],round(q/2)) nma1=wma(close[1], q) diff1=n2ma1-nma1 sqn1=round(sqrt(q)) n1=wma(diff,sqn) n2=wma(diff1,sqn) z2ma=2*wma(close[11],round(z/2)) zma=wma(close[11],z) ziff=n2ma-nma zqn=round(sqrt(z)) z2ma1=2*wma(close[12],round(z/2)) zma1=wma(close[12], z) ziff1=n2ma1-nma1 zqn1=round(sqrt(z)) z1=wma(diff,sqn) z2=wma(diff1,sqn) z1e=z1>z2?green:black z2e=z1>z2?black:red z3e=z1>z2?green:red n1e=plot(z1, title="HMA1", color=z1e, linewidth=2, offset=2) n2e=plot(z2, title="HMA2", color=z2e, linewidth=2, offset=2) fill(n1e, n2e, color=z3e, transp=80) confidence=(security(syminfo.tickerid, 'D', close)-security(syminfo.tickerid, 'D', close[1]))/security(syminfo.tickerid, 'D', close[1]) closelong = n1<n2 and close<n2 and confidence<dt or strategy.openprofit<SL or strategy.openprofit>TP if (closelong) strategy.close("Long") closeshort = n1>n2 and close>n2 and confidence>dt or strategy.openprofit<SL or strategy.openprofit>TP if (closeshort) strategy.close("Short") longCondition = n1>n2 and z1>z2 and strategy.opentrades<ot and confidence>dt and close>n1 if (longCondition) strategy.entry("Long",strategy.long) shortCondition = n1<n2 and z1<z2 and strategy.opentrades<ot and confidence<dt and close<n1 if (shortCondition) strategy.entry("Short",strategy.short)