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:
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:
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)