헐 이동 평균 추세 추종 전략


생성 날짜: 2023-11-02 14:57:37 마지막으로 수정됨: 2023-12-01 15:02:29
복사: 0 클릭수: 778
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

헐 이동 평균 추세 추종 전략

개요

이 전략은 Hull 이동 평균 지표에 기반하여 트렌드 추적 거래 시스템을 구축하고, Hull 곡선의 방향에 따라 더 많은 코카이드를 결정하며, 전형적인 트렌드 추적 전략에 속한다.

전략 원칙

이 전략은 Hull 이동 평균을 주요 기술 지표로 사용합니다. Hull 이동 평균은 미국의 거래자 Alan Hull가 2005년에 제안했으며, 이동 평균의 기초에 대한 개선으로, 제곱근 함수를 사용하여 이동 평균의 지연성을 줄였습니다.

구체적으로 말하자면, 헐 이동 평균은 두 개의 평균을 포함하고 있는데, 하나는 기간 n의 이동 평균 MA ((n)) 이며, 다른 하나는 기간 n/2의 이동 평균 MA ((n/2)) 이다. 두 평균의 차이는 헐 격차 곡선을 구성하고, 헐 격차 곡선에 대한 자체 이동 평균을 계산하여 헐 곡선을 얻는다.

헐 곡선이 올라갈 때, 단기 이동 평균을 대표하는 단기 이동 평균을 대표하는 장기 이동 평균을 착용하고, 트리거를 위해 여러 신호를 수행합니다. 헐 곡선이 내려갈 때, 단기 이동 평균을 대표하는 장기 이동 평균을 대표하는 단기 이동 평균을 대표하는 장기 이동 평균을 착용하고, 트리거를 위해 빈 신호를 수행합니다.

이 전략은 헐 기간 n을 16로 설정하고, 각각 n/2=8기 이동 평균, n=16기 이동 평균을 계산하고, 둘의 차이를 계산하는 헐 곡선을 계산하고, 그 후 헐 곡선 자체의 n=4기 이동 평균을 계산합니다. (제곱근 n=4) 헐 곡선 위에 지나갈 때 더하고, 아래로 지나갈 때 공백을 만든다.

전략적 강점 분석

일반 이동 평균에 비해, 헐 이동 평균은 다음과 같은 장점이 있다:

  1. 지연을 줄인다. √ 함수를 사용하면 헐 곡선이 가격에 더 가깝게 되어 가격 전환을 더 빨리 잡을 수 있다.

  2. 가짜 크로스를 줄여줍니다. 전통적인 이동 평균은 더 많은 가짜 크로스를 생성하는 경향이 있으며, 헐 곡선은 불필요한 거래를 피하기 위해 약간의 소음을 필터링 할 수 있습니다.

  3. parameter 덜。 헐 곡선은 오직 하나의 n개의 변수를 필요로 하며, 최적화를 용이하게 하고, 쌍평선 시스템은 두 개의 변수를 필요로 한다。

  4. 사용자 정의할 수 있다. 헐 곡선의 n값은 시장에 따라 조정할 수 있으며, 사용자 정의할 수 있는 주기, 다른 품종에 적합하다.

  5. 체계성이 강하다 Hull curve 체계성이 강하다, 인적 선택을 회피하고, 기계 거래 시스템의 일관성을 따른다.

위험 분석

이동 평균 시스템에 비해 헐 시스템은 여러 장점이 있지만 다음과 같은 위험도 있습니다:

  1. 트렌드 추적 전략 자체의 한계. 헐 시스템은 트렌드 추적 전략으로서, 트렌드가 급격하게 변할 때 쉽게 중단된다.

  2. 거래 빈도가 높습니다. hull 곡선의 빠른 반응 특성은 거래 빈도를 증가시키고 과도하게 거래되기 쉽습니다.

  3. parameters가 지나치게 최적화되기 쉽다. 오직 하나의 변수 n만이 지나치게 최적화되어 커브 피팅의 위험이 있다.

  4. 효능은 품종에 따라 다르다. 헐 시스템은 높은 변동률을 가진 일부 품종에 효과가 좋지 않으며, 품종에 맞는 변수를 조정해야 한다.

전략 최적화 방향

위에서 언급한 헐 이동 평균 전략의 한계를 바탕으로 다음과 같은 측면에서 최적화할 수 있다:

  1. 부가적인 지표 필터링 거래 신호와 결합하여 가짜 브레이크를 방지한다. MACD, KD 등 지표 판단 트렌드에 참여할 수 있다.

  2. 단위 손실을 제어하기 위해 손해 중지 전략을 추가하십시오. 예를 들어 이동 손해 중지 또는 손해 중지 중지 설정하십시오.

  3. 최적화 변수 n을 선택하여 오버 최적화를 피한다. Walk forward analysis 방법을 사용하여 스크롤 최적화를 수행할 수 있다.

  4. 기계학습 기술과 결합한 동적 최적화 파라미터. RNN 등의 모델을 사용하여 파라미터 n의 최적값을 예측한다.

  5. 서식물 변수 최적화. 기계 학습을 사용하여 다양한 품종 변수를 최적화합니다.

  6. 포지션 관리를 최적화하고 거래 빈도를 낮추는 방법. 고정 주식의 법칙과 같은 방법을 사용할 수 있습니다.

요약하다

헐 이동 평균 전략은 전형적인 트렌드 추적 전략이다. 이동 평균에 비해 장점이 있지만, 과도한 최적화, 빈번한 거래 등의 문제가 있다. 우리는 파라미터 최적화, 스톱 로즈 전략, 포지션 관리 등의 방법을 통해 이 전략을 개선할 수 있다. 헐 시스템은 간단하고 실용적이며, 더 많은 연구와 최적화를 할 가치가 있으며, 더 많은 지표와 기술을 결합하여 안정적인 거래 시스템을 수립할 수 있다.

전략 소스 코드
/*backtest
start: 2023-10-25 00:00:00
end: 2023-11-01 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's HullMA Strategy", shorttitle = "HullMA str", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
n = input(title = "HullMA period", defval=16)
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//HullMA
n2ma=2*wma(close,round(n/2))
nma=wma(close,n)
diff=n2ma-nma
sqn=round(sqrt(n))
n2ma1=2*wma(close[1],round(n/2))
nma1=wma(close[1],n)
diff1=n2ma1-nma1
sqn1=round(sqrt(n))
n1=wma(diff,sqn)
n2=wma(diff1,sqn)
c=n1>n2?green:red
ma=plot(n1,color=c)
    
//Trading
lot = 0.0
lot := strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]
if n1 > n2
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)
if n1 < n2
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
if true
    strategy.close_all()