Стратегия отслеживания тренда с несколькими техническими индикаторами в сочетании с прорывом облачного графика и системой стоп-лосс

RSI MA SMA EMA
Дата создания: 2024-11-28 15:13:23 Последнее изменение: 2024-11-28 15:13:23
Копировать: 0 Количество просмотров: 484
1
Подписаться
1617
Подписчики

Стратегия отслеживания тренда с несколькими техническими индикаторами в сочетании с прорывом облачного графика и системой стоп-лосс

Обзор

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

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

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

  1. Входящий сигнал образуется в результате пересечения антенны с базовой линией, при этом верхний проход образует полисигнал, а нижний - пустоту.
  2. Отношение местоположения цены к облаку (кумо) в качестве подтверждения тенденции, цены выше облака, цены ниже облака
  3. Позиционная связь 50-дневных и 200-дневных скользящих средних как условия фильтрации тенденции
  4. Окружающий RSI подтверждает слабость рынка и отфильтровывает ложные сигналы
  5. Использование верхней и нижней границ облака в качестве динамического места остановки для динамического управления риском

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

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

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

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

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

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

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

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

Исходный код стратегии
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Ichimoku Strategy with Optional RSI, MA Filters and Alerts", overlay=true)

// Input for date and time filter
startDate = input(timestamp("2020-01-01 00:00"), title="Start Date")
endDate = input(timestamp("2023-01-01 00:00"), title="End Date")

// Inputs for Ichimoku settings
tenkanPeriod = input.int(9, title="Tenkan Period")
kijunPeriod = input.int(26, title="Kijun Period")
senkouBPeriod = input.int(52, title="Senkou B Period")

// Inputs for Moving Average settings
useMAFilter = input.bool(true, title="Enable Moving Average Filter?")
ma50Period = input.int(50, title="50-day MA Period")
ma200Period = input.int(200, title="200-day MA Period")

// Inputs for RSI settings
useRSIFilter = input.bool(true, title="Enable RSI Filter?")
rsiPeriod = input.int(14, title="RSI Period")
rsiOverbought = input.int(70, title="RSI Overbought Level")
rsiOversold = input.int(30, title="RSI Oversold Level")

// Ichimoku Cloud components
tenkan = (ta.highest(high, tenkanPeriod) + ta.lowest(low, tenkanPeriod)) / 2
kijun = (ta.highest(high, kijunPeriod) + ta.lowest(low, kijunPeriod)) / 2
senkouA = ta.sma(tenkan + kijun, 2) / 2
senkouB = (ta.highest(high, senkouBPeriod) + ta.lowest(low, senkouBPeriod)) / 2
chikou = close[26]

// Moving Averages
ma50 = ta.sma(close, ma50Period)
ma200 = ta.sma(close, ma200Period)

// Weekly RSI
rsiSource = request.security(syminfo.tickerid, "W", ta.rsi(close, rsiPeriod))

// Plotting the Ichimoku Cloud components
pTenkan = plot(tenkan, color=color.blue, title="Tenkan")
pKijun = plot(kijun, color=color.red, title="Kijun")
pSenkouA = plot(senkouA, color=color.green, title="Senkou A")
pSenkouB = plot(senkouB, color=color.maroon, title="Senkou B")
plot(chikou, color=color.purple, title="Chikou")
plot(ma50, color=color.orange, title="50-day MA")
plot(ma200, color=color.yellow, title="200-day MA")

// Corrected fill function
fill(pSenkouA, pSenkouB, color=senkouA > senkouB ? color.green : color.red, transp=90)

// Debugging: Output values on the chart to see if conditions are ever met
plotshape(series=(tenkan > kijun), color=color.blue, style=shape.triangleup, title="Tenkan > Kijun")
plotshape(series=(tenkan < kijun), color=color.red, style=shape.triangledown, title="Tenkan < Kijun")
plotshape(series=(ma50 > ma200), color=color.orange, style=shape.labelup, title="MA 50 > MA 200")
plotshape(series=(ma50 < ma200), color=color.yellow, style=shape.labeldown, title="MA 50 < MA 200")

// Define the trailing stop loss using Kumo
var float trailingStopLoss = na

// Check for MA conditions (apply only if enabled)
maConditionLong = not useMAFilter or (useMAFilter and ma50 > ma200)
maConditionShort = not useMAFilter or (useMAFilter and ma50 < ma200)

// Check for Ichimoku Cloud conditions
ichimokuLongCondition = close > math.max(senkouA, senkouB)
ichimokuShortCondition = close < math.min(senkouA, senkouB)

// Check for RSI conditions (apply only if enabled)
rsiConditionLong = not useRSIFilter or (useRSIFilter and rsiSource > rsiOverbought)
rsiConditionShort = not useRSIFilter or (useRSIFilter and rsiSource < rsiOversold)

// Combine conditions for entry
longCondition = maConditionLong and tenkan > kijun and ichimokuLongCondition and rsiConditionLong
shortCondition = maConditionShort and tenkan < kijun and ichimokuShortCondition and rsiConditionShort

// Date and time filter
withinDateRange = true

// Check for Long Condition
if (longCondition and withinDateRange) 
    strategy.entry("Long", strategy.long)
    trailingStopLoss := math.min(senkouA, senkouB)
    alert("Buy Signal: Entering Long Position", alert.freq_once_per_bar_close)

// Check for Short Condition
if (shortCondition and withinDateRange) 
    strategy.entry("Short", strategy.short)
    trailingStopLoss := math.max(senkouA, senkouB)
    alert("Sell Signal: Entering Short Position", alert.freq_once_per_bar_close)

// Exit conditions
exitLongCondition = close < kijun or tenkan < kijun
exitShortCondition = close > kijun or tenkan > kijun

if (exitLongCondition and strategy.position_size > 0)
    strategy.close("Long")
    alert("Exit Signal: Closing Long Position", alert.freq_once_per_bar_close)

if (exitShortCondition and strategy.position_size < 0)
    strategy.close("Short")
    alert("Exit Signal: Closing Short Position", alert.freq_once_per_bar_close)

// Apply trailing stop loss
if (strategy.position_size > 0)
    strategy.exit("Trailing Stop Long", stop=trailingStopLoss)
else if (strategy.position_size < 0)
    strategy.exit("Trailing Stop Short", stop=trailingStopLoss)