Strategi ini menggabungkan dua penunjuk teknikal, MACD dan RSI, menggunakan isyarat persilangan MACD dan isyarat overbought / oversold RSI untuk menentukan masa perdagangan. Sementara itu, strategi ini juga memperkenalkan Purata Bergerak Bertimbang (WMA) sebagai penilaian tambahan untuk meningkatkan kebolehpercayaan strategi. Strategi ini berjalan pada jangka masa 1 jam, membuka kedudukan panjang apabila MACD membentuk salib emas dan RSI di atas 50, dan membuka kedudukan pendek apabila MACD membentuk salib kematian dan RSI di bawah 50. Pada masa yang sama, ia menutup kedudukan panjang apabila RSI di atas 70 dan menutup kedudukan pendek apabila RSI di bawah 30. Di samping itu, strategi menetapkan beberapa pembolehubah untuk jangka masa untuk menilai perubahan trend pada skala masa yang berbeza.
Inti strategi ini adalah penggunaan gabungan dua penunjuk teknikal, MACD dan RSI. MACD terdiri daripada perbezaan antara garisan pantas (purata bergerak jangka pendek) dan garis perlahan (purata bergerak jangka panjang), yang dapat mencerminkan perubahan trend pasaran. Apabila garisan pantas melintasi di atas garis perlahan, ia membentuk salib emas, menunjukkan trend menaik; sebaliknya, ia membentuk salib kematian, menunjukkan trend menurun. RSI adalah penunjuk yang mengukur keadaan pasar yang terlalu banyak dibeli dan terlalu banyak dijual. Apabila RSI melebihi 70, ia menunjukkan bahawa pasaran terlalu banyak dibeli dan mungkin menghadapi risiko pulback; apabila RSI di bawah 30, ia menunjukkan bahawa pasaran terlalu banyak dijual dan mungkin membawa peluang pemulihan.
Strategi ini menggabungkan MACD dan RSI, menggunakan penghakiman trend MACD
Di samping itu, strategi menetapkan pembolehubah untuk pelbagai jangka masa (seperti 15 minit, 30 minit, 1 jam, 2 jam, dan lain-lain) untuk menilai perubahan trend pada skala masa yang berbeza.
Strategi ini menggabungkan dua penunjuk teknikal yang berkesan, MACD dan RSI, sambil memperkenalkan WMA sebagai penilaian tambahan untuk membuat keputusan dagangan pada jangka masa 1 jam. Logik strategi jelas, mudah difahami dan dilaksanakan, dan dapat memahami lebih baik trend pasaran dan keadaan overbought / oversold, dengan kelayakan tertentu. Walau bagaimanapun, strategi ini juga mempunyai beberapa batasan dan risiko, seperti lag, jangka masa tunggal, kekurangan kawalan risiko, dll. Pada masa akan datang, strategi ini boleh dipertingkatkan dari segi memperkenalkan lebih banyak penunjuk, jangka masa yang berterusan, memperkukuh kawalan risiko, pengoptimuman parameter, dll., untuk meningkatkan ketahanan dan keuntungan. Secara keseluruhan, strategi ini menyediakan cara berfikir untuk perdagangan kuantitatif, tetapi masih perlu dioptimumkan dan disempurnakan secara praktikal.
/*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")