
Strategi crossover linier multi-posisi adalah strategi analisis teknis yang didasarkan pada model regresi linier untuk memprediksi pergerakan harga saham di masa depan. Prinsip dasar strategi ini adalah: pergerakan harga saham cenderung mengikuti tren linier tertentu, dan dengan menghitung regresi linier harga, harga di masa depan dapat diprediksi.
Strategi ini pertama-tama menghitung regresi linier harga saham selama beberapa waktu. Regresi linier menggunakan perkalian minimal untuk menyusun garis lurus yang mewakili tren perubahan harga dari waktu ke waktu. Strategi ini kemudian memetakan garis harga yang diprediksi dan harga saat ini pada grafik.
Kebijakan ini mendefinisikan dua sinyal:
Ketika sinyal melakukan lebih banyak muncul, strategi membuka posisi lebih banyak; ketika sinyal melakukan lebih sedikit muncul, posisi kosong.
Langkah-langkah penting dari strategi ini adalah sebagai berikut:
Strategi crossover linier multi-area memiliki keuntungan sebagai berikut:
Meskipun ada banyak keuntungan dari strategi crossover linier, ada juga beberapa risiko:
Strategi crossover linier multi-terang didasarkan pada regresi linier harga, menghasilkan sinyal perdagangan dengan memprediksi harga dan membandingkan harga saat ini. Logika strategi sederhana dan jelas, dapat menangkap tren linier harga, cocok untuk semua jenis situasi. Strategi ini juga mudah diimplementasikan dan dioptimalkan, dapat menyesuaikan parameter secara fleksibel, menggabungkan indikator lain, menambahkan modul kontrol risiko, dll, untuk terus meningkatkan kinerja strategi.
/*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)