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

Автор:Чао Чжан, Дата: 2024-03-29 16:30:42
Тэги:

img

Обзор

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

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

  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. Внедрение других технических индикаторов, таких как полосы Боллинджера, MACD и т.д., для повышения точности торговых сигналов.
  3. Оптимизировать настройки сбора прибыли и остановки убытков, например, с использованием остановок с отставанием или динамических методов остановки убытков для лучшей защиты прибыли и управления рисками.
  4. Учитывайте такие факторы, как волатильность рынка и объем торговли, чтобы отфильтровать торговые сигналы и снизить затраты, связанные с частой торговлей.

Резюме

Стратегия Bybit EMA RSI Trend-Following and Momentum является количественной торговой стратегией, которая сочетает в себе индикаторы тренда и импульса. Используя EMA и RSI вместе, она может эффективно отслеживать рыночные тенденции. Стратегия включает в себя встроенные функции take profit и stop loss и устанавливает процентные ставки комиссии на основе уровня счета Bybit, эффективно управляя рисками и адаптируясь к различным условиям торговли пользователей. Однако в стратегии все еще есть место для оптимизации, такой как оптимизация параметров, внедрение других технических индикаторов и оптимизация настроек take profit и stop loss. При постоянной оптимизации и улучшении ожидается, что стратегия достигнет лучших результатов в фактической торговле.


/*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

Больше