Linear MACD Mengungkap Keajaiban Regresi Linier di TradingView


Tanggal Pembuatan: 2023-12-15 10:22:50 Akhirnya memodifikasi: 2023-12-15 10:22:50
menyalin: 0 Jumlah klik: 928
1
fokus pada
1621
Pengikut

Linear MACD Mengungkap Keajaiban Regresi Linier di TradingView

Nama kebijakan: Kebijakan MACD linier yang didorong oleh momentum

Ringkasan: Ini adalah strategi kuantitatif yang menggunakan regresi linier untuk memprediksi harga saham dan dikombinasikan dengan indikator MACD. Ini menggunakan regresi linier untuk menganalisis harga historis dan volume transaksi untuk memprediksi tren harga di masa depan.

Prinsip-prinsip Strategi:

  1. Menghitung koefisien regresi linier dari harga: Mengadaptasi garis regresi linier berdasarkan volume transaksi historis untuk memprediksi harga di masa depan.
  2. Menggambar harga perkiraan: Menggambar garis perkiraan harga berdasarkan faktor regresi pada langkah 1.
  3. Membuat sinyal beli: Membuat sinyal beli ketika harga yang diprediksi berada di antara harga buka dan harga tutup dan MACD naik.
  4. Membuat sinyal jual: Membuat sinyal jual ketika MACD turun dan harga lebih rendah dari harga yang diprediksi.

Analisis Keunggulan: Ini adalah strategi yang menggabungkan prediksi statistik dan penilaian indikator teknis. Ini menggunakan kemunduran linier untuk membuat prediksi harga, menghindari spekulasi subjektif. Pada saat yang sama, indikator MACD dapat secara efektif menilai arah pasar dan menangkap peluang dengan tepat.

Analisis risiko: Regresi linier hanya bergantung pada data historis, tidak responsif terhadap kejadian mendadak seperti berita laba-rugi besar, dan dapat menghasilkan sinyal yang salah. Selain itu, pengaturan parameter seperti panjang siklus regresi, dan sebagainya, juga dapat mempengaruhi kinerja strategi. Kami merekomendasikan penggunaan harga prediksi ratavwma, untuk mengurangi dampak pergerakan kurva pada strategi.

Cara Mengoptimalkan: Menurut kami, strategi ini dapat dioptimalkan dalam beberapa hal:

  1. Masukkan mekanisme Stop Loss. Keluar dari posisi saat harga menembus batas Stop Loss, untuk secara efektif mengendalikan kerugian yang disebabkan oleh sinyal kesalahan individu.
  2. Memperkenalkan model pembelajaran mesin. Menggunakan model yang lebih efisien untuk memprediksi tren harga, meningkatkan akurasi strategi.
  3. Gabungan dengan indikator emosi. Memperkenalkan indikator emosi seperti indeks ketakutan pasar, menilai suasana pasar untuk membeli dan menjual, meningkatkan peluang kemenangan strategi.
  4. Kombinasi beberapa frame waktu. Prediksi periode waktu yang berbeda dapat saling diverifikasi, membentuk strategi kombinasi, dan mengurangi keterbatasan dari satu frame waktu.

Kesimpulannya: Strategi ini dengan memprediksi harga regresi linier dengan penilaian MACD, membentuk strategi perdagangan kuantitatif yang sistematis. Ini memiliki keunggulan seperti logika prediksi yang jelas, risiko yang dapat dikendalikan, ruang optimasi yang luas. Kami percaya bahwa dengan optimasi dan iterasi yang berkelanjutan, kinerjanya akan menjadi lebih baik dan lebih baik.

Kode Sumber Strategi
/*backtest
start: 2023-12-07 00:00:00
end: 2023-12-14 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © stocktechbot

//@version=5
strategy("Linear On MACD", overlay=true, margin_long=100, margin_short=100)



fast_length = input(title="Fast Length", defval=12)
slow_length = input(title="Slow Length", defval=26)
tolerance = input.string(title="Risk tolerance", defval = "LOW", options=["LOW", "HIGH"])

chng = 0
obv = ta.cum(math.sign(ta.change(close)) * volume)
if close < close[1] and (open < close)
    chng := 1
else if close > close[1]
    chng := 1
else
    chng := -1
obvalt = ta.cum(math.sign(chng) * volume)
//src = input(title="Source", defval=close)
src = obvalt
signal_length = input.int(title="Signal Smoothing",  minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title="Oscillator MA Type",  defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])

// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
//hline(0, "Zero Line", color=color.new(#787B86, 50))
//plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below)))
//plot(macd, title="MACD", color=col_macd)
//plot(signal, title="Signal", color=col_signal)
[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)

//Linear Regression

vol = volume

// Function to calculate linear regression
linregs(y, x, len) =>
    ybar = math.sum(y, len)/len
    xbar = math.sum(x, len)/len
    b = math.sum((x - xbar)*(y - ybar),len)/math.sum((x - xbar)*(x - xbar),len)
    a = ybar - b*xbar
    [a, b]

// Historical stock price data
price = close

// Length of linear regression
len = input(defval = 21, title = 'Lookback')

// Calculate linear regression for stock price based on volume
[a, b] = linregs(price, vol, len)

// Predicted stock price based on volume
predicted_price = a + b*vol

// Check if predicted price is between open and close
is_between = open < predicted_price and predicted_price < close


// Plot predicted stock price
plot(predicted_price, color=color.rgb(218, 27, 132), linewidth=2, title="Predicted Stock Price")
plot(ta.vwma(predicted_price,len), color=color.rgb(199, 43, 64), linewidth=2, title="Predicted Stock Price")

//BUY Signal
lincrossunder = close > predicted_price
macdrise = ta.rising(macd,2)
//macdvollong = ta.crossover(macd, signal)
//macdlong = ta.crossover(macdLine, signalLine)
macdvollong = macd > signal
macdlong = macdLine > signalLine
longCondition=false
if macdlong and macdvollong and is_between and ta.rising(predicted_price,1)
    longCondition := true

if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)
//Sell Signal
lincrossover = close < predicted_price
macdfall = ta.falling(macd,1)
macdsell = macd < signal
shortCondition = false
risklevel = predicted_price
if (tolerance == "HIGH")
    risklevel := ta.vwma(predicted_price,len)


if macdfall and macdsell and (macdLine < signalLine) and (close < risklevel)
    shortCondition := true


if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)