Strategi Long-Short Linear Regression Crossover adalah strategi analisis teknikal yang menggunakan model regresi linear untuk meramalkan pergerakan harga masa depan saham. Prinsip asas strategi adalah: pergerakan harga saham sering mengikuti trend linear tertentu, dan dengan mengira regresi linear harga, harga masa depan boleh diramalkan. Strategi ini pergi lama apabila harga yang diramalkan melintasi di atas harga semasa, dan keluar dari kedudukan apabila melintasi di bawah.
Strategi ini mula-mula mengira regresi linear harga saham dalam jangka masa tertentu. Regresi linear sesuai dengan garis lurus menggunakan kaedah kuadrat terkecil, yang mewakili trend perubahan harga dari masa ke masa. Strategi kemudian memetakan garis harga yang diramalkan dan harga semasa pada carta.
Strategi itu menentukan dua isyarat:
Apabila isyarat panjang muncul, strategi membuka kedudukan panjang; apabila isyarat pendek muncul, ia menutup kedudukan.
Langkah-langkah utama strategi adalah seperti berikut:
Strategi Crossover Regresi Linear Panjang Pendek mempunyai kelebihan berikut:
Walaupun terdapat banyak kelebihan, Strategi Rintasan Regresi Linear Panjang Pendek juga mempunyai beberapa risiko:
Strategi Long-Short Linear Regression Crossover menghasilkan isyarat dagangan berdasarkan perbandingan harga yang diramalkan dari regresi linear dan harga semasa. Logik strategi adalah mudah dan jelas, dan ia dapat menangkap trend linear harga dan boleh digunakan untuk pelbagai keadaan pasaran. Pada masa yang sama, strategi ini mudah dilaksanakan dan dioptimumkan, dan parameter boleh disesuaikan dengan fleksibel, digabungkan dengan penunjuk lain, modul kawalan risiko boleh ditambah, dan lain-lain, untuk terus meningkatkan prestasi strategi. Walau bagaimanapun, strategi ini juga mempunyai risiko seperti pengenalan trend yang tidak tepat, tetapan parameter yang tidak sesuai, dan terlalu banyak data sejarah, jadi perlu berhati-hati dalam penerapan praktikal. Secara keseluruhan, Strategi Regression Linear Long-Short Crossover adalah strategi dagangan yang mudah dan kuantitatif yang berkesan yang patut diteroka dan dioptimumkan 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)