Strategi ini adalah sistem dagangan trend-mengikuti yang menggabungkan beberapa penunjuk teknikal, menggunakan isyarat silang dari MACD, RSI, RVI, EMA, dan pengesahan jumlah untuk mengenal pasti trend pasaran, dengan trailing stop untuk pengurusan risiko. Strategi ini beroperasi dalam julat harga tertentu dan menggunakan pelbagai kombinasi isyarat untuk meningkatkan ketepatan dan kebolehpercayaan perdagangan.
Strategi ini menggunakan mekanisme pengesahan isyarat berlapis-lapis dengan beberapa komponen utama: Pertama, ia menggunakan Purata Bergerak Eksponensial (EMA) 20 tempoh dan 200 tempoh untuk menentukan trend pasaran secara keseluruhan; kedua, ia menggunakan penyambungan penunjuk MACD (12,26,9) untuk menangkap titik perubahan trend; ketiga, ia menggunakan Indeks Kekuatan Relatif (RSI) dan Indeks Volatiliti Relatif (RVI) untuk mengesahkan keadaan overbought / oversold; akhirnya, ia mengesahkan perdagangan melalui penunjuk jumlah. Syarat beli memerlukan kepuasan serentak: MACD golden cross, RSI di bawah 70, RVI di atas 0, harga di atas kedua-dua EMA, dan keperluan jumlah minimum. Syarat jual adalah sebaliknya. Strategi ini juga menggabungkan mekanisme pengangkutan untuk melindungi keuntungan melalui penyesuaian stop-loss dinamik.
Strategi ini membina sistem perdagangan yang agak lengkap melalui gabungan beberapa penunjuk teknikal. Walaupun ia mempunyai batasan tertentu, strategi ini mempunyai nilai praktikal yang baik melalui pengoptimuman parameter yang munasabah dan pengurusan risiko. Penambahbaikan masa depan boleh dibuat dengan memperkenalkan mekanisme yang lebih adaptif dan langkah-langkah kawalan risiko untuk meningkatkan kestabilan dan keuntungan.
/*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")