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

Многотехнический индикатор тренда после стратегии с Ichimoku Cloud Breakout и системой стоп-лосса

Автор:Чао Чжан, Дата: 2024-11-28 15:13:23
Тэги:РСИМ.А.SMAЕМА

img

Обзор

Эта стратегия представляет собой комплексную торговую систему, которая сочетает в себе несколько технических индикаторов, в основном основанных на индикаторе Ichimoku Cloud для принятия торговых решений.

Принципы стратегии

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

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

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

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

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

  1. Многоиндикаторная фильтрация может привести к упущению некоторых потенциальных хороших возможностей
  2. Может генерировать частые ложные сигналы прорыва на различных рынках
  3. У индикатора Ichimoku Cloud есть врожденное отставание, которое может повлиять на время входа.
  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)


Связанные

Больше