Стратегия представляет собой систему торговли с отслеживанием тенденций в сочетании с несколькими техническими индикаторами, с использованием перекрестных сигналов MACD, RSI, RVI, EMA и других индикаторов для определения тенденций рынка и подтверждения оборота, а также с использованием отслеживания стоп-лосса для управления рисками. Стратегия работает в определенном ценовом диапазоне и повышает точность и надежность торговли путем комбинированного суждения о нескольких сигналах.
Стратегия использует многоуровневый механизм проверки сигнала, в основном состоящий из следующих ключевых компонентов: во-первых, использование 20-циклических и 200-циклических индексных движущихся средних ((EMA) для определения общей рыночной тенденции; во-вторых, использование перекрестков MACD-индикатора ((12,26,9) для захвата точек перехода в тренде; в-третьих, использование относительно сильных показателей ((RSI) и относительно волатильных показателей ((RVI)) для подтверждения состояния перекупа и перепродажи на рынке; в-третьих, заключение сделки путем транзакционного индикатора.
Эта стратегия использует комбинацию из нескольких технических показателей для создания относительно целостной торговой системы. Несмотря на определенные ограничения, стратегия имеет хорошую практическую ценность с разумной оптимизацией параметров и управлением рисками. В будущем можно повысить стабильность и прибыльность стратегии путем введения большего количества адаптивных механизмов и средств контроля риска.
/*backtest
start: 2024-10-27 00:00:00
end: 2024-11-26 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("MACD/RSI/RVI/EMA20-200/Volume BTC Auto Trading Bot", overlay=true, margin_long=100, margin_short=100)
// Parámetros de EMA
ema20Length = input(20, title="EMA 20 Length")
ema200Length = input(200, title="EMA 200 Length")
// Parámetros de MACD
macdFastLength = input(12, title="MACD Fast Length")
macdSlowLength = input(26, title="MACD Slow Length")
macdSignalSmoothing = input(9, title="MACD Signal Smoothing")
// Parámetros de RSI y RVI
rsiLength = input(14, title="RSI Length")
rviLength = input(14, title="RVI Length")
// Volumen mínimo para operar
minVolume = input(100, title="Min Volume to Enter Trade")
// Rango de precios de BTC entre 60k y 80k
minPrice = 60000
maxPrice = 80000
// Rango de precios BTC
inPriceRange = close >= minPrice and close <= maxPrice
// Cálculo de las EMAs
ema20 = ta.ema(close, ema20Length)
ema200 = ta.ema(close, ema200Length)
plot(ema20, color=color.green, title="EMA 20")
plot(ema200, color=color.red, title="EMA 200")
// Cálculo del MACD
[macdLine, signalLine, _] = ta.macd(close, macdFastLength, macdSlowLength, macdSignalSmoothing)
macdHist = macdLine - signalLine
plot(macdLine, color=color.blue, title="MACD Line")
plot(signalLine, color=color.orange, title="Signal Line")
hline(0, "MACD Zero Line", color=color.gray)
plot(macdHist, style=plot.style_histogram, color=(macdHist >= 0 ? color.green : color.red), title="MACD Histogram")
// Cálculo del RSI
rsi = ta.rsi(close, rsiLength)
hline(70, "RSI Overbought", color=color.red)
hline(30, "RSI Oversold", color=color.green)
plot(rsi, color=color.purple, title="RSI")
// Cálculo del RVI
numerator = (close - open) + 2 * (close[1] - open[1]) + 2 * (close[2] - open[2]) + (close[3] - open[3])
denominator = (high - low) + 2 * (high[1] - low[1]) + 2 * (high[2] - low[2]) + (high[3] - low[3])
rvi = ta.sma(numerator / denominator, rviLength)
plot(rvi, color=color.blue, title="RVI")
// Volumen
volumeCondition = volume > minVolume
// Condiciones de compra
bullishCondition = ta.crossover(macdLine, signalLine) and rsi < 70 and rvi > 0 and close > ema20 and close > ema200 and inPriceRange and volumeCondition
// Condiciones de venta
bearishCondition = ta.crossunder(macdLine, signalLine) and rsi > 30 and rvi < 0 and close < ema20 and close < ema200 and inPriceRange and volumeCondition
// Configuración del trailing stop loss
trail_stop = input(true, title="Enable Trailing Stop")
trail_offset = input.float(0.5, title="Trailing Stop Offset (%)", step=0.1)
// Funciones para la gestión del Trailing Stop Loss
if (bullishCondition)
strategy.entry("Buy", strategy.long)
var float highestPrice = na
highestPrice := na(highestPrice) ? high : math.max(high, highestPrice)
strategy.exit("Trailing Stop", "Buy", stop=highestPrice * (1 - trail_offset / 100))
if (bearishCondition)
strategy.entry("Sell", strategy.short)
var float lowestPrice = na
lowestPrice := na(lowestPrice) ? low : math.min(low, lowestPrice)
strategy.exit("Trailing Stop", "Sell", stop=lowestPrice * (1 + trail_offset / 100))
plotshape(bullishCondition, title="Buy Signal", location=location.belowbar, color=color.new(color.green, 0), style=shape.labelup, text="BUY")
plotshape(bearishCondition, title="Sell Signal", location=location.abovebar, color=color.new(color.red, 0), style=shape.labeldown, text="SELL")