Sumber dimuat naik... memuat...

Strategi Dagangan Sinergis Multi-Indikator dengan Bollinger Bands, Fibonacci, MACD dan RSI

Penulis:ChaoZhang, Tarikh: 2024-12-12 17:20:26
Tag:BBMACDRSIFIBSMAEMASMMAWMAVWMA

img

Ringkasan

Strategi ini adalah sistem perdagangan yang komprehensif yang menggabungkan beberapa penunjuk teknikal termasuk Bollinger Bands, retracement Fibonacci, MACD, dan RSI. Strategi ini menangkap peluang perdagangan di bawah keadaan pasaran yang berbeza melalui penyelarasan pelbagai penunjuk dan menggunakan kaedah mengambil keuntungan maksimum untuk kawalan risiko. Sistem ini mengamalkan reka bentuk modular dengan parameter penunjuk yang fleksibel, menawarkan kesesuaian dan kepraktisan yang kuat.

Prinsip Strategi

Strategi ini menggunakan empat penunjuk teknikal utama untuk menjana isyarat perdagangan:

  1. Isyarat Bollinger Bands: Harga pecah di bawah band bawah menghasilkan isyarat panjang, pecah di atas band atas menghasilkan isyarat pendek
  2. Isyarat Fibonacci: Harga dalam julat 0-23.6% menghasilkan isyarat panjang, dalam julat 61.8-100% menghasilkan isyarat pendek
  3. Isyarat MACD: Garis MACD melintasi di atas garis isyarat menghasilkan isyarat panjang, melintasi di bawah menghasilkan isyarat pendek
  4. Isyarat RSI: RSI di bawah tahap oversold menghasilkan isyarat panjang, di atas tahap overbought menghasilkan isyarat pendek Perdagangan bermula apabila mana-mana penunjuk menghasilkan isyarat. Strategi ini juga menggunakan kaedah keuntungan maksimum mengambil keuntungan, secara automatik menutup kedudukan apabila mencapai sasaran keuntungan atau paras stop-loss yang telah ditetapkan.

Kelebihan Strategi

  1. Sinergi pelbagai penunjuk: Meningkatkan kebolehpercayaan isyarat melalui integrasi pelbagai penunjuk teknikal
  2. Kemudahan yang tinggi: Parameter penunjuk boleh diselaraskan untuk persekitaran pasaran yang berbeza
  3. Pengendalian risiko yang komprehensif: Menggabungkan keuntungan maksimum mengambil keuntungan dengan stop loss tetap
  4. Kemudahan penyesuaian yang baik: Strategi boleh menyesuaikan diri dengan kitaran pasaran yang berbeza dan keadaan turun naik
  5. Kecekapan pelaksanaan yang tinggi: Struktur kod yang jelas dengan beban pengkomputeran sederhana

Risiko Strategi

  1. Tumpukan isyarat: Pelbagai penunjuk yang menghasilkan isyarat secara serentak boleh membawa kepada overtrading
  2. Sensitiviti parameter: Gabungan parameter yang berbeza boleh menghasilkan hasil yang berbeza dengan ketara
  3. Keupayaan penyesuaian pasaran: Mungkin kurang dalam keadaan pasaran tertentu
  4. Kesan slippage: Perdagangan frekuensi tinggi mungkin dipengaruhi oleh slippage
  5. Pengurusan wang: Memerlukan saiz kedudukan yang betul untuk kawalan risiko

Pengoptimuman Strategi

  1. Berat isyarat: Tambah berat kepada penunjuk yang berbeza untuk meningkatkan kualiti isyarat
  2. Pengiktirafan persekitaran pasaran: Tambah modul pengiktirafan persekitaran pasaran untuk menyesuaikan strategi
  3. Parameter dinamik: Memperkenalkan mekanisme penyesuaian parameter adaptif
  4. Kos dagangan: Mengoptimumkan kekerapan dagangan untuk mengurangkan kos
  5. Penapisan isyarat: Tambah keadaan penapisan tambahan untuk mengurangkan isyarat palsu

Ringkasan

Strategi ini mencapai kecekapan perdagangan sambil mengekalkan kestabilan melalui penyelarasan pelbagai penunjuk. Walaupun terdapat risiko tertentu, ia mempunyai nilai praktikal melalui kawalan risiko yang betul dan pengoptimuman berterusan.


/*backtest
start: 2024-12-04 00:00:00
end: 2024-12-11 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Demo GPT Bollinger, Fibonacci, MACD & RSI with Max Profit Exit", overlay=true)

// === User Inputs for Bollinger Bands ===
length_bb = input.int(20, minval=1, title="Bollinger Bands Length")
maType_bb = input.string("SMA", title="Bollinger Bands MA Type", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
src_bb = input(close, title="Bollinger Bands Source")
mult_bb = input.float(2.0, minval=0.001, maxval=50, title="Bollinger Bands StdDev")
offset_bb = input.int(0, title="Bollinger Bands Offset", minval=-500, maxval=500)

// === User Inputs for Fibonacci Levels ===
lookback_fib = input.int(50, minval=1, title="Fibonacci Lookback Period")

// === User Inputs for MACD ===
macd_fast = input.int(12, minval=1, title="MACD Fast Length")
macd_slow = input.int(26, minval=1, title="MACD Slow Length")
macd_signal = input.int(9, minval=1, title="MACD Signal Length")

// === User Inputs for RSI ===
rsi_length = input.int(14, title="RSI Length")
rsi_overbought = input.int(70, title="RSI Overbought Level")
rsi_oversold = input.int(30, title="RSI Oversold Level")

// === Start and End Date Inputs ===
start_date = input(timestamp("2023-01-01 00:00:00"), title="Start Date")
end_date = input(timestamp("2069-12-31 23:59:59"), title="End Date")

// === Moving Average Function ===
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)

// === Bollinger Bands Calculation ===
basis_bb = ma(src_bb, length_bb, maType_bb)
dev_bb = mult_bb * ta.stdev(src_bb, length_bb)
upper_bb = basis_bb + dev_bb
lower_bb = basis_bb - dev_bb

// === Fibonacci Levels Calculation ===
highest_price = ta.highest(high, lookback_fib)
lowest_price = ta.lowest(low, lookback_fib)

fib_0 = lowest_price
fib_23 = lowest_price + 0.236 * (highest_price - lowest_price)
fib_38 = lowest_price + 0.382 * (highest_price - lowest_price)
fib_50 = lowest_price + 0.5 * (highest_price - lowest_price)
fib_61 = lowest_price + 0.618 * (highest_price - lowest_price)
fib_100 = highest_price

// === MACD Calculation ===
[macd_line, signal_line, _] = ta.macd(close, macd_fast, macd_slow, macd_signal)

// === RSI Calculation ===
rsi = ta.rsi(close, rsi_length)

// === Plotting for Reference ===
plot(basis_bb, "Bollinger Basis", color=color.blue, offset=offset_bb)
p1_bb = plot(upper_bb, "Bollinger Upper", color=color.red, offset=offset_bb)
p2_bb = plot(lower_bb, "Bollinger Lower", color=color.green, offset=offset_bb)
fill(p1_bb, p2_bb, title="Bollinger Bands Background", color=color.rgb(33, 150, 243, 95))

plot(fib_0, "Fib 0%", color=color.gray)
plot(fib_23, "Fib 23.6%", color=color.yellow)
plot(fib_38, "Fib 38.2%", color=color.orange)
plot(fib_50, "Fib 50%", color=color.blue)
plot(fib_61, "Fib 61.8%", color=color.green)
plot(fib_100, "Fib 100%", color=color.red)

hline(0, "MACD Zero Line", color=color.gray)
plot(macd_line, "MACD Line", color=color.blue)
plot(signal_line, "Signal Line", color=color.orange)

hline(rsi_overbought, "RSI Overbought", color=color.red)
hline(rsi_oversold, "RSI Oversold", color=color.green)
plot(rsi, "RSI", color=color.blue)

// === Combined Trading Logic ===
// Bollinger Bands Signals
long_bb = ta.crossover(close, lower_bb)
short_bb = ta.crossunder(close, upper_bb)

// Fibonacci Signals
long_fib = close <= fib_23 and close >= fib_0
short_fib = close >= fib_61 and close <= fib_100

// MACD Signals
long_macd = ta.crossover(macd_line, signal_line)
short_macd = ta.crossunder(macd_line, signal_line)

// RSI Signals
long_rsi = rsi < rsi_oversold
short_rsi = rsi > rsi_overbought

// Combined Long and Short Conditions
long_condition = (long_bb or long_fib or long_macd or long_rsi) 
short_condition = (short_bb or short_fib or short_macd or short_rsi) 
// === Max Profit Exit Logic ===
// Define the maximum profit exit percentage
take_profit_percentage = input.float(5.0, title="Take Profit (%)", minval=0.1, maxval=100) / 100
stop_loss_percentage = input.float(2.0, title="Stop Loss (%)", minval=0.1, maxval=100) / 100

// Track the highest price during the trade
var float max_profit_price = na
if (strategy.opentrades > 0)
    max_profit_price := na(max_profit_price) ? strategy.opentrades.entry_price(0) : math.max(max_profit_price, high)

// Calculate the take profit and stop loss levels based on the max profit price
take_profit_level = max_profit_price * (1 + take_profit_percentage)
stop_loss_level = max_profit_price * (1 - stop_loss_percentage)

// Exit the trade if the take profit or stop loss level is hit
if (strategy.opentrades > 0)
    if (close >= take_profit_level)
        strategy.exit("Take Profit", from_entry="Long", limit=take_profit_level)
    if (close <= stop_loss_level)
        strategy.exit("Stop Loss", from_entry="Long", stop=stop_loss_level)

if (strategy.opentrades > 0)
    if (close <= take_profit_level)
        strategy.exit("Take Profit", from_entry="Short", limit=take_profit_level)
    if (close >= stop_loss_level)
        strategy.exit("Stop Loss", from_entry="Short", stop=stop_loss_level)

// === Execute Trades ===
if (long_condition)
    strategy.entry("Long", strategy.long, when=not na(long_condition))

if (short_condition)
    strategy.entry("Short", strategy.short, when=not na(short_condition))


Berkaitan

Lebih lanjut