La stratégie combine deux indicateurs techniques, le MACD et le RSI, pour déterminer le moment de la transaction en utilisant le signal de croisement du MACD et le signal de surachat et de survente du RSI. En même temps, la stratégie introduit une moyenne mobile pondérée (WMA) comme jugement auxiliaire pour améliorer la fiabilité de la stratégie. La stratégie fonctionne dans un délai d’une heure, lorsque le MACD se présente avec une fourchette dorée et que le RSI est supérieur à 50 pour ouvrir une position en plus, et lorsque le MACD se présente avec une fourchette morte et que le RSI est inférieur à 50 pour ouvrir une position vide.
Le MACD est composé de différences entre les lignes rapides (la moyenne mobile à court terme) et les lignes lentes (la moyenne mobile à long terme), qui reflètent les changements de tendance du marché. Lorsque la ligne rapide traverse la ligne lente, une fourche dorée est formée, indiquant une tendance à la hausse, tandis que la fourche morte est formée, indiquant une tendance à la baisse.
La stratégie combine le MACD et le RSI pour mieux saisir le moment de la transaction en utilisant le jugement de tendance du MACD et le jugement de surachat et de survente du RSI. En outre, la stratégie introduit une moyenne mobile pondérée (WMA) comme jugement auxiliaire, qui accorde plus d’importance aux prix à court terme que la moyenne mobile ordinaire et reflète plus sensiblement les changements de prix.
En outre, la stratégie définit des variables de plusieurs périodes de temps (par exemple, 15 minutes, 30 minutes, 1 heure, 2 heures, etc.) pour juger de la variation des tendances sur différentes échelles de temps. Cette méthode d’analyse de plusieurs périodes de temps peut aider la stratégie à mieux comprendre les tendances du marché et à améliorer l’exactitude des décisions.
La stratégie utilise deux indicateurs techniques efficaces, le MACD et le RSI, pour prendre des décisions de négociation dans un délai d’une heure. La logique de la stratégie est claire, facile à comprendre et à mettre en œuvre.
/*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")