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