Стратегия CCI по отслеживанию импульса

Автор:Чао Чжан, Дата: 2023-10-25 17:37:39
Тэги:

img

Обзор

Эта стратегия основана на индикаторе индекса товарного канала (CCI), целью которого является длинный ход в условиях перепродажи и короткий ход в условиях перекупки. Она также дополнительно использует фильтр экспоненциальной скользящей средней (EMA) для торговли только в направлении тренда. Стратегия также обеспечивает фиксированный процент или средний истинный диапазон (ATR) на основе стоп-лосса и прибыли.

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

  1. Использование показателя CCI для определения рыночной тенденции

    • В связи с этим, по мнению CCI, не существует никаких доказательств того, что CCI не может использовать свои собственные инвестиционные возможности для реализации своих собственных инвестиций.

    • CCI выше 150 - перекупленный, ниже -100 - перепроданный

  2. Необязательно использовать фильтр EMA

    • Пройти длинный только тогда, когда цена выше EMA, и короткий, когда ниже EMA

    • Использование EMA для определения направления тренда, избегание торговли против тренда

  3. Предоставьте два типа стоп-лосса и прибыли

    • Стоп-лосс на основе фиксированного процента и получение прибыли: использовать фиксированный процент входной цены

    • Стоп-лосс и прибыль на основе ATR: Использовать мультипликатор ATR для стоп-лосса, рассчитать прибыль на основе коэффициента риска и вознаграждения

  4. Условия въезда

    • Продолжительность, когда CCI превышает -100

    • Пройдём короткий курс, когда CCI опустится ниже 150

    • Если EMA включена, вводить только тогда, когда цена находится справа от EMA

  5. Условия выхода

    • Закрытие позиции при достижении стоп-лосса или прибыли

    • Закрытие позиции при возвращении CCI в зону перекупленности/перепродажи

  6. Строение заговора

    • График показателя CCI, цветовые области кода

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

  1. Использование CCI перекуплено/перепродано для входа, классическое использование CCI

  2. Факультативная EMA обеспечивает торговлю с тенденцией, избегает переворотов

  3. Предоставьте два типа стоп-лосса/приобретения прибыли для обеспечения гибкости

  4. Закрытие по сигналу CCI вновь блокирует обратную прибыль

  5. Графические выделения ясно сигнализируют о CCI

  6. Простая и понятная логика, легко понимаемая и оптимизируемая

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

  1. CCI имеет задерживающийся эффект, может пропустить отступление или дать ложные сигналы

  2. Неправильные параметры EMA могут упустить тренды или сделать стратегию неэффективной

  3. Фиксированный процент стоп-лосса/прибыли, менее адаптивный к изменениям рынка

  4. ATR Stop Loss/Take Profit, чувствительный к ATR-периоду, должен оптимизировать

  5. Больший риск привлечения, размер позиций должен быть скорректирован

  6. Результаты варьируются в зависимости от рыночных условий, переоценка параметров

Руководство по оптимизации

  1. Оценка периодов CCI для поиска оптимальных комбинаций параметров

  2. Проверить различные периоды EMA для наилучшей оценки тенденции

  3. Корректировка стоп-лосса/прибыли для оптимального соотношения риска и вознаграждения

  4. Добавьте другие фильтры, такие как громкость, чтобы избежать ложных сигналов.

  5. Комбинировать с линией тренда/паттернами диаграммы для подтверждения паттерна

  6. Добавить правила размещения позиций, такие как фиксированный размер для управления вытяжкой

  7. Проверка на различных рыночных условиях, динамическое регулирование

Резюме

Стратегия использует классические принципы перекупленности/перепроданности CCI для входа. Фильтр EMA контролирует трендовую торговлю. Два типа стоп-лосса/приобретения прибыли обеспечивают гибкость. Плотировка четко выделяет сигналы. Простая и ясная логика, легкая для понимания и оптимизации. Дальнейшие улучшения могут быть сделаны с помощью настройки параметров, добавления фильтров, контроля рисков и т.д.


/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 1h
basePeriod: 15m
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/
// © alifer123

//@version=5
// strategy("CCI+EMA Strategy with Percentage or ATR TP/SL [Alifer]", shorttitle = "CCI_EMA_%/ATR_TP/SL", overlay=false,
//      initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.045)

length = input(14, "CCI Length")
overbought = input.int(150, step = 10, title = "Overbought")
oversold = input.int(-140, step = 10, title = "Oversold")
src = hlc3
ma = ta.sma(src, length)
cci = (src - ma) / (0.015 * ta.dev(src, length))

// EMA
useEMA = input(true, "Use EMA", tooltip = "Only enters long when price is above the EMA, only enters short when price is below the EMA")
emaLength = input(55, "EMA Length")
var float ema = na
if useEMA
    ema := ta.ema(src, emaLength)

// Take Profit and Stop Loss Method
tpSlMethod_percentage = input(true, "Percentage TP/SL", group="TP/SL Method")
tpSlMethod_atr = input(false, "ATR TP/SL", group="TP/SL Method")

// Percentage-based Take Profit and Stop Loss
tp_percentage = input.float(10.0, title="Take Profit (%)", step=0.1, group="TP/SL Method")
sl_percentage = input.float(10.0, title="Stop Loss (%)", step=0.1, group="TP/SL Method")

// ATR-based Take Profit and Stop Loss
atrLength = input(20, title="ATR Length", group="TP/SL Method")
atrMultiplier = input(4, title="ATR SL Multiplier", group="TP/SL Method")
riskRewardRatio = input(2, title="Risk Reward Ratio", group="TP/SL Method")

// Calculate TP/SL levels based on the selected method, or leave them undefined if neither method is selected
longTP = tpSlMethod_percentage ? strategy.position_avg_price * (1 + tp_percentage / 100) : na
longSL = tpSlMethod_percentage ? strategy.position_avg_price * (1 - sl_percentage / 100) : na
shortTP = tpSlMethod_percentage ? strategy.position_avg_price * (1 - tp_percentage / 100) : na
shortSL = tpSlMethod_percentage ? strategy.position_avg_price * (1 + sl_percentage / 100) : na

if tpSlMethod_atr
    longSL := strategy.position_avg_price - ta.atr(atrLength) * atrMultiplier
    longTP := ((strategy.position_avg_price - longSL) * riskRewardRatio) + strategy.position_avg_price
    shortSL := strategy.position_avg_price + ta.atr(atrLength) * atrMultiplier
    shortTP := ((strategy.position_avg_price - shortSL) * riskRewardRatio) - strategy.position_avg_price

// Enter long position when CCI crosses below oversold level and price is above EMA
longCondition = ta.crossover(cci, oversold) and (not useEMA or close > ema)
if longCondition
    strategy.entry("Buy", strategy.long)

// Enter short position when CCI crosses above overbought level and price is below EMA
shortCondition = ta.crossunder(cci, overbought) and (not useEMA or close < ema)
if shortCondition
    strategy.entry("Sell", strategy.short)

// Close long positions with Take Profit or Stop Loss
if strategy.position_size > 0
    strategy.exit("Long Exit", "Buy", limit=longTP, stop=longSL)

// Close short positions with Take Profit or Stop Loss
if strategy.position_size < 0
    strategy.exit("Short Exit", "Sell", limit=shortTP, stop=shortSL)

// Close positions when CCI crosses back above oversold level in long positions or below overbought level in short positions
if ta.crossover(cci, overbought)
    strategy.close("Buy")
if ta.crossunder(cci, oversold)
    strategy.close("Sell")

// Plotting
color_c = cci > overbought ? color.red : (cci < oversold ? color.green : color.white)
plot(cci, "CCI", color=color_c)
hline(0, "Middle Band", color=color.new(#787B86, 50))
obband = hline(overbought, "OB Band", color=color.new(#78867a, 50))
osband = hline(oversold, "OS Band", color=color.new(#867878, 50))
fill(obband, osband, color=color.new(#787B86, 90))


Больше