
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.
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.
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.
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.
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.
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.
/*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)