MACD Linear Membuka Sihir Regresi Linear dalam TradingView

Penulis:ChaoZhang, Tanggal: 2023-12-15 10:22:50
Tag:

img

Nama Strategi: Momentum-driven Linear MACD Strategy

Ini adalah strategi kuantitatif yang menggunakan regresi linier untuk memprediksi harga saham dikombinasikan dengan indikator MACD. Ini memanfaatkan analisis regresi linier pada harga dan volume historis untuk memprediksi tren harga di masa depan.

Prinsip Strategi:

  1. Menghitung koefisien regresi linier harga: Pasang garis regresi linier berdasarkan volume historis untuk memprediksi harga masa depan.
  2. Menggambar harga yang diprediksi: Menggambar garis prediksi berdasarkan koefisien regresi dari Langkah 1.
  3. Menghasilkan sinyal beli: Ketika harga yang diprediksi berada di antara harga buka dan tutup, dan MACD naik, menghasilkan sinyal beli.
  4. Menghasilkan sinyal jual: Ketika MACD turun dan harga di bawah harga yang diprediksi, menghasilkan sinyal jual.

Analisis Keuntungan: Strategi ini menggabungkan prediksi statistik dan penilaian indikator teknis. Ini menghasilkan prediksi harga menggunakan regresi linier, menghindari spekulasi subjektif. Sementara itu, indikator MACD dapat secara efektif menentukan momentum pasar dan menangkap peluang dengan akurat. Secara keseluruhan, strategi ini memiliki tingkat sistematis yang tinggi, prediksi yang akurat, dan risiko yang dapat dikendalikan.

Analisis Risiko:
Regresi linier hanya bergantung pada data historis dan dapat menghasilkan sinyal yang salah sebagai tanggapan terhadap peristiwa angsa hitam seperti berita bearish yang signifikan. Juga, pengaturan parameter seperti panjang periode regresi mempengaruhi kinerja strategi. Kami menyarankan menggunakan vwma untuk meratakan kurva harga yang diprediksi untuk mengurangi kegelisahan kurva yang mempengaruhi strategi.

Arahan Optimasi:
Kami percaya strategi ini dapat dioptimalkan dalam aspek berikut:

  1. Mengintegrasikan mekanisme stop loss. Potong kerugian ketika harga menembus garis stop loss dengan menutup posisi. Ini secara efektif mengendalikan kerugian yang disebabkan oleh sinyal yang tidak benar sesekali.
  2. Memperkenalkan model pembelajaran mesin Mengadopsi model yang lebih efisien untuk meningkatkan akurasi prediksi.
  3. Sertakan indikator sentimen. Sertakan indeks ketakutan untuk menentukan sentimen pasar dan meningkatkan tingkat kemenangan.
  4. Menggabungkan beberapa kerangka waktu. Validasi prediksi di seluruh periode dapat membentuk strategi gabungan untuk mengatasi keterbatasan kerangka waktu tunggal.

Kesimpulan:
Strategi ini menghasilkan sinyal perdagangan sistematis dengan memprediksi harga dengan regresi linier dan menentukan entri dengan indikator MACD. Keuntungannya termasuk logika prediktif yang jelas, risiko yang dapat dikontrol, dan ruang optimasi yang luas. Kami percaya kinerjanya akan terus unggul melalui optimasi dan iterasi yang berkelanjutan. Ini memberikan inspirasi untuk memanfaatkan model prediksi ilmiah untuk melakukan perdagangan kuantitatif dan layak penelitian dan aplikasi lebih lanjut.


/*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)


Lebih banyak