Стратегия следования за трендом и импульсом EMA RSI


Дата создания: 2024-03-29 16:30:42 Последнее изменение: 2024-03-29 16:30:42
Копировать: 0 Количество просмотров: 612
1
Подписаться
1617
Подписчики

Стратегия следования за трендом и импульсом EMA RSI

Обзор

Bybit EMA RSI Trend Tracking and Momentum Strategy - это количественная торговая стратегия, которая сочетает в себе индексные скользящие средние (EMA) и относительно сильные индексы (RSI). Стратегия использует два различных цикла EMA для определения рыночных тенденций, а также использует индикатор RSI для подтверждения эффективности тенденций.

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

  1. Рассчитайте быструю ЭМА и медленную ЭМА с периодами 90 и 300.
  2. Рассчитайте RSI с периодом 5.
  3. Когда быстрая EMA проходит медленную EMA и RSI ниже 45, генерируется многосигнал; когда быстрая EMA проходит медленную EMA и RSI ниже 85, генерируется пустой сигнал.
  4. Различные пропорции комиссий устанавливаются в зависимости от уровня учетной записи Bybit, от 0.075% для VIP 0 до 0.035% для VIP 4.
  5. Расчетная цена включает в себя комиссионные.
  6. Стоп-цены и стоп-убытки рассчитываются в соответствии с установленным процентом стоп-убытков ((5% и 3%)).
  7. На графике изображены цена открытия позиции, линия остановки и линия остановки убытка.
  8. Открытие позиции в соответствии с торговым сигналом.

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

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

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

  1. Выбор параметров EMA и RSI может быть не применим ко всем рыночным условиям и требует оптимизации в соответствии с реальными обстоятельствами.
  2. В условиях нестабильных рынков эта стратегия может привести к частому появлению торговых сигналов, что приводит к высоким торговым издержкам.
  3. Настройки стоп-лосса могут быть слишком консервативными или радикальными, и их нужно корректировать в соответствии с личными предпочтениями в отношении риска.

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

  1. Параметры EMA и RSI оптимизируются для различных рыночных условий. Лучшее сочетание параметров можно найти с помощью обратной связи и сканирования параметров.
  2. Введение других технических показателей, таких как Brinband, MACD и т.д., для повышения точности торговых сигналов.
  3. Оптимизация параметров стоп-стоп, например, использование мобильного стоп-стопа или динамического стоп-стопа для лучшей защиты прибыли и контроля риска.
  4. Принимая во внимание такие факторы, как волатильность рынка и объемы сделок, фильтруйте торговые сигналы, чтобы уменьшить затраты на частоту торгов.

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

Bybit EMA RSI Trend Tracking and Momentum Strategy - это количественная торговая стратегия, которая сочетает в себе трендовый отслеживание и динамические показатели, благодаря совместному использованию EMA и RSI, чтобы лучше улавливать рыночные тенденции. Эта стратегия имеет встроенную функцию остановки и установки комиссий в соответствии с уровнем учетной записи Bybit, которая позволяет эффективно контролировать риск и адаптироваться к различным торговым условиям пользователей. Однако в этой стратегии все еще есть место для оптимизации, например, оптимизация параметров, введение других технических показателей, оптимизация параметров остановки и т. Д.

Исходный код стратегии
/*backtest
start: 2024-03-21 00:00:00
end: 2024-03-28 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @BryanAaron

//@version=5
strategy("Bybit EMA RSI Strategy", overlay=true)

// Input parameters
fastLength = input(90, title="Fast EMA Length")
slowLength = input(300, title="Slow EMA Length")
rsiLength = input(5, title="RSI Length")
rsiUpperThreshold = input(85, title="RSI Upper Threshold")
rsiLowerThreshold = input(45, title="RSI Lower Threshold")
takeProfitPerc = input(5, title="Take Profit %")
stopLossPerc = input(3, title="Stop Loss %")
bybitAccountLevel = input.string("VIP 0", title="Bybit Account Level", options=["VIP 0", "VIP 1", "VIP 2", "VIP 3", "VIP 4"])

// Calculate moving averages
fastMA = ta.ema(close, fastLength)
slowMA = ta.ema(close, slowLength)

// Calculate RSI
rsi = ta.rsi(close, rsiLength)

// Trading conditions
longCondition = (fastMA > slowMA) and (rsi < rsiLowerThreshold)
shortCondition = (fastMA < slowMA) and (rsi > rsiUpperThreshold)

// Set commission based on Bybit account level
commissionPerc = switch bybitAccountLevel
    "VIP 0" => 0.075
    "VIP 1" => 0.065
    "VIP 2" => 0.055
    "VIP 3" => 0.045
    "VIP 4" => 0.035
    => 0.075

// Calculate entry prices with commission
var float longEntryPrice = na
var float shortEntryPrice = na

longEntryPriceWithCommission = close * (1 + commissionPerc / 100)
shortEntryPriceWithCommission = close * (1 - commissionPerc / 100)

// Calculate take profit and stop loss prices
takeProfitPrice(entryPrice) => entryPrice * (1 + takeProfitPerc / 100)
stopLossPrice(entryPrice) => entryPrice * (1 - stopLossPerc / 100)

// Plot entry prices
plotchar(longCondition, title="Long Entry Price", char="LE", location=location.belowbar, color=color.green)
plotchar(shortCondition, title="Short Entry Price", char="SE", location=location.abovebar, color=color.red)

// Draw position on the chart
longColor = color.green
shortColor = color.red
profitColor = color.new(color.green, 80)
lossColor = color.new(color.red, 80)

plotshape(longCondition and strategy.position_size > 0, title="Long Position", text="Long", location=location.belowbar, style=shape.labelup, size=size.small, color=longColor, textcolor=color.white)
plotshape(shortCondition and strategy.position_size < 0, title="Short Position", text="Short", location=location.abovebar, style=shape.labeldown, size=size.small, color=shortColor, textcolor=color.white)

if (strategy.position_size > 0)
    line.new(bar_index, longEntryPrice, bar_index + 1, longEntryPrice, color=longColor, width=2)
    
    longProfitLine = line.new(bar_index, takeProfitPrice(longEntryPrice), bar_index + 1, takeProfitPrice(longEntryPrice), color=profitColor, width=1)
    longLossLine = line.new(bar_index, stopLossPrice(longEntryPrice), bar_index + 1, stopLossPrice(longEntryPrice), color=lossColor, width=1)
    

else if (strategy.position_size < 0)
    line.new(bar_index, shortEntryPrice, bar_index + 1, shortEntryPrice, color=shortColor, width=2)
    
    shortProfitLine = line.new(bar_index, stopLossPrice(shortEntryPrice), bar_index + 1, stopLossPrice(shortEntryPrice), color=profitColor, width=1)
    shortLossLine = line.new(bar_index, takeProfitPrice(shortEntryPrice), bar_index + 1, takeProfitPrice(shortEntryPrice), color=lossColor, width=1)
    


// Entry
if (longCondition)
    strategy.entry("Long", strategy.long)
    longEntryPrice := longEntryPriceWithCommission
else if (shortCondition)
    strategy.entry("Short", strategy.short)
    shortEntryPrice := shortEntryPriceWithCommission