Diese Strategie basiert auf dem von Steve Karnish entwickelten CCT Bollinger Band Oscillator (CCTBO).
Der Oszillator schwankt zwischen -200 und 200, wobei 0 den Durchschnittspreis minus 2 Standardabweichungen und 100 den Durchschnittspreis plus 2 Standardabweichungen darstellt. Handelssignale werden erzeugt, wenn der Oszillator seine EMA-Linie überschreitet oder darunter fällt. Insbesondere, wenn der Oszillator seine EMA-Linie überschreitet und der Abstand zwischen ihnen größer ist als der festgelegte Marginwert, wird eine Long-Position eröffnet. Wenn der Oszillator unter seine EMA-Linie fällt und die Entfernung kleiner als der negative festgelegte Wert ist, wird eine Short-Position eröffnet. Die Positionsmargingröße wird nach dem festgelegten Prozentsatz berechnet. Darüber hinaus verwendet die Strategie einen Trailing-Stop-Loss basierend auf der prozentualen Preisänderung oder der Anzahl der Ticks, um Positionen zu verlassen.
Risikomanagement:
Die Strategie kann in folgenden Aspekten optimiert werden:
Zusammenfassend ist dies eine quantitative Handelsstrategie zur Identifizierung von Preisumkehrungen mithilfe des CCT-Bollinger-Band-Indikators. Sie hat gewisse Vorteile, aber auch Verbesserungsmöglichkeiten. Durch die Optimierung von Parametern, das Hinzufügen von Filtern, die Verwendung von Feature Engineering, die Einführung von maschinellem Lernen usw. können die Stabilität und Rentabilität dieser Strategie weiter verbessert werden.
/*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)