Strategi Perdagangan Cerdas Sinyal Ganda MACD dan Regresi Linier

MACD LRS WMA TEMA EMA SMA
Tanggal Pembuatan: 2024-12-11 15:46:20 Akhirnya memodifikasi: 2024-12-11 15:46:20
menyalin: 0 Jumlah klik: 361
1
fokus pada
1617
Pengikut

Strategi Perdagangan Cerdas Sinyal Ganda MACD dan Regresi Linier

Ringkasan

Strategi ini adalah sistem perdagangan cerdas yang menggabungkan MACD (Moving Average Convergence Spread Index) dan LRS (Linear Regression Slip Index). Strategi ini mengoptimalkan perhitungan MACD dengan kombinasi berbagai metode moving average, dan memperkenalkan analisis regresi linier untuk meningkatkan keandalan sinyal perdagangan. Strategi ini memungkinkan pedagang untuk memilih secara fleksibel menggunakan indikator tunggal atau kombinasi indikator ganda untuk menghasilkan sinyal perdagangan, dan dilengkapi dengan mekanisme stop loss untuk mengendalikan risiko.

Prinsip Strategi

Inti dari strategi ini adalah untuk menangkap tren pasar melalui MACD yang dioptimalkan dan indikator regresi linier. Bagian MACD menggunakan kombinasi dari empat metode moving average, SMA, EMA, WMA, dan TEMA, meningkatkan sensitivitas terhadap tren harga. Bagian regresi linier menilai arah dan intensitas tren dengan menghitung kemiringan dan lokasi garis regresi.

Keunggulan Strategis

  1. Fleksibilitas dalam kombinasi indikator: Anda dapat memilih untuk menggunakan kombinasi indikator tunggal atau ganda sesuai dengan kondisi pasar
  2. Perhitungan MACD yang disempurnakan: meningkatkan akurasi pengidentifikasian tren melalui berbagai metode moving average
  3. Konfirmasi tren obyektif: menggunakan regresi linier untuk memberikan penilaian tren yang didukung oleh statistik matematika
  4. Manajemen risiko yang lebih baik: Sistem Stop Loss Terintegrasi
  5. Parameter yang dapat disesuaikan: parameter kunci dapat dioptimalkan sesuai dengan karakteristik pasar yang berbeda

Risiko Strategis

  1. Sensitivitas parameter: mungkin perlu sering menyesuaikan parameter dalam berbagai kondisi pasar
  2. Penundaan sinyal: Ada keterlambatan dalam indikator kelas rata-rata bergerak
  3. Pasar bergoyang tidak berlaku: di pasar bergoyang horizontal dapat menghasilkan sinyal palsu
  4. Biaya peluang dari verifikasi ganda: verifikasi ganda yang ketat dapat melewatkan beberapa peluang perdagangan yang baik

Arah optimasi strategi

  1. Meningkatkan identifikasi kondisi pasar: memperkenalkan indikator volatilitas untuk membedakan pasar tren dan bergolak
  2. Pengaturan parameter dinamis: parameter MACD dan regresi linier yang secara otomatis disesuaikan dengan kondisi pasar
  3. Optimalkan Stop Loss: memperkenalkan Stop Loss Dinamis, yang secara otomatis menyesuaikan dengan fluktuasi pasar
  4. Meningkatkan analisis volume transaksi: menggabungkan indikator volume transaksi untuk meningkatkan kredibilitas sinyal
  5. Memperkenalkan analisis siklus waktu: mempertimbangkan konfirmasi siklus waktu ganda untuk meningkatkan akurasi transaksi

Meringkaskan

Strategi ini menciptakan sistem perdagangan yang memiliki fleksibilitas dan keandalan dengan menggabungkan versi yang lebih baik dari indikator klasik dan metode statistik. Desain modularnya memungkinkan pedagang untuk menyesuaikan parameter strategi dan mekanisme konfirmasi sinyal secara fleksibel sesuai dengan kondisi pasar yang berbeda. Dengan optimasi dan perbaikan berkelanjutan, strategi ini diharapkan untuk mempertahankan kinerja yang stabil di berbagai lingkungan pasar.

Kode Sumber Strategi
/*backtest
start: 2024-11-10 00:00:00
end: 2024-12-09 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy('SIMPLIFIED MACD & LRS Backtest by NHBProd', overlay=false)

// Function to calculate TEMA (Triple Exponential Moving Average)
tema(src, length) =>
    ema1 = ta.ema(src, length)
    ema2 = ta.ema(ema1, length)
    ema3 = ta.ema(ema2, length)
    3 * (ema1 - ema2) + ema3

// MACD Calculation Function
macdfx(src, fast_length, slow_length, signal_length, method) =>
    fast_ma = method == 'SMA' ? ta.sma(src, fast_length) :
              method == 'EMA' ? ta.ema(src, fast_length) :
              method == 'WMA' ? ta.wma(src, fast_length) :
              tema(src, fast_length)
    slow_ma = method == 'SMA' ? ta.sma(src, slow_length) :
              method == 'EMA' ? ta.ema(src, slow_length) :
              method == 'WMA' ? ta.wma(src, slow_length) :
              tema(src, slow_length)
    macd = fast_ma - slow_ma
    signal = method == 'SMA' ? ta.sma(macd, signal_length) :
             method == 'EMA' ? ta.ema(macd, signal_length) :
             method == 'WMA' ? ta.wma(macd, signal_length) :
             tema(macd, signal_length)
    hist = macd - signal
    [macd, signal, hist]

// MACD Inputs
useMACD = input(true, title="Use MACD for Signals")
src = input(close, title="MACD Source")
fastp = input(12, title="MACD Fast Length")
slowp = input(26, title="MACD Slow Length")
signalp = input(9, title="MACD Signal Length")
macdMethod = input.string('EMA', title='MACD Method', options=['EMA', 'SMA', 'WMA', 'TEMA'])

// MACD Calculation
[macd, signal, hist] = macdfx(src, fastp, slowp, signalp, macdMethod)

// Linear Regression Inputs
useLR = input(true, title="Use Linear Regression for Signals")
lrLength = input(24, title="Linear Regression Length")
lrSource = input(close, title="Linear Regression Source") 
lrSignalSelector = input.string('Rising Linear', title='Signal Selector', options=['Price Above Linear', 'Rising Linear', 'Both'])

// Linear Regression Calculation
linReg = ta.linreg(lrSource, lrLength, 0)
linRegPrev = ta.linreg(lrSource, lrLength, 1)
slope = linReg - linRegPrev

// Linear Regression Buy Signal
lrBuySignal = lrSignalSelector == 'Price Above Linear' ? (close > linReg) :
              lrSignalSelector == 'Rising Linear' ? (slope > 0 and slope > slope[1]) :
              lrSignalSelector == 'Both' ? (close > linReg and slope > 0) : false

// MACD Crossover Signals
macdCrossover = ta.crossover(macd, signal)

// Buy Signals based on user choices
macdSignal = useMACD and macdCrossover
lrSignal = useLR and lrBuySignal

// Buy condition: Use AND condition if both are selected, OR condition if only one is selected
buySignal = (useMACD and useLR) ? (macdSignal and lrSignal) : (macdSignal or lrSignal)

// Plot MACD
hline(0, title="Zero Line", color=color.gray)
plot(macd, color=color.blue, title="MACD Line", linewidth=2)
plot(signal, color=color.orange, title="Signal Line", linewidth=2)
plot(hist, color=hist >= 0 ? color.green : color.red, style=plot.style_columns, title="MACD Histogram")

// Plot Linear Regression Line and Slope
plot(slope, color=slope > 0 ? color.purple : color.red, title="Slope", linewidth=2)
plot(linReg,title="lingreg")
// Signal Plot for Visualization
plotshape(buySignal, style=shape.labelup, location=location.bottom, color=color.new(color.green, 0), title="Buy Signal", text="Buy")

// Sell Signals for Exiting Long Positions
macdCrossunder = ta.crossunder(macd, signal)  // MACD Crossunder for Sell Signal
lrSellSignal = lrSignalSelector == 'Price Above Linear' ? (close < linReg) :
               lrSignalSelector == 'Rising Linear' ? (slope < 0 and slope < slope[1]) :
               lrSignalSelector == 'Both' ? (close < linReg and slope < 0) : false

// User Input for Exit Signals: Select indicators to use for exiting trades
useMACDSell = input(true, title="Use MACD for Exit Signals")
useLRSell = input(true, title="Use Linear Regression for Exit Signals")

// Sell condition: Use AND condition if both are selected to trigger a sell at the same time, OR condition if only one is selected
sellSignal = (useMACDSell and useLRSell) ? (macdCrossunder and lrSellSignal) : 
             (useMACDSell ? macdCrossunder : false) or 
             (useLRSell ? lrSellSignal : false)

// Plot Sell Signals for Visualization (for exits, not short trades)
plotshape(sellSignal, style=shape.labeldown, location=location.top, color=color.new(color.red, 0), title="Sell Signal", text="Sell")

// Alerts
alertcondition(buySignal, title="Buy Signal", message="Buy signal detected!")
alertcondition(sellSignal, title="Sell Signal", message="Sell signal detected!")

// Take Profit and Stop Loss Inputs
takeProfit = input.float(10.0, title="Take Profit (%)")  // Take Profit in percentage
stopLoss = input.float(0.10, title="Stop Loss (%)")        // Stop Loss in percentage

// Backtest Date Range
startDate = input(timestamp("2024-01-01 00:00"), title="Start Date")
endDate = input(timestamp("2025-12-12 00:00"), title="End Date")
inBacktestPeriod = true
// Entry Rules (Only Long Entries)
if (buySignal and inBacktestPeriod)
    strategy.entry("Buy", strategy.long)

// Exit Rules (Only for Long Positions)
strategy.exit("Exit Buy", from_entry="Buy", limit=close * (1 + takeProfit / 100), stop=close * (1 - stopLoss / 100))

// Exit Long Position Based on Sell Signals
if (sellSignal and inBacktestPeriod)
    strategy.close("Buy", comment="Exit Signal")