변동성 밴드 오실레이터 기반 반전 추적 전략


생성 날짜: 2023-11-23 13:42:03 마지막으로 수정됨: 2023-11-23 13:42:03
복사: 0 클릭수: 670
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

변동성 밴드 오실레이터 기반 반전 추적 전략

개요

이 전략은 스티브 카니쉬 (Steve Karnish) 가 개발한 CCT 볼링거 밴드 오시컬레이터 (CCT Bollinger Band Oscillator) 지표에 기반하여, 가격의 평균선을 뚫고 반전하는 것을 확인하고 반전하는 메커니즘을 결합합니다.

전략 원칙

이 전략은 높은 가격을 소스 데이터로 사용하고, 그 다음 CCT 진동대 진동기의 값을 계산한다. 진동기의 값은 200에서 200 사이로 변동하며, 0은 평균 가격 2배의 표준 차이를 빼고, 100은 평균 가격 2배의 표준 차이를 더한다. 진동기가 EMA 평균선을 넘거나 넘을 때 거래 신호를 생성한다. 구체적으로, 진동기가 EMA 평균선을 넘어서서 둘 사이의 거리가 설정된 마이너스 값보다 크면 더 많이 한다. 진동기가 EMA 평균선을 넘어서서 둘 사이의 거리가 설정된 마이너스 값보다 작으면 더 많이 한다.

우위 분석

  • 특정 시장 영향력을 가진 CCT 파동대 진동자 지표를 사용하여 가짜 신호를 줄일 수 있습니다.
  • EMA 평균선과 경계 조건 필터링 신호를 결합하여 흔들림 중에 너무 많은 무효 거래를 피합니다.
  • 회수 손해 제도를 사용하여 손실이 너무 커지면 적시에 손해를 막을 수 있습니다.

위험 분석

  • CCT 진동기는 자체적으로 지연이 발생하여 가격 반전의 최적 시점을 놓치게됩니다.
  • 너무 큰 마진과 너무 짧은 EMA 주기가 거래 빈도와 위험을 증가시킵니다.
  • 너무 느슨한 손해배상 설정은 손실의 위험을 증가시킬 수 있습니다.

위험 관리 방법:

  • 평균 EMA 주기를 조정하여 더 긴 주기의 필터를 사용
  • 위험과 이익을 균형 잡기 위해 적당한 마이너스를 조정합니다.
  • 단기 손실을 제어하기 위해 지분 비율을 낮추는 것
  • 적당히 좁은 회수 스톱레이드, 더 빠른 스톱레이드

최적화 방향

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

  1. 다른 변동성 지표들, 예를 들어, 브린 벨트 지표, 켈트너 채널 등으로 대체하여, 매매 지점을 판단합니다.
  2. MACD, RSI 등과 같은 다른 필터 지표를 추가하여 거래 신호의 신뢰성을 보장합니다.
  3. 기계 학습 알고리즘을 사용하여 EMA 주기, 경계값 등과 같은 매개 변수를 자동으로 최적화합니다.
  4. 고정 비율 포지션, 마팅거 등과 같은 포지션 관리 장치를 추가하여 거래 위험을 제어합니다.
  5. 회수 중지 메커니즘을 최적화하여, 변동 중지 또는 ATR 중지와 같은 방법을 사용합니다.

요약하다

이 전략은 전체적으로 CCT 변동대 지표에 기반하여 가격 역전을 판단하는 양적 거래 전략이다. 장점이 있지만 개선의 여지가 있습니다. 변수 최적화, 필터 지표의 추가, 기능 엔지니어링의 사용, 기계 학습의 도입 등을 통해 전략의 안정성과 수익성을 더욱 강화 할 수 있습니다.

전략 소스 코드
/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-17 11:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
// This strategy is based on the CCT Bollinger Band Oscillator (CCTBO) 
// developed by Steve Karnish of Cedar Creek Trading and coded by LazyBear.
// Indicator is available here https://www.tradingview.com/v/iA4XGCJW/

strategy("Strategy CCTBBO v2 | Fadior", shorttitle="Strategy CCTBBO v2", pyramiding=0, precision=2, calc_on_order_fills=false, initial_capital=1000, default_qty_type=strategy.percent_of_equity, currency="USD", default_qty_value=100, overlay=false)

length_stddev=input(title="Stddev loopback period",defval=20)
length_ema=input(title="EMA period", defval=2)
margin=input(title="Margin", defval=0, type=float, step=0.1)
price = input(title="Source", defval=high)
digits= input(title="Number of digits",defval=2,step=1,minval=2,maxval=6)
offset = input(title="Trailing offset (0.01 = 1%) :", defval=0.013, type=float, step=0.01)
pips= input(title="Offset in ticks ?",defval=false,type=bool)

src=request.security(syminfo.tickerid, "1440", price)

cctbbo=100 * ( src + 2*stdev( src, length_stddev) - sma( src, length_stddev ) ) / ( 4 * stdev( src, length_stddev ) )

ul=hline(150, color=gray, editable=true)
ll=hline(-50, color=gray)
hline(50, color=gray)
fill(ul,ll, color=green, transp=90)
plot(style=line, series=cctbbo, color=blue, linewidth=2)
plot(ema(cctbbo, length_ema), color=red)

d = digits == 2 ? 100 : digits == 3 ? 1000 : digits == 4 ? 10000 : digits == 5 ? 100000 : digits == 6 ? 1000000 : na

TS = 1
TO = pips ? offset : close*offset*d
CQ = 100
TSP = TS
TOP = (TO > 0) ? TO : na

longCondition = crossover(cctbbo, ema(cctbbo, length_ema)) and cctbbo - ema(cctbbo, length_ema) > margin
if (longCondition)
    strategy.entry("Long", strategy.long)
    strategy.exit("Close Long", "Long", qty_percent=CQ, trail_points=TSP, trail_offset=TOP)


shortCondition = crossunder(cctbbo, ema(cctbbo, length_ema)) and cctbbo - ema(cctbbo, length_ema) < -margin
if (shortCondition)
    strategy.entry("Short", strategy.short)
    strategy.exit("Close Short", "Short", qty_percent=CQ, trail_points=TSP, trail_offset=TOP)