Pengenalpastian kuantitatif strategi fasa pengumpulan


Tarikh penciptaan: 2024-02-20 11:29:57 Akhirnya diubah suai: 2024-02-20 11:29:57
Salin: 0 Bilangan klik: 589
1
fokus pada
1617
Pengikut

Pengenalpastian kuantitatif strategi fasa pengumpulan

Gambaran keseluruhan

Strategi ini menggunakan gabungan purata bergerak, petunjuk jumlah transaksi, dan petunjuk pergerakan harga untuk merancang satu set peraturan kuantitatif untuk mengenal pasti masa saham memasuki tahap akumulasi. Pada peringkat ini, saham biasanya berada dalam keadaan penumpuan dan momentum harga, memberikan peluang yang baik untuk masuk dengan harga yang lebih rendah.

Prinsip Strategi

Strategi ini menggunakan purata bergerak sederhana 50, 90 dan 200 hari untuk menentukan trend harga. Isyarat beli hanya dihasilkan apabila harga melebihi garis 200 hari. Ini dapat menyaring ketidakpastian penurunan trend besar.

Selain menilai trend besar, strategi juga menilai urutan garis purata jangka pendek untuk mengesahkan trend. Khususnya, menilai garis 50 hari lebih tinggi daripada garis 90 hari.

Berdasarkan pengesahan rata-rata bergerak untuk trend besar dan trend jangka pendek, strategi ini menggabungkan penunjuk PVT dan MACD untuk menilai ciri-ciri akumulasi. Isyarat beli dihasilkan hanya apabila PVT meletup ke atas, garis MACD lebih tinggi daripada garis isyarat dan jumlah transaksi meningkat.

Kelebihan Strategik

Berbanding dengan menggunakan purata bergerak sahaja, strategi ini mengesahkan trend, tetapi juga memeriksa ciri-ciri jumlah transaksi. Ini dapat menentukan dengan lebih tepat kapan saham memasuki tahap akumulasi, dan dengan itu memastikan kelebihan harga masuk.

Dengan menggunakan analisis pelbagai bingkai masa, strategi ini menggabungkan penilaian trend jangka panjang dan jangka pendek dengan penilaian ciri-ciri jangka pendek, dan pencocokan bingkai masa dapat mengurangkan ketidakpastian yang disebabkan oleh kesalahan penilaian bingkai masa tunggal.

Risiko dan Penyelesaian

Strategi ini bergantung kepada penilaian rata-rata, dan penilaian rata-rata akan terputus apabila harga mengalami turun naik yang kuat. Dalam kes ini, anda harus mengurangkan saiz kedudukan atau menghentikan kerugian keluar secara langsung.

Di samping itu, penghakiman tahap akumulasi juga mungkin salah, sehingga kehilangan peluang untuk membalikkannya. Ini memerlukan penghakiman yang disahkan dengan melihat lebih banyak petunjuk ciri.

Optimum idea

Strategi ini boleh memperkenalkan algoritma pembelajaran mesin untuk membuat penilaian automatik mengenai tahap akumulasi melalui pengambilan ciri dan latihan model. Ini dapat mengurangkan batasan yang disebabkan oleh tetes tetapan manual.

Selain itu, strategi ini juga boleh mencuba fungsi breakpoint, yang secara automatik menukar parameter yang berbeza dalam keadaan pasaran yang berbeza, untuk menjadikan strategi lebih kasar.

ringkaskan

Strategi ini secara keseluruhan menggunakan cara yang sepadan dengan harga dan jumlah penjualan untuk menilai ciri-ciri akumulasi saham. Dengan mengesahkan arah besar, mengeksploitasi peluang akumulasi jangka pendek. Dengan pengenalan pengoptimuman parameter dan pembelajaran mesin, terdapat ruang untuk meningkatkan lagi kesan strategi.

Kod sumber strategi
/*backtest
start: 2023-02-13 00:00:00
end: 2024-02-19 00:00:00
period: 1d
basePeriod: 1h
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("Accumulate", overlay = true)
lookback = input(defval = 21, title = 'Lookback')
offset = input.int(title="Offset", defval=0, minval=-500, maxval=500)
//SMA Tredline
out = ta.sma(close, 200)
outf = ta.sma(close, 50)
outn = ta.sma(close, 90)
outt = ta.sma(close, 21)
//sma plot
plot(out, color=color.blue, title="MA200", offset=offset)
plot(outf, color=color.maroon, title="MA50", offset=offset)
plot(outn, color=color.orange, title="MA90", offset=offset)
plot(outt, color=color.olive, title="MA21", offset=offset)

//MarketCap Calculation
//MarketCap = 0.0
//TSO = request.financial(syminfo.tickerid, "TOTAL_SHARES_OUTSTANDING", "FQ", ignore_invalid_symbol = true)


//if str.tostring(TSO) != 'na'
//    if ta.barssince(TSO != TSO[1] and TSO > TSO[1])==0
//        MarketCap := TSO * close
//       
//    if barstate.islast and MarketCap == 0
//        runtime.error("No MarketCap is provided by the data vendor.")
//    
//momlen = 100
//msrc = MarketCap
//mom = msrc - msrc[momlen]
//plotmom = if (mom > mom[1])
//    true
//else
//   false

//OBV with sma on macd
obv = ta.cum(math.sign(ta.change(close)) * volume)
smoothingLength = 5
smoothingLine = ta.sma(obv,5)
[macdLine, signalLine, histLine] = ta.macd(ta.pvt, 12, 26, 9)
sellvolhigh = macdLine < signalLine
buyvolhigh = macdLine > signalLine
//Buy Signal
mafentry =ta.sma(close, 50) > ta.sma(close, 90)
//matentry = ta.sma(close, 21) > ta.sma(close, 50)
matwohun = close > ta.sma(close, 200)
higheshigh = ta.rising(high, 2)
higheslow = ta.rising(low, 2 )
twohunraise = ta.rising(out, 2)
//highvol =  ta.crossover(volume, ta.sma(volume, lookback))
highvol = ta.rising(volume,2)
fourlow = ta.lowest(close, lookback)
fourhig = ta.highest(close, lookback)
change =  (((fourhig - fourlow) / fourlow) * 100) <= 30
green = close > open
allup = false
lineabove = ta.cross(close, ta.sma(close, input(defval = 21, title = 'Entry Line')))
if matwohun and mafentry and higheshigh and twohunraise and buyvolhigh
//if higheshigh and higheslow and highvol
    allup := true

plotshape(allup, style=shape.arrowup,location=location.belowbar, color=color.green, title = "Buy Signal")

barsSinceLastEntry() =>
    strategy.opentrades > 0 ? bar_index - strategy.opentrades.entry_bar_index(strategy.opentrades - 1) : na
    
//Sell Signal
mafexit =ta.sma(close, 50) < ta.sma(close, 90)
matexit = ta.sma(close, 21) < ta.sma(close, 50)
matwohund = close < ta.sma(close, 200)
linebreak = ta.sma(close, input(defval = 21, title = 'Exit Line')) > close
lowesthigh = ta.falling(high, 3)
lowestlow = ta.falling(low, 2 )
twohunfall = ta.falling(out, 3)
twentyfall = ta.falling(outt, 2)
highvole =  ta.crossover(volume, ta.sma(volume, 5))
//fourlow = ta.lowest(close, lookback)
//fourhig = ta.highest(close, lookback)
changed =  (((fourhig - close) / close) * 100) >= 10
red = close < open
atr = ta.atr(14)
//atrsmalen = int(bar_index - strategy.opentrades.entry_bar_index(strategy.opentrades - 1) )
atrsmalen = barsSinceLastEntry()
atrsma = false
atrlen = 5
if str.tostring(atrsmalen) != 'NaN' and atrsmalen > 0
    atrlen := atrsmalen

    
atrsma := atr > ta.sma(atr,50)


alldwn = false
if sellvolhigh and lowestlow and (close < close[1] and close < open)
//if higheshigh and higheslow and highvol
    alldwn := true

plotshape(alldwn, style=shape.arrowdown,location=location.abovebar, color=color.red, title = "Sell Signal")


longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
if (allup)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
if (alldwn)
    strategy.entry("My Short Entry Id", strategy.short)