Long-Short Linear Regression Crossover Strategy adalah strategi analisis teknis yang menggunakan model regresi linier untuk memprediksi pergerakan harga saham di masa depan. Prinsip dasar dari strategi ini adalah: pergerakan harga saham sering mengikuti tren linier tertentu, dan dengan menghitung regresi linier harga, harga masa depan dapat diprediksi. Strategi ini berjalan panjang ketika harga yang diprediksi melintasi di atas harga saat ini, dan keluar dari posisi ketika melintasi di bawah.
Strategi ini pertama-tama menghitung regresi linier harga saham selama periode waktu tertentu. Regresi linier sesuai dengan garis lurus menggunakan metode paling kecil kuadrat, yang mewakili tren perubahan harga dari waktu ke waktu. Strategi kemudian memetakan garis harga yang diprediksi dan harga saat ini pada grafik.
Strategi ini mendefinisikan dua sinyal:
Ketika sinyal panjang muncul, strategi membuka posisi panjang; ketika sinyal pendek muncul, itu menutup posisi.
Langkah-langkah utama dari strategi ini adalah sebagai berikut:
Strategi Long-Short Linear Regression Crossover memiliki keuntungan berikut:
Meskipun memiliki banyak keuntungan, Strategi Crossover Regresi Linear Pendek-panjang juga memiliki beberapa risiko:
Strategi Long-Short Linear Regression Crossover menghasilkan sinyal perdagangan berdasarkan perbandingan harga yang diprediksi dari regresi linier dan harga saat ini. Logika strategi sederhana dan jelas, dan dapat menangkap tren linier harga dan berlaku untuk berbagai kondisi pasar. Pada saat yang sama, strategi mudah diterapkan dan dioptimalkan, dan parameter dapat disesuaikan secara fleksibel, dikombinasikan dengan indikator lain, modul pengendalian risiko dapat ditambahkan, dll., untuk terus meningkatkan kinerja strategi. Namun, strategi ini juga memiliki risiko seperti pengenalan tren yang tidak akurat, pengaturan parameter yang tidak tepat, dan kelebihan data historis, sehingga perlu berhati-hati dalam penerapan praktis. Secara keseluruhan, Strategi Regression Linear Long-Short Crossover adalah strategi perdagangan kuantitatif yang sederhana dan efektif yang layak dieksplorasi dan dioptimalkan lebih lanjut.
/*backtest start: 2024-02-25 00:00:00 end: 2024-03-26 00:00:00 period: 3h basePeriod: 15m 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 Cross", overlay=true, margin_long=100, margin_short=0) //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 = 'Strategy Length') linearlen=input(defval = 9, title = 'Linear Lookback') [a, b] = linregs(price, vol, len) // Calculate linear regression for stock price based on volume //eps = request.earnings(syminfo.ticker, earnings.actual) //MA For double confirmation out = ta.sma(close, 200) outf = ta.sma(close, 50) outn = ta.sma(close, 90) outt = ta.sma(close, 21) outthree = ta.sma(close, 9) // 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 //MACD //[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9) // Plot predicted stock price plot(predicted_price, color=color.rgb(65, 59, 150), linewidth=2, title="Predicted Price") plot(ta.sma(predicted_price,linearlen), color=color.rgb(199, 43, 64), linewidth=2, title="MA Predicted Price") //offset = input.int(title="Offset", defval=0, minval=-500, maxval=500) plot(out, color=color.blue, title="MA200") [macdLine, signalLine, histLine] = ta.macd(predicted_price, 12, 26, 9) //BUY Signal longCondition=false mafentry =ta.sma(close, 50) > ta.sma(close, 90) //matentry = ta.sma(close, 21) > ta.sma(close, 50) matwohun = close > ta.sma(close, 200) twohunraise = ta.rising(out, 2) twentyrise = ta.rising(outt, 2) macdrise = ta.rising(macdLine,2) macdlong = ta.crossover(predicted_price, ta.wma(predicted_price,linearlen)) and (signalLine < macdLine) if macdlong and macdrise longCondition := true if (longCondition) strategy.entry("My Long Entry Id", strategy.long) //Sell Signal lastEntryPrice = strategy.opentrades.entry_price(strategy.opentrades - 1) daysSinceEntry = len daysSinceEntry := int((time - strategy.opentrades.entry_time(strategy.opentrades - 1)) / (24 * 60 * 60 * 1000)) percentageChange = (close - lastEntryPrice) / lastEntryPrice * 100 //trailChange = (ta.highest(close,daysSinceEntry) - close) / close * 100 //label.new(bar_index, high, color=color.black, textcolor=color.white,text=str.tostring(int(trailChange))) shortCondition=false mafexit =ta.sma(close, 50) < ta.sma(close, 90) matexit = ta.sma(close, 21) < ta.sma(close, 50) matwohund = close < ta.sma(close, 200) twohunfall = ta.falling(out, 3) twentyfall = ta.falling(outt, 2) shortmafall = ta.falling(outthree, 1) macdfall = ta.falling(macdLine,1) macdsell = macdLine < signalLine if macdfall and macdsell and (macdLine < signalLine) and ta.falling(low,2) shortCondition := true if (shortCondition) strategy.entry("My Short Entry Id", strategy.short)