Эта стратегия основана на индикаторе индекса товарного канала (CCI), целью которого является длинный ход в условиях перепродажи и короткий ход в условиях перекупки. Она также дополнительно использует фильтр экспоненциальной скользящей средней (EMA) для торговли только в направлении тренда. Стратегия также обеспечивает фиксированный процент или средний истинный диапазон (ATR) на основе стоп-лосса и прибыли.
Использование показателя CCI для определения рыночной тенденции
В связи с этим, по мнению CCI, не существует никаких доказательств того, что CCI не может использовать свои собственные инвестиционные возможности для реализации своих собственных инвестиций.
CCI выше 150 - перекупленный, ниже -100 - перепроданный
Необязательно использовать фильтр EMA
Пройти длинный только тогда, когда цена выше EMA, и короткий, когда ниже EMA
Использование EMA для определения направления тренда, избегание торговли против тренда
Предоставьте два типа стоп-лосса и прибыли
Стоп-лосс на основе фиксированного процента и получение прибыли: использовать фиксированный процент входной цены
Стоп-лосс и прибыль на основе ATR: Использовать мультипликатор ATR для стоп-лосса, рассчитать прибыль на основе коэффициента риска и вознаграждения
Условия въезда
Продолжительность, когда CCI превышает -100
Пройдём короткий курс, когда CCI опустится ниже 150
Если EMA включена, вводить только тогда, когда цена находится справа от EMA
Условия выхода
Закрытие позиции при достижении стоп-лосса или прибыли
Закрытие позиции при возвращении CCI в зону перекупленности/перепродажи
Строение заговора
Использование CCI перекуплено/перепродано для входа, классическое использование CCI
Факультативная EMA обеспечивает торговлю с тенденцией, избегает переворотов
Предоставьте два типа стоп-лосса/приобретения прибыли для обеспечения гибкости
Закрытие по сигналу CCI вновь блокирует обратную прибыль
Графические выделения ясно сигнализируют о CCI
Простая и понятная логика, легко понимаемая и оптимизируемая
CCI имеет задерживающийся эффект, может пропустить отступление или дать ложные сигналы
Неправильные параметры EMA могут упустить тренды или сделать стратегию неэффективной
Фиксированный процент стоп-лосса/прибыли, менее адаптивный к изменениям рынка
ATR Stop Loss/Take Profit, чувствительный к ATR-периоду, должен оптимизировать
Больший риск привлечения, размер позиций должен быть скорректирован
Результаты варьируются в зависимости от рыночных условий, переоценка параметров
Оценка периодов CCI для поиска оптимальных комбинаций параметров
Проверить различные периоды EMA для наилучшей оценки тенденции
Корректировка стоп-лосса/прибыли для оптимального соотношения риска и вознаграждения
Добавьте другие фильтры, такие как громкость, чтобы избежать ложных сигналов.
Комбинировать с линией тренда/паттернами диаграммы для подтверждения паттерна
Добавить правила размещения позиций, такие как фиксированный размер для управления вытяжкой
Проверка на различных рыночных условиях, динамическое регулирование
Стратегия использует классические принципы перекупленности/перепроданности 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))