Стратегия динамического прорыва CCI


Дата создания: 2024-02-18 10:13:21 Последнее изменение: 2024-02-18 10:13:21
Копировать: 1 Количество просмотров: 664
1
Подписаться
1617
Подписчики

Стратегия динамического прорыва CCI

Обзор

Динамическая CCI-прорывная стратегия - это краткосрочная торговая стратегия, которая использует индикатор CCI для идентификации перепродажи и перекупа. Она объединяет индикатор CCI и среднюю WMA, делает больше, когда индикатор CCI отскочил от зоны перепродажи, делает больше, когда индикатор CCI отскочил от зоны перекупа, и выходит из прибыли.

Стратегический принцип

Эта стратегия использует показатель CCI для определения перекупа и перепродажи на рынке. Показатель CCI позволяет эффективно идентифицировать необычные цены. Когда показатель CCI ниже 100, считается перепродажа на рынке; когда выше 100, считается перепродажа на рынке.

В то же время, стратегия также объединяет WMA с средней линией для определения направления тренда. Многосигналы эффективны только тогда, когда цена закрытия выше средней линии WMA; только тогда, когда цена закрытия ниже средней линии WMA, эффективны сигналы по пустоте. Таким образом, можно отфильтровать некоторые неопределенные торговые сигналы.

После входа, стратегия использует метод остановки для контроля риска. Существует три варианта остановки: остановка фиксированной стратегии, остановка ценового колебания и остановка ATR. Когда цена снижается до линии остановки, остановка остановки выходит; когда цена поднимается до линии остановки, остановка выходит.

Анализ преимуществ

Эта стратегия имеет следующие преимущества:

  1. Используя индикатор CCI, можно вовремя выявить возможности перепродажи.
  2. Вместе с тем, чтобы избежать торговли в противоположном направлении.
  3. Существует множество вариантов погашения убытков, которые могут быть скорректированы в зависимости от рынка.
  4. Стратегические сигналы просты, понятны и легко реализуемы.

Анализ рисков

Также существуют следующие риски:

  1. Показатели CCI легко поддаются ложному сигналу и не могут быть полностью избежены.
  2. Неправильный способ сдерживания может привести к чрезмерному сдерживанию.
  3. Невозможность распознавать тенденции приводит к чрезмерному количеству ненужных сделок в условиях кризиса.
  4. Невозможно определить, как будет развиваться рынок в целом, и можно сделать обратную операцию.

Основные способы оптимизации рисков, описанных выше, включают:

  1. В сочетании с другими индикаторами фильтрует сигналы индикатора CCI.
  2. Оптимизируйте местоположение остановочных потерь на основе обратной измерения.
  3. Повышение индексов оценки тенденций, чтобы избежать колебаний.
  4. Оценить уровни поддержки и давления и определить направление действия.

Направление оптимизации

Эта стратегия может быть оптимизирована в следующих аспектах:

  1. Оптимизация параметров показателя CC: корректировка параметров цикла показателя CCI, оптимизация параметров показателя。

  2. Оптимизация методов остановки убытков: тестирование различных методов остановки убытков, выбор оптимального метода остановки убытков.

  3. Оптимизация фильтрационных показателей: добавление других показателей, таких как MACD, RSI и т. Д., Построение системы фильтрации с несколькими показателями, уменьшение ложных сигналов.

  4. Оптимизация определения тенденции: добавление таких показателей определения тенденции, как скользящая средняя, чтобы избежать обратной операции.

  5. Оптимизация автоматического остановки: создание динамического способа остановки, позволяющего стратегии автоматически останавливаться в зависимости от рыночных колебаний.

Подвести итог

Динамическая стратегия прорыва CCI в целом является очень практичной стратегией торговли короткой линией. Она использует показатели 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)