Адаптивная интеллектуальная стратегия торговли с двойным кроссовером индикаторов

RSI CCI EMA TIMEFRAME THRESHOLD
Дата создания: 2025-02-19 10:56:59 Последнее изменение: 2025-02-19 10:56:59
Копировать: 2 Количество просмотров: 435
1
Подписаться
1617
Подписчики

Адаптивная интеллектуальная стратегия торговли с двойным кроссовером индикаторов

Обзор

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

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

Основная логика стратегии включает в себя следующие аспекты:

  1. Временная адаптация: параметры RSI и CCI динамически корректируются в зависимости от различных временных периодов (от 1 минуты до 4 часов).
  2. Подтверждение двойных индикаторов: для фильтрации торговых сигналов используется комбинация RSI (относительно сильный показатель) и CCI (прогрессивный показатель). Торговый сигнал появляется, когда RSI и CCI одновременно отвечают определенным условиям.
  3. Проверка непрерывности сигнала: для обеспечения стабильности сигнала устанавливается минимальное время пребывания (stayTimeFrames).
  4. Динамический стоп-стоп: стоп-стоп-стоп-стоп, динамически настроенный на основе уровня RSI и CCI на момент входа.
  5. Подтверждение тренда: использование 200-циклической EMA в качестве ориентира.

Стратегические преимущества

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

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

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

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

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

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

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

Исходный код стратегии
/*backtest
start: 2025-01-19 00:00:00
end: 2025-02-18 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("RSI & CCI Strategy with Alerts", overlay=true)

// Detect current chart timeframe
tf = timeframe.period

// Define settings for different timeframes
rsiLength = tf == "1" ? 30 : tf == "5" ? 30 : tf == "15" ? 30 : tf == "30" ? 30 : 30  // Default
cciLength = tf == "1" ? 15 : tf == "5" ? 20 : tf == "15" ? 20 : tf == "30" ? 20 : 20  // Default
cciBuyThreshold = tf == "1" ? -100 : tf == "5" ? -100 : tf == "15" ? -100 : tf == "30" ? -100 : -100
cciSellThreshold = tf == "1" ? 100 : tf == "5" ? 100 : tf == "15" ? 100 : tf == "30" ? 100 : 100  // Default
stayTimeFrames = tf == "1" ? 1 : tf == "5" ? 1 : tf == "15" ? 1 : tf == "30" ? 1 : tf == "240" ? 1 : 2  // Default
stayTimeFramesOver =tf == "1" ? 1 : tf == "5" ? 2 : tf == "15" ? 2 : tf == "30" ? 3 : 2 // Default

// Calculate RSI & CCI
rsi = ta.rsi(close, rsiLength)
rsiOver = ta.rsi(close, 14)
cci = ta.cci(close, cciLength)

// EMA 50
ema200 = ta.ema(close, 200)
plot(ema200, color=color.rgb(255, 255, 255), linewidth=2, title="EMA 200")

// CCI candle threshold tracking
var int cciEntryTimeLong = na
var int cciEntryTimeShort = na

// Store entry time when CCI enters the zone
if (cci < cciBuyThreshold)
    if na(cciEntryTimeLong)
        cciEntryTimeLong := bar_index
else
    cciEntryTimeLong := na

if (cci > cciSellThreshold)
    if na(cciEntryTimeShort)
        cciEntryTimeShort := bar_index
else
    cciEntryTimeShort := na

// Confirming CCI has stayed in the threshold for required bars
cciStayedBelowNeg100 = not na(cciEntryTimeLong) and (bar_index - cciEntryTimeLong >= stayTimeFrames) and rsi >= 53
cciStayedAbove100 = not na(cciEntryTimeShort) and (bar_index - cciEntryTimeShort >= stayTimeFrames) and rsi <= 47


// CCI & RSI candle threshold tracking for Buy Over and Sell Over signals
var int buyOverEntryTime = na
var int sellOverEntryTime = na

// Track entry time when RSI and CCI conditions are met
if (rsiOver <= 31 and cci <= -120)
    if na(buyOverEntryTime)
        buyOverEntryTime := bar_index
else
    buyOverEntryTime := na

if (rsiOver >= 69 and cci >= 120)
    if na(sellOverEntryTime)
        sellOverEntryTime := bar_index
else
    sellOverEntryTime := na

// Confirm that conditions are met for the required stayTimeFrames
buyOverCondition = not na(buyOverEntryTime) and (bar_index - buyOverEntryTime >= stayTimeFramesOver)
sellOverCondition = not na(sellOverEntryTime) and (bar_index - sellOverEntryTime <= stayTimeFramesOver)

//Buy and sell for over bought or sell 
conditionOverBuy = buyOverCondition
conditionOverSell = sellOverCondition

// Buy and sell conditions
buyCondition = cciStayedBelowNeg100
sellCondition = cciStayedAbove100

// // Track open positions
var bool isLongOpen = false
var bool isShortOpen = false

// // Strategy logic for backtesting
// if (buyCondition and not isLongOpen)
//     strategy.entry("Long", strategy.long)
//     isLongOpen := true
//     isShortOpen := false

// if (sellCondition and not isShortOpen)
//     strategy.entry("Short", strategy.short)
//     isShortOpen := true
//     isLongOpen := false

// // Close positions based on EMA 50
// if (isLongOpen and exitLongCondition)
//     strategy.close("Long")
//     isLongOpen := false

// if (isShortOpen and exitShortCondition)
//     strategy.close("Short")
//     isShortOpen := false



// Track RSI at position entry
var float entryRSILong = na
var float entryRSIShort = na

// Track CCI at position entry
var float entryCCILong = na
var float entryCCIShort = na

if (buyOverCondition and not isLongOpen)
    strategy.entry("Long", strategy.long)
    entryRSILong := rsi  // Store RSI at entry
    entryCCILong := cci
    isLongOpen := true
    isShortOpen := false

if (sellOverCondition and not isShortOpen)
    strategy.entry("Short", strategy.short)
    entryRSIShort := rsi  // Store RSI at entry
    entryCCIShort := cci  // Stpre CCI at entry
    isShortOpen := true
    isLongOpen := false

exitLongRSICondition = isLongOpen and not na(entryRSILong) and rsi >= (entryRSILong + 12)  or rsi <= (entryRSILong -8)
exitShortRSICondition = isShortOpen and not na(entryRSIShort) and rsi <= (entryRSIShort - 12)  or rsi >= (entryRSIShort +8)

exitLongCCICondition = isLongOpen and not na(entryCCILong) and cci <= (entryCCILong -100)
exitShortCCICondition = isShortOpen and not na(entryCCIShort) and cci >= (entryCCIShort +100)

// Close positions based on EMA 50 or RSI change
if (isLongOpen and (exitLongRSICondition) or (exitLongCCICondition))
    strategy.close("Long")
    isLongOpen := false
    entryRSILong := na
    entryCCILong := na
    isLongOpen := false

if (isShortOpen and (exitShortRSICondition) or (exitShortCCICondition))
    strategy.close("Short")
    isShortOpen := false
    entryRSIShort := na
    entryCCIShort := na
    isShortOpen := false



// Plot buy and sell signals
plotshape(buyCondition, style=shape.labelup, location=location.belowbar, color=color.green, size=size.large, title="Buy Signal", text="BUY")
plotshape(sellCondition, style=shape.labeldown, location=location.abovebar, color=color.red, size=size.large, title="Sell Signal", text="SELL")

//Plot buy and sell OverBought
plotshape(conditionOverBuy, style=shape.labelup, location=location.belowbar, color=color.rgb(255, 238, 0), size=size.large, title="OverBuy Signal", text="Over Sell")
plotshape(conditionOverSell, style=shape.labeldown, location=location.abovebar, color=color.rgb(186, 40, 223), size=size.large, title="OverSell Signal", text="Over Buy")

// Alerts
alertcondition(buyCondition, title="Buy Alert", message="Buy Signal Triggered")
alertcondition(sellCondition, title="Sell Alert", message="Sell Signal Triggered")