Strategi Pembalikan Trend Corak Dinamik

Penulis:ChaoZhang, Tarikh: 2023-12-13 16:52:34
Tag:

img

Ringkasan

Strategi pembalikan trend corak dinamik menggunakan regresi linear untuk meramalkan harga dan garis purata bergerak untuk membentuk corak untuk menjana isyarat perdagangan. Ia menghasilkan isyarat beli apabila harga yang diramalkan melintasi di atas garis purata bergerak ke atas dan isyarat jual apabila melintasi di bawah ke bawah, menangkap pembalikan trend.

Logika Strategi

  1. Mengira regresi linear harga saham berdasarkan jumlah dagangan untuk mendapatkan harga yang diramalkan
  2. Mengira purata bergerak di bawah keadaan yang berbeza
  3. Menghasilkan isyarat beli apabila harga yang diramalkan melintasi purata bergerak ke atas
  4. Menghasilkan isyarat jual apabila harga yang diramalkan melintasi purata bergerak ke bawah
  5. Menggabungkan penunjuk MACD untuk menentukan masa pembalikan trend

Gabungan isyarat di atas dengan pelbagai pengesahan mengelakkan pecah palsu dan meningkatkan ketepatan.

Analisis Kelebihan

  • Menggunakan regresi linear untuk meramalkan trend harga, meningkatkan ketepatan isyarat
  • Mencatatkan pembalikan trend melalui corak purata bergerak
  • Kemunduran berdasarkan jumlah dagangan mempunyai makna ekonomi yang lebih baik
  • Pelbagai pengesahan oleh MACD dll mengurangkan isyarat palsu

Analisis Risiko

  • Parameter regresi linear memberi kesan yang ketara kepada keputusan
  • Tetapan purata bergerak juga mempengaruhi kualiti isyarat
  • Walaupun ada pengesahan, isyarat palsu masih menjadi risiko
  • Kod boleh dioptimumkan lagi untuk mengurangkan kekerapan perdagangan dan meningkatkan kadar keuntungan

Arahan pengoptimuman

  • Mengoptimumkan parameter regresi linear dan purata bergerak
  • Tambah lebih banyak syarat pengesahan untuk mengurangkan kadar isyarat palsu
  • Masukkan lebih banyak faktor untuk menilai kualiti pembalikan trend
  • Meningkatkan strategi stop loss untuk mengurangkan risiko untuk perdagangan individu

Kesimpulan

Strategi pembalikan trend corak dinamik mengintegrasikan ramalan regresi linear dan corak purata bergerak untuk menangkap pembalikan trend. Berbanding dengan strategi penunjuk tunggal, ia mempunyai kebolehpercayaan yang lebih tinggi. Penambahbaikan lanjut pada parameter, pengesahan dan pengoptimuman lain dapat meningkatkan kualiti isyarat dan keuntungan.


/*backtest
start: 2023-12-05 00:00:00
end: 2023-12-12 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 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)




Lebih lanjut