지그재그 기반 추세 추종 전략


생성 날짜: 2023-10-30 14:51:08 마지막으로 수정됨: 2023-10-30 14:51:08
복사: 0 클릭수: 843
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

지그재그 기반 추세 추종 전략

개요

이 전략은 ZigZag 지표를 사용하여 트렌드 방향을 판단하고, 트렌드가 확인된 후 트렌드 추적을 수행하며, 트렌드 추적 전략에 속한다.

전략 원칙

이 전략은 주로 ZigZag 지표를 통해 가격의 트렌드 방향을 판단한다. ZigZag 지표는 시장 소음을 필터링하여 주요 가격 변동 방향을 판단한다. 가격이 새로운 고가 또는 새로운 낮은 것을 만들 때 ZigZag는 거래 신호를 낸다.

구체적으로, 전략은 먼저 ZigZag 값을 계산하고, 가격이 더 높은 고점을 만들 때, ZigZag은 그 높은 고점의 가격; 가격이 더 낮은 낮은 고점을 만들 때, ZigZag은 그 낮은 고점의 가격. 이렇게 ZigZag은 가격의 주요 변동 방향을 명확하게 반영 할 수 있습니다.

전략은 ZigZag값에 따라 트렌드 방향을 판단한다. ZigZag가 상승하면 상승 트렌드에 있음을 나타내고, ZigZag가 하락하면 하락 트렌드에 있음을 나타낸다. 전략은 ZigZag가 변하는 경우 포지션을 열어 트렌드 방향을 추적한다.

구체적으로, 전략은 ZigZag 회전으로 새로운 고위가 형성될 때 더 많은 주문을 열고, ZigZag 회전으로 새로운 낮은 것이 형성될 때 공명 주문을 열습니다. 평점 조건은 ZigZag 다시 회전 역전입니다. 이렇게 ZigZag 판단 트렌드에 기반한 자동 거래 전략이 실현됩니다.

전략적 강점 분석

  • 지그자그 지표를 사용하여 트렌드를 판단하여 시장 소음을 효과적으로 필터링하여 주요 트렌드 방향을 정확하게 판단 할 수 있습니다.
  • ZigZag 회전 시점은 정확하고, 우수한 진입 시점을 형성하기 쉽다.
  • 다른 복잡한 지표나 모델 지원이 필요 없는 완전한 트렌드 추적 전략을 구현한다.
  • 전략적 논리는 간단하고 명확하며, 이해하기 쉽고 수정하기 쉽습니다.
  • 자유 제어 전략의 거래 주파수를 파라미터로 조정할 수 있다.

위험 분석

  • ZigZag는 중단계 황소 곰의 전환에 민감하지 않으며, 빠른 반전을 놓칠 수 있다.
  • 트렌드를 추적하는 전략, 트렌드 반전으로 인한 손실에 대처할 수 없습니다.
  • 단독 손실의 크기를 제한할 수 없으며, 단독 손실의 위험이 크다.
  • 한 지표만 기준으로 하는 전략은 과다 적합성의 위험이 있을 수 있습니다.

위험은 다음과 같은 방법으로 줄일 수 있습니다.

  • 다른 지표와 함께 추세 역전 위험을 판단하는 것.
  • 적당히 지분 기간을 단축하고 적당히 손실을 중지하십시오.
  • 자금 관리 모듈을 추가하여 단독 손실의 크기를 제한합니다.
  • 기계학습 모델을 추가하고 전략의 융통성을 향상시킵니다.

최적화 방향

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. 단위 손실 위험을 제어하기 위해 손해 중지 전략을 추가하십시오. 이동한 손해 중지 또는 단위 손해 중지 설정할 수 있습니다.

  2. 트렌드 반전 판단 메커니즘을 추가한다. MACD, 이동 평균 등의 지표를 추가할 수 있으며, 트렌드 반전이 판단될 때 포지션을 폐쇄한다.

  3. 다시 입점하는 모듈에 가입하십시오. 추세가 지속되면 더 많은 수익을 얻기 위해 적절하게 지분을 올릴 수 있습니다.

  4. 기계학습 모델을 추가한다. LSTM와 같은 딥러닝 모델을 훈련시킬 수 있으며, ZigZag가 트렌드 방향을 판단하는 데 도움을 준다.

  5. 최적화 자금 관리 메커니즘. 포지션 크기를 회수 또는 연관성 이론에 따라 최적화 할 수 있습니다.

  6. 전체적인 최적화 매개 변수를 설정한다. ZigZag의 주기 길이와 같은 전문 서적의 최적화 매개 변수를 참고하고, 역사 회귀를 통해 최적화 할 수 있다.

요약하다

이 전략은 ZigZag 지표를 사용하여 트렌드 방향을 판단하여 트렌드 기반의 거래 전략을 구현한다. 전략 논리는 간단하고 명확하며 구현하기 쉽다. 그러나 단일 지표 의존, 트렌드 역전 위험 등과 같은 문제가 있습니다.

전략 소스 코드
/*backtest
start: 2022-10-23 00:00:00
end: 2023-04-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's ZZ Strategy v1.0", shorttitle = "ZZ str 1.0", 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(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
tf = input('W', title='Timeframe for ZigZag')
showzz = input(false, defval = false, title = "Show ZigZag")
showbg = input(false, defval = false, title = "Show Background")
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")

//ZigZag
zigzag() =>
    _isUp = close >= open
    _isDown = close <= open
    _direction = _isUp[1] and _isDown ? -1 : _isDown[1] and _isUp ? 1 : nz(_direction[1])
    _zigzag = _isUp[1] and _isDown and _direction[1] != -1 ? highest(2) : _isDown[1] and _isUp and _direction[1] != 1 ? lowest(2) : na
useAltTF = true
zz = useAltTF ? (change(time(tf)) != 0 ? request.security(syminfo.tickerid, tf, zigzag()) : na) : zigzag()
zzcolor = showzz ? black : na
plot(zz, title = 'ZigZag', color = zzcolor, linewidth = 2)

//Levels
dot = zz > 0 ? zz : dot[1]
uplevel = dot > dot[1] ? dot : uplevel[1]
dnlevel = dot < dot[1] ? dot : dnlevel[1]
colorup = close[1] < uplevel[1] and uplevel == uplevel[1] ? lime : na
colordn = close[1] > dnlevel[1] and dnlevel == dnlevel[1] ? red : na
plot(uplevel, color = colorup, linewidth = 3)
plot(dnlevel, color = colordn, linewidth = 3)

//Background
size = strategy.position_size
bgcol = showbg == false ? na : size != size[1] ? blue : na
bgcolor(bgcol, transp = 50)

//Trading
lot = strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]

if uplevel > 0 and dnlevel > 0
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel + syminfo.mintick)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel - syminfo.mintick)

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()