MACD Linier Membuka Sihir Regresi Linier dalam TradingView

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

img

Nama Strategi: Strategi MACD Linear yang didorong oleh momentum

Ringkasan: Ini adalah strategi kuantitatif yang menggunakan regresi linear untuk meramalkan harga saham digabungkan dengan penunjuk MACD. Ia memanfaatkan analisis regresi linear pada harga dan jumlah sejarah untuk meramalkan trend harga masa depan.

Prinsip Strategi:

  1. Mengira pekali regresi linear harga: Pasang garis regresi linear berdasarkan jumlah sejarah untuk meramalkan harga masa depan.
  2. Merangka harga yang diramalkan: Merangka garisan ramalan berdasarkan pekali regresi dari Langkah 1.
  3. Menghasilkan isyarat beli: Apabila harga yang diramalkan adalah antara harga buka dan tutup, dan MACD meningkat, menghasilkan isyarat beli.
  4. Menghasilkan isyarat jual: Apabila MACD jatuh dan harga di bawah harga yang diramalkan, menghasilkan isyarat jual.

Analisis Kelebihan: Strategi ini menggabungkan ramalan statistik dan penilaian penunjuk teknikal. Ia menghasilkan ramalan harga menggunakan regresi linear, mengelakkan spekulasi subjektif. Sementara itu, penunjuk MACD dapat menentukan momentum pasaran dengan berkesan dan menangkap peluang dengan tepat. Secara keseluruhan, strategi ini mempunyai tahap sistematik yang tinggi, ramalan yang tepat, dan risiko yang boleh dikawal.

Analisis Risiko:
Regresi linear hanya bergantung pada data sejarah dan boleh menghasilkan isyarat yang salah sebagai tindak balas kepada peristiwa angsa hitam seperti berita penurunan yang ketara. Juga, tetapan parameter seperti panjang tempoh regresi memberi kesan kepada prestasi strategi. Kami mencadangkan menggunakan vwma untuk meluruskan kurva harga yang diramalkan untuk mengurangkan kegelisahan kurva yang mempengaruhi strategi.

Arahan pengoptimuman:
Kami percaya strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Menggabungkan mekanisme stop loss. Potong kerugian apabila harga memecahkan garis stop loss dengan menutup kedudukan. Ini berkesan mengawal kerugian yang disebabkan oleh isyarat yang salah sesekali.
  2. Memperkenalkan model pembelajaran mesin. Mengambil model yang lebih cekap untuk meningkatkan ketepatan ramalan.
  3. Sertakan penunjuk sentimen. Sertakan indeks ketakutan untuk menentukan sentimen pasaran dan meningkatkan kadar kemenangan.
  4. Menggabungkan pelbagai kerangka masa. Pengesahan ramalan merentasi tempoh boleh membentuk strategi gabungan untuk mengatasi batasan satu kerangka masa.

Kesimpulan:
Strategi ini menghasilkan isyarat perdagangan yang sistematik dengan meramalkan harga dengan regresi linear dan menentukan entri dengan penunjuk MACD. Kelebihannya termasuk logik ramalan yang jelas, risiko yang boleh dikawal, dan ruang pengoptimuman yang luas. Kami percaya prestasi akan terus cemerlang melalui pengoptimuman dan pengulangan yang berterusan. Ia memberikan inspirasi untuk memanfaatkan model ramalan saintifik untuk menjalankan perdagangan kuantitatif dan layak penyelidikan dan aplikasi 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 lanjut