Định danh giai đoạn tích lũy và chiến lược giao dịch

Tác giả:ChaoZhang, Ngày: 2024-02-20 11:29:57
Tags:

img

Tổng quan

Chiến lược này kết hợp các đường trung bình động, chỉ số khối lượng và chỉ số động lực giá để thiết kế một bộ quy tắc định lượng để xác định thời gian dự trữ bước vào giai đoạn tích lũy.

Nguyên tắc chiến lược

Chiến lược này sử dụng trung bình di chuyển đơn giản 50 ngày, 90 ngày và 200 ngày để xác định xu hướng giá. Các tín hiệu mua chỉ được tạo ra khi giá vượt quá đường 200 ngày. Điều này lọc sự không chắc chắn của xu hướng giảm lớn.

Ngoài việc đánh giá xu hướng chính, chiến lược cũng đánh giá thứ tự của các đường trung bình động ngắn hạn để xác nhận xu hướng.

Trên cơ sở rằng đường trung bình động xác nhận các xu hướng chính và ngắn hạn, chiến lược kết hợp chỉ số khối lượng PVT và chỉ số MACD để đánh giá các đặc điểm tích lũy.

Ưu điểm

So với sử dụng chỉ trung bình động, chiến lược này cũng kiểm tra các đặc điểm về khối lượng trong khi xác nhận xu hướng.

Bằng cách phân tích nhiều khung thời gian, chiến lược này kết hợp các đánh giá xu hướng trung và dài hạn và các đánh giá tính năng ngắn hạn để phù hợp với các khung thời gian, có thể làm giảm sự không chắc chắn từ việc đánh giá một khung thời gian duy nhất không chính xác.

Rủi ro và giải pháp

Chiến lược này chủ yếu dựa trên các phán đoán trung bình động. Khi giá dao động mạnh mẽ, các phán đoán trung bình động sẽ thất bại. Tại thời điểm này, kích thước vị trí nên được giảm hoặc một lệnh dừng lỗ phải được kích hoạt.

Ngoài ra, đánh giá sai ở giai đoạn tích lũy có thể xảy ra, do đó bỏ lỡ cơ hội đảo ngược.

Ý tưởng tối ưu hóa

Các thuật toán học máy có thể được đưa vào chiến lược này bằng cách chiết xuất các tính năng và đào tạo mô hình để đạt được đánh giá tự động về giai đoạn tích lũy.

Ngoài ra, chiến lược này cũng có thể thử chức năng điểm ngắt để tự động chuyển đổi các tham số trong môi trường thị trường khác nhau, làm cho chiến lược mạnh mẽ hơn.

Tóm lại

Tóm lại, chiến lược này thường áp dụng ý tưởng khớp giá và khối lượng để đánh giá các đặc điểm của các giai đoạn tích lũy cổ phiếu. Trong khi xác nhận hướng chính, nó đào cơ hội tích lũy ngắn hạn.


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


Thêm nữa