CCTBBO 회전 추적 전략

저자:차오장, 날짜: 2023-11-23 13:42:03
태그:

img

전반적인 설명

이 전략은 스티브 카니쉬가 개발한 CCT 볼링거 밴드 오시레이터 (CCTBO) 지표에 기반을 두고 있습니다. 이 지표는 트레일링 스톱 메커니즘과 결합된 이동 평균의 가격 파장을 감지하여 가격 반전을 식별합니다.

전략 논리

이 전략은 CCTBBO의 값을 계산하기 위해 높은 가격을 원천 데이터로 사용합니다. 오시일레이터는 -200에서 200 사이 변동합니다. 0은 평균 가격을 마이너스 2 표준 편차와 100은 평균 가격을 더하여 2 표준 편차를 나타냅니다. 오시일레이터가 EMA 라인을 넘거나 아래로 떨어지면 거래 신호가 생성됩니다. 구체적으로 오시일레이터가 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)
    
    

더 많은