Penanda peringkat pengumpulan dan strategi dagangan

Penulis:ChaoZhang, Tarikh: 2024-02-20 11:29:57
Tag:

img

Ringkasan

Strategi ini menggabungkan purata bergerak, penunjuk jumlah dan penunjuk momentum harga untuk merancang satu set peraturan kuantitatif untuk mengenal pasti masa stok memasuki peringkat pengumpulan. Pada peringkat ini, stok biasanya berada dalam keadaan penyatuan harga dan simpanan, memberikan peluang harga rendah yang baik.

Prinsip Strategi

Strategi ini menggunakan purata bergerak mudah 50 hari, 90 hari dan 200 hari untuk menentukan trend harga. Isyarat beli hanya dihasilkan apabila harga berada di atas garisan 200 hari. Ini menapis ketidakpastian trend penurunan utama.

Selain menilai trend utama, strategi ini juga menilai urutan purata bergerak jangka pendek untuk mengesahkan trend. khususnya, ia menilai jika garis 50 hari berada di atas garis 90 hari.

Berdasarkan bahawa purata bergerak mengesahkan trend utama dan jangka pendek, strategi menggabungkan penunjuk jumlah PVT dan penunjuk MACD untuk menilai ciri pengumpulan. Isyarat beli dihasilkan hanya apabila PVT pecah ke atas, garis MACD lebih tinggi daripada garis Isyarat, dan jumlahnya berkembang.

Kelebihan

Berbanding dengan menggunakan purata bergerak sahaja, strategi ini juga memeriksa ciri-ciri jumlah sambil mengesahkan trend.

Dengan menganalisis beberapa bingkai masa, strategi ini menggabungkan penilaian trend jangka sederhana dan panjang dan penilaian ciri jangka pendek untuk sepadan bingkai masa, yang dapat mengurangkan ketidakpastian daripada menilai bingkai masa tunggal dengan salah.

Risiko dan Penyelesaian

Strategi ini bergantung terutamanya pada penilaian purata bergerak. Apabila harga turun naik secara ganas, penilaian purata bergerak akan gagal. Pada ketika ini, saiz kedudukan harus dikurangkan atau keluar stop loss harus dicetuskan.

Di samping itu, penilaian yang salah pada peringkat pengumpulan adalah mungkin, sehingga kehilangan peluang pembalikan.

Idea pengoptimuman

Algoritma pembelajaran mesin boleh diperkenalkan ke dalam strategi ini dengan mengekstrak ciri dan latihan model untuk mencapai penghakiman automatik tahap pengumpulan.

Di samping itu, strategi ini juga boleh mencuba fungsi titik henti untuk menukar parameter secara automatik di bawah persekitaran pasaran yang berbeza, menjadikan strategi lebih mantap.

Ringkasan

Ringkasnya, strategi ini umumnya mengamalkan idea pencocokan harga dan jumlah untuk menilai ciri-ciri peringkat pengumpulan stok. Walaupun mengesahkan arah utama, ia menggali peluang pengumpulan jangka pendek. Masih ada ruang untuk peningkatan prestasi strategi dengan memperkenalkan pengoptimuman parameter dan pembelajaran mesin.


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


Lebih lanjut