Стратегия DCCI Breakout - это краткосрочная торговая стратегия, которая идентифицирует ситуации с перепроданностью и перекупленностью с использованием индикатора CCI. Она сочетает в себе индикатор CCI и линию скользящей средней WMA. Она длится, когда индикатор CCI отскакивает обратно из зоны перепроданности, и становится короткой, когда индикатор CCI выходит из зоны перекупленности, выходя после получения прибыли.
Стратегия использует индикатор CCI для оценки условий перекупа / перепродажи на рынке. Индикатор CCI может эффективно выявлять аномальные ценовые ситуации. Значения ниже -100 указывают на перепродажу на рынке, а значения выше 100 указывают на перекуп на рынке. Стратегия будет длинной, когда индикатор CCI пересекает выше -100 снизу; и будет короткой, когда индикатор CCI пересекает выше 100 сверху.
В то же время стратегия также включает движущуюся среднюю линию WMA для определения направления тренда. Только когда цена закрытия выше линии WMA, будут действовать длинные сигналы; только когда цена закрытия ниже линии WMA, будут действовать короткие сигналы. Это помогает отфильтровать некоторые неоднозначные торговые сигналы.
После входа в позицию стратегия использует стоп-лосс для контроля рисков. Существуют три опциональных метода стоп-лосса: фиксированная стратегия стоп, свинг высокая/низкая стоп, ATR стоп. Когда длинная, позиция будет остановлена, если цена упадет до уровня остановки; когда короткая, позиция будет остановлена, если цена поднимется до уровня остановки.
Стратегия имеет следующие преимущества:
Определяет возможности перепродажи и перекупки своевременно, выявляя изменения с использованием показателя CCI.
Избегает торговли против тренда, включая анализ направления тренда с использованием скользящих средних.
Предоставляет несколько опциональных методов стоп-лосса, которые можно корректировать в зависимости от рыночных условий.
Простые и понятные торговые сигналы, которые легко реализовать.
Стратегия также имеет следующие риски:
Индикатор CCI может легко генерировать ложные сигналы, которых невозможно полностью избежать.
Неправильное размещение стоп-лосса может привести к переостановке.
Неспособность выявить тенденции означает, что слишком много ненужных сделок может быть создано на различных рынках.
Неспособность судить об общем направлении рынка может привести к торговле в неправильном направлении.
Для решения этих рисков основными подходами к оптимизации являются:
Включить другие индикаторы для фильтрации сигналов CCI.
Оптимизировать размещение остановки с помощью обратного тестирования.
Добавьте индикаторы тенденций, чтобы избежать колебаний на рынке.
Определить направление торговли на основе анализа основных зон поддержки и сопротивления.
К основным аспектам оптимизации этой стратегии относятся:
Оптимизация параметров CCI: корректировка периода просмотра CCI, оптимизация параметров показателей.
Оптимизация стоп-лосса: тестируйте различные методы стоп-лосса и выберите оптимальный стоп-лосс.
Оптимизация фильтров: Добавьте дополнительные фильтры, такие как MACD, RSI, чтобы создать мультииндикаторную систему фильтрации для уменьшения ложных сигналов.
Фильтрация трендов: добавление индикаторов, идентифицирующих тренд, таких как скользящие средние, чтобы избежать контратендных сделок.
Автоматическое получение прибыли: создание динамических механизмов получения прибыли для автоматического получения прибыли на основе волатильности рынка.
В целом, стратегия DCCI Breakout является очень практичной краткосрочной торговой системой. Она идентифицирует ситуации перекупленности/перепродажи с использованием индикатора CCI и включает в себя скользящую среднюю для направленного уклонения. Риск управляется с помощью стоп-лосса. Простые и четкие сигналы облегчают реализацию этой стратегии для краткосрочной торговли.
/*backtest start: 2023-02-11 00:00:00 end: 2023-09-20 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © tweakerID // ---From the "Bitcoin Trading Strategies" book, by David Hanson--- // After testing, works better with an ATR stop instead of the Strategy Stop. This paramater // can be changed from the strategy Inputs panel. // "CCI Scalping Strategy // Recommended Timeframe: 5 minutes // Indicators: 20 Period CCI, 20 WMA // Long when: Price closes above 20 WMA and CCI is below -100, enter when CCI crosses above -100. // Stop: Above 20 WMA" //@version=4 strategy("CCI Scalping Strat", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=10000, commission_value=0.04, calc_on_every_tick=false, slippage=0) direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1) strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long)) /////////////////////// STRATEGY INPUTS //////////////////////////////////////// title1=input(true, "-----------------Strategy Inputs-------------------") i_Stop = input(0, step=.05, title="Strategy Stop Mult")*.01 i_CCI=input(16, title="CCI Length") i_WMA=input(5, title="WMA Length") /////////////////////// BACKTESTER ///////////////////////////////////////////// title2=input(true, "-----------------General Inputs-------------------") // Backtester General Inputs i_SL=input(true, title="Use Stop Loss and Take Profit") i_SLType=input(defval="ATR Stop", title="Type Of Stop", options=["Strategy Stop", "Swing Lo/Hi", "ATR Stop"]) i_SPL=input(defval=10, title="Swing Point Lookback") i_PercIncrement=input(defval=2, step=.1, title="Swing Point SL Perc Increment")*0.01 i_ATR = input(14, title="ATR Length") i_ATRMult = input(10, step=.1, title="ATR Multiple") i_TPRRR = input(1.5, step=.1, title="Take Profit Risk Reward Ratio") // Bought and Sold Boolean Signal bought = strategy.position_size > strategy.position_size[1] or strategy.position_size < strategy.position_size[1] // Price Action Stop and Take Profit LL=(lowest(i_SPL))*(1-i_PercIncrement) HH=(highest(i_SPL))*(1+i_PercIncrement) LL_price = valuewhen(bought, LL, 0) HH_price = valuewhen(bought, HH, 0) entry_LL_price = strategy.position_size > 0 ? LL_price : na entry_HH_price = strategy.position_size < 0 ? HH_price : na tp=strategy.position_avg_price + (strategy.position_avg_price - entry_LL_price)*i_TPRRR stp=strategy.position_avg_price - (entry_HH_price - strategy.position_avg_price)*i_TPRRR // ATR Stop ATR=atr(i_ATR)*i_ATRMult ATRLong = ohlc4 - ATR ATRShort = ohlc4 + ATR ATRLongStop = valuewhen(bought, ATRLong, 0) ATRShortStop = valuewhen(bought, ATRShort, 0) LongSL_ATR_price = strategy.position_size > 0 ? ATRLongStop : na ShortSL_ATR_price = strategy.position_size < 0 ? ATRShortStop : na ATRtp=strategy.position_avg_price + (strategy.position_avg_price - LongSL_ATR_price)*i_TPRRR ATRstp=strategy.position_avg_price - (ShortSL_ATR_price - strategy.position_avg_price)*i_TPRRR /////////////////////// STRATEGY LOGIC ///////////////////////////////////////// //CCI CCI=cci(close, i_CCI) //WMA WMA=wma(close, i_WMA) //Stops LongStop=valuewhen(bought, WMA, 0)*(1-i_Stop) ShortStop=valuewhen(bought, WMA, 0)*(1+i_Stop) StratTP=strategy.position_avg_price + (strategy.position_avg_price - LongStop)*i_TPRRR StratSTP=strategy.position_avg_price - (ShortStop - strategy.position_avg_price)*i_TPRRR BUY = (close > WMA) and crossover(CCI , -100) SELL = (close < WMA) and crossunder(CCI , 100) //Trading Inputs DPR=input(true, "Allow Direct Position Reverse") reverse=input(false, "Reverse Trades") // Entries if reverse if not DPR strategy.entry("long", strategy.long, when=SELL and strategy.position_size == 0) strategy.entry("short", strategy.short, when=BUY and strategy.position_size == 0) else strategy.entry("long", strategy.long, when=SELL) strategy.entry("short", strategy.short, when=BUY) else if not DPR strategy.entry("long", strategy.long, when=BUY and strategy.position_size == 0) strategy.entry("short", strategy.short, when=SELL and strategy.position_size == 0) else strategy.entry("long", strategy.long, when=BUY) strategy.entry("short", strategy.short, when=SELL) SL= i_SLType == "Swing Lo/Hi" ? entry_LL_price : i_SLType == "ATR Stop" ? LongSL_ATR_price : LongStop SSL= i_SLType == "Swing Lo/Hi" ? entry_HH_price : i_SLType == "ATR Stop" ? ShortSL_ATR_price : ShortStop TP= i_SLType == "Swing Lo/Hi" ? tp : i_SLType == "ATR Stop" ? ATRtp : StratTP STP= i_SLType == "Swing Lo/Hi" ? stp : i_SLType == "ATR Stop" ? ATRstp : StratSTP strategy.exit("TP & SL", "long", limit=TP, stop=SL, when=i_SL) strategy.exit("TP & SL", "short", limit=STP, stop=SSL, when=i_SL) /////////////////////// PLOTS ////////////////////////////////////////////////// plot(WMA) plot(i_SL and strategy.position_size > 0 ? SL : na , title='SL', style=plot.style_cross, color=color.red) plot(i_SL and strategy.position_size < 0 ? SSL : na , title='SSL', style=plot.style_cross, color=color.red) plot(i_SL and strategy.position_size > 0 ? TP : na, title='TP', style=plot.style_cross, color=color.green) plot(i_SL and strategy.position_size < 0 ? STP : na, title='STP', style=plot.style_cross, color=color.green) // Draw price action setup arrows plotshape(BUY ? 1 : na, style=shape.triangleup, location=location.belowbar, color=color.green, title="Bullish Setup", size=size.auto) plotshape(SELL ? 1 : na, style=shape.triangledown, location=location.abovebar, color=color.red, title="Bearish Setup", size=size.auto)