이 전략은 스티브 카니쉬가 개발한 CCT 볼링거 밴드 오시레이터 (CCTBO) 지표에 기반을 두고 있습니다. 이 지표는 트레일링 스톱 메커니즘과 결합된 이동 평균의 가격 파장을 감지하여 가격 반전을 식별합니다.
이 전략은 CCTBBO의 값을 계산하기 위해 높은 가격을 원천 데이터로 사용합니다. 오시일레이터는 -200에서 200 사이 변동합니다. 0은 평균 가격을 마이너스 2 표준 편차와 100은 평균 가격을 더하여 2 표준 편차를 나타냅니다. 오시일레이터가 EMA 라인을 넘거나 아래로 떨어지면 거래 신호가 생성됩니다. 구체적으로 오시일레이터가 EMA 라인을 넘거나 아래로 떨어지면 긴 포지션이 열립니다. 오시일레이터가 EMA 라인을 넘어서서 거리가 설정된 마진 값보다 크면 긴 포지션이 열립니다. 오시일레이터가 EMA 라인을 넘어서서 거리가 부정적인 설정 값보다 작으면 짧은 포지션이 열립니다. 포지션 마진 크기는 설정된 비율에 따라 계산됩니다. 또한 전략은 가격 변화의 비율 또는 틱 움직임의 수에 기반한 트레일링 스톱 손실을 사용하여 포지션을 종료합니다.
위험 관리:
이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.
요약하자면, 이것은 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)