Strategi ini menggabungkan dua indikator teknis, MACD dan RSI, menggunakan sinyal crossover MACD dan sinyal overbought/oversold RSI untuk menentukan waktu perdagangan. Sementara itu, strategi ini juga memperkenalkan Weighted Moving Average (WMA) sebagai penilaian tambahan untuk meningkatkan keandalan strategi. Strategi ini berjalan dalam jangka waktu 1 jam, membuka posisi panjang ketika MACD membentuk salib emas dan RSI di atas 50, dan membuka posisi pendek ketika MACD membentuk salib kematian dan RSI di bawah 50. Pada saat yang sama, ia menutup posisi panjang ketika RSI di atas 70 dan menutup posisi pendek ketika RSI di bawah 30. Selain itu, strategi menetapkan beberapa variabel untuk jangka waktu untuk menilai perubahan tren pada skala waktu yang berbeda.
Inti dari strategi ini adalah penggunaan gabungan dari dua indikator teknis, MACD dan RSI. MACD terdiri dari perbedaan antara garis cepat (rata-rata bergerak jangka pendek) dan garis lambat (rata-rata bergerak jangka panjang), yang dapat mencerminkan perubahan tren pasar. Ketika garis cepat melintasi di atas garis lambat, itu membentuk salib emas, menunjukkan tren naik; sebaliknya, itu membentuk salib kematian, menunjukkan tren menurun. RSI adalah indikator yang mengukur keadaan pasar yang terlalu banyak dibeli dan terlalu banyak dijual. Ketika RSI di atas 70, itu menunjukkan bahwa pasar terlalu banyak dibeli dan dapat menghadapi risiko pullback; ketika RSI di bawah 30, itu menunjukkan bahwa pasar terlalu banyak dijual dan dapat membawa peluang rebound.
Strategi ini menggabungkan MACD dan RSI, menggunakan penilaian tren MACD dan penilaian overbought / oversold RSI untuk lebih akurat memahami waktu perdagangan. Pada saat yang sama, strategi ini juga memperkenalkan Weighted Moving Average (WMA) sebagai penilaian tambahan. WMA lebih menekankan pada harga terbaru dibandingkan dengan rata-rata bergerak biasa, dan dapat lebih sensitif mencerminkan perubahan harga.
Selain itu, strategi menetapkan variabel untuk beberapa kerangka waktu (seperti 15 menit, 30 menit, 1 jam, 2 jam, dll) untuk menilai perubahan tren pada skala waktu yang berbeda.
Strategi ini menggabungkan dua indikator teknis yang efektif, MACD dan RSI, sementara memperkenalkan WMA sebagai penilaian tambahan untuk membuat keputusan perdagangan pada jangka waktu 1 jam. Logika strategi jelas, mudah dimengerti dan diimplementasikan, dan dapat lebih memahami tren pasar dan kondisi overbought / oversold, dengan kelayakan tertentu. Namun, strategi ini juga memiliki beberapa keterbatasan dan risiko, seperti lag, jangka waktu tunggal, kurangnya kontrol risiko, dll. Di masa depan, strategi dapat ditingkatkan dalam hal memperkenalkan lebih banyak indikator, jangka waktu berkelanjutan, memperkuat kontrol risiko, pengoptimalan parameter, dll, untuk meningkatkan ketahanan dan profitabilitasnya. Secara keseluruhan, strategi ini memberikan cara berpikir untuk perdagangan kuantitatif, tetapi masih perlu dioptimalkan dan disempurnakan dalam praktek.
/*backtest start: 2024-05-01 00:00:00 end: 2024-05-31 23:59:59 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Improved MACD and RSI Trading Strategy", overlay=true, initial_capital=10000, commission_type=strategy.commission.percent, commission_value=0.01, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // MACD 設置 fast_length = input(12, title="MACD Fast Length") slow_length = input(26, title="MACD Slow Length") signal_smoothing = input(9, title="MACD Signal Smoothing") // RSI 設置 input_rsi_length = input.int(14, title="RSI Length") input_rsi_source = input(close, "RSI Source") RSI = ta.rsi(input_rsi_source, input_rsi_length) // 計算MACD和信號線 [macdLine, signalLine, _] = ta.macd(close, fast_length, slow_length, signal_smoothing) // 自然交易理論:利用MACD和RSI的結合 ma(source, length, type) => switch type "SMA" => ta.sma(source, length) "EMA" => ta.ema(source, length) "SMMA (RMA)" => ta.rma(source, length) "WMA" => ta.wma(source, length) "VWMA" => ta.vwma(source, length) maTypeInput = input.string("SMA", title="Moving Average Type", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings") maLengthInput = input.int(14, title="Moving Average Length", group="MA Settings") macdMA = ma(macdLine, maLengthInput, maTypeInput) // 設置交易信號 longCondition = ta.crossover(macdLine, signalLine) and macdLine > macdMA and RSI < 70 shortCondition = ta.crossunder(macdLine, signalLine) and macdLine < macdMA and RSI > 30 // 定義時間框架 tf_15m = ta.change(RSI, 15) > 0 ? 1 : 0 tf_30m = ta.change(RSI, 30) > 0 ? 1 : 0 tf_1h = ta.change(RSI, 60) > 0 ? 1 : 0 tf_2h = ta.change(RSI, 120) > 0 ? 1 : 0 tf_4h = ta.change(RSI, 240) > 0 ? 1 : 0 tf_6h = ta.change(RSI, 360) > 0 ? 1 : 0 tf_8h = ta.change(RSI, 480) > 0 ? 1 : 0 tf_12h = ta.change(RSI, 720) > 0 ? 1 : 0 tf_1d = ta.change(RSI, 1440) > 0 ? 1 : 0 // 設置開倉、平倉和空倉條件 if (longCondition and tf_1h and RSI > 50) strategy.entry("Long", strategy.long) if (shortCondition and tf_1h and RSI < 50) strategy.entry("Short", strategy.short) if (tf_1h and RSI > 70) strategy.close("Long") if (tf_1h and RSI < 30) strategy.close("Short") // 加入其他策略 // 定義加權平均價格 wma(source, length) => wma = 0.0 sum = 0.0 sum_wts = 0.0 for i = 0 to length - 1 wts = (length - i) * (length - i) sum := sum + source[i] * wts sum_wts := sum_wts + wts wma := sum / sum_wts wmaLength = input.int(20, title="WMA Length", group="Other Strategies") wmaValue = wma(close, wmaLength) // 設置交易信號 longWMACondition = close > wmaValue shortWMACondition = close < wmaValue if (longWMACondition and tf_1h and RSI > 50) strategy.entry("Long WMA", strategy.long) if (shortWMACondition and tf_1h and RSI < 50) strategy.entry("Short WMA", strategy.short) if (tf_1h and RSI > 70) strategy.close("Long WMA") if (tf_1h and RSI < 30) strategy.close("Short WMA") // 繪製MACD和RSI plot(macdLine, color=color.blue, title="MACD Line") plot(signalLine, color=color.red, title="Signal Line")