В процессе загрузки ресурсов... загрузка...

Стратегия обратного выкупа CCI + MA

Автор:Чао Чжан, Дата: 2024-05-24 17:45:49
Тэги:CCIМ.А.

img

Обзор

CCI + MA Crossover Pullback Buy Strategy является количественной торговой стратегией, которая сочетает в себе индекс товарного канала (CCI) и двойные движущиеся средние кроссоверные сигналы. Стратегия покупает, когда цена возвращается к быстрому движущемуся среднему знаку, а CCI указывает на условия перепродажи после бычьего кроссовера. Она продает, когда цена поднимается к быстрому движущемуся среднему знаку, а CCI указывает на условия перепродажи после медвежьего кроссовера. Объединяя CCI и двойные движущиеся средние кроссоверные сигналы, эта стратегия может лучше улавливать трендовые возможности, достигая лучших точек входа и выхода с помощью обратных покупок и ралли продаж, тем самым улучшая соотношение риск-вознаграждение.

Логика стратегии

  1. Укажите показатель CCI на основе параметров CCI, определенных пользователем (источник, период, тип скользящей средней, пороги перекупки/перепродажи).
  2. Определить условия перекупки/перепродажи CCI. Установите цвет фона на красный, когда CCI превышает порог перекупки, и зеленый, когда он ниже порога перепродажи.
  3. Вычислять быстрые и медленные скользящие средние на основе параметров, определенных пользователем (источник, период, тип скользящей средней).
  4. Определить бычьи и медвежие перекрестки. Нарисуйте бычий сигнал, когда быстрый MA пересекает медленный MA, и медвежий сигнал, когда быстрый MA пересекает медленный MA.
  5. Принимать торговые решения:
    • Длинный вход: когда быстрый MA выше медленного MA, предыдущая свеча закрывается ниже быстрой MA, текущая свеча является быстрой, а CCI ниже порога перепродажи, купить, чтобы открыть длинную позицию.
    • Краткий вход: когда быстрый MA находится ниже медленного MA, предыдущая свеча закрывается выше быстрой MA, текущая свеча является медвежьей, а CCI выше порога перекупленности, продать, чтобы открыть короткую позицию.

Преимущества стратегии

  1. Следование тенденции: двойные перекрестные сигналы скользящей средней помогают определить направление тренда и лучше соответствовать тенденциям рынка.
  2. Вход в контртенденцию: ожидание снижения цен для покупки или роста цен для продажи после подтверждения тренда может привести к лучшим ценам входа и улучшению соотношения риск-прибыль.
  3. Уменьшение ложных сигналов: объединение CCI с движущимися средними перекрестными сигналами может эффективно уменьшить ложные сигналы, генерируемые одним показателем.
  4. Гибкие параметры: пользователи могут гибко устанавливать параметры CCI и скользящей средней в соответствии со своими предпочтениями для оптимизации эффективности стратегии.

Стратегические риски

  1. Риск нестабильного рынка: на нестабильном рынке частые бычьи и медвежие перекрестки могут привести к большему количеству проигрышных сделок.
  2. Риск параметров: ненадлежащие настройки параметров могут привести к плохой эффективности стратегии.
  3. Риск тренда: когда рыночные тенденции меняются, стратегия может затягивать выход и страдать от больших снижений.

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

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

Резюме

CCI + MA Crossover Pullback Buy Strategy - это количественная стратегия торговли, которая сочетает в себе преимущества следования тренду и вхождения в контртенд. Захватив направление тренда с помощью двойных скользящих средних и выявляя зоны перекупленности / перепроданности с помощью индикатора CCI, ожидая снижения цен и ралли для достижения лучших входных цен, стратегия может потенциально улучшить рентабельность и соотношение риск-вознаграждение в определенной степени. Однако стратегия также сталкивается с такими рисками, как оптимизация параметров, неуравновешенные рынки и внезапные изменения тренда. Для повышения надежности и рентабельности стратегии необходимы дальнейшая оптимизация и улучшения.


/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tradedots

//@version=5
strategy("CCI + MA Crossover Pullback Buy Strategy [TradeDots]", overlay=true)


ma(source, length, type) =>
  type == "SMA" ? ta.sma(source[1], length) :
  type == "EMA" ? ta.ema(source[1], length) :
  type == "SMMA (RMA)" ? ta.rma(source[1], length) :
  type == "WMA" ? ta.wma(source[1], length) :
  type == "VWMA" ? ta.vwma(source[1], length) :
  na

//CCI settings
cci_coloring  = input.bool(true, "CCI Background Color", group = "Commodity channel index")
cci_length    = input.int(20,"CCI Length", group = "Commodity channel index")
cci_ma_type   = input.string("EMA","CCI MA Type", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group = "Commodity channel index")
cci_soruce    = input(hlc3, "CCI Source", group = "Commodity channel index")
cci_threshold = input.int(100, "CCI Threshold", group = "Commodity channel index")
cci_ma = ma(cci_soruce, cci_length, cci_ma_type)
cci = (cci_soruce - cci_ma) / (0.015 * ta.dev(cci_soruce, cci_length))

bgcolor(cci > cci_threshold and cci_coloring ? color.new(#f9396a, 80) : cci < -cci_threshold and cci_coloring? color.new(#9cff87, 80) : na, title = "CCI Overbought / Oversold")

//ma crossover settings
input_crossover_labels = input.bool(true, "Show Crossover Labels", group="Moving average")

fastma_type   = input.string("EMA","", inline="fastma", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Moving average")
fastma_source = input(close, "", inline="fastma", group="Moving average")
fastma_length = input.int(10, "", inline="fastma", minval=1,group="Moving average")
fastma_color  = input(#e2fdff, "", inline="fastma",group="Moving average")
fastma = ma(fastma_source, fastma_length, fastma_type)
fastmaPlot = plot(fastma, color = #b7e4c7, linewidth = 2, title = "Fast MA")

slowma_type   = input.string("EMA","", inline="slowma", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Moving average")
slowma_source = input(close, "", inline="slowma", group="Moving average")
slowma_length = input.int(30, "", inline="slowma", minval=1,group="Moving average")
slowma_color  = input(#e2fdff, "", inline="slowma",group="Moving average")
slowma = ma(slowma_source, slowma_length, slowma_type)
slowmaPlot = plot(slowma, color = #2d6a4f, linewidth = 2, title = "Slow MA")

bullish_crossover = ta.crossover(fastma, slowma)
bearish_crossover = ta.crossunder(fastma, slowma)

// // strategy
// if bullish_crossover and input_crossover_labels
//     line.new(bar_index, close, bar_index, close * 1.01, extend = extend.both, color = color.new(#9cff87, 30), style = line.style_dotted, width = 3)
//     label.new(bar_index,low, "Bullish Crossover", style = label.style_label_up, color = #9cff87)

// else if bearish_crossover and input_crossover_labels
//     line.new(bar_index, close, bar_index, close * 1.01, extend = extend.both, color = color.new(#f9396a, 30), style = line.style_dotted, width = 3)
//     label.new(bar_index, high, "Bearish Crossover", style = label.style_label_down, color = #f9396a, textcolor = color.white)

if fastma > slowma and close[1] < fastma and close > open and cci < -cci_threshold
    strategy.entry("Long", strategy.long)
    // if strategy.opentrades == 0 or strategy.opentrades.size(strategy.opentrades -1) < 0
    //     label.new(bar_index,low, "🟢 Long", style = label.style_label_up, color = #9cff87)

if fastma < slowma and close[1] > fastma and close < open and cci > cci_threshold
    strategy.entry("Short", strategy.short)
    // if strategy.opentrades == 0 or strategy.opentrades.size(strategy.opentrades -1) > 0
    //     label.new(bar_index, high, "🔴 Short", style = label.style_label_down, color = #f9396a, textcolor = color.white)

Связанные

Больше