Эта стратегия основана на индикаторе CCT Bollinger Band Oscillator (CCTBO), разработанном Стивом Карнишем.
Стратегия использует высокую цену в качестве исходных данных для расчета стоимости CCTBBO. Осциллятор колеблется между -200 и 200, где 0 представляет собой среднюю цену минус 2 стандартных отклонения, а 100 - среднюю цену плюс 2 стандартных отклонения. Торговые сигналы генерируются, когда осциллятор пересекает или падает ниже своей линии EMA. В частности, когда осциллятор пересекает линию EMA и расстояние между ними больше установленного значения маржи, открывается длинная позиция. Когда осциллятор падает ниже своей линии EMA и расстояние меньше отрицательного установленного значения, открывается короткая позиция. Размер маржи позиции рассчитывается в соответствии с установленным процентом. Кроме того, стратегия использует стоп-лосс, основанный на процентном изменении цены или количестве движений тика, чтобы выйти из позиций.
Управление рисками:
Стратегия может быть оптимизирована в следующих аспектах:
В общем, это количественная торговая стратегия для выявления перемены цен с использованием индикатора CCT Bollinger Band. У нее есть определенные преимущества, но также есть возможность для улучшения. Оптимизируя параметры, добавляя фильтры, используя инженерию функций, внедряя машинное обучение и т. Д., Стабильность и рентабельность этой стратегии могут быть дополнительно повышены.
/*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)