
Chiến lược này là một chiến lược theo dõi xu hướng được thực hiện bằng cách sử dụng chỉ số động lực giá. Nó đánh giá xu hướng thị trường bằng cách tính toán sự thay đổi giá đóng cửa trong một chu kỳ nhất định, và thực hiện các hoạt động mua hoặc bán tương ứng khi giá có xu hướng tăng hoặc giảm liên tục.
Chỉ số cốt lõi của chiến lược này là động lực của giá. Công thức tính động lực là:
momentum = close - close[n]
Trong đó, n đại diện cho độ dài của chu kỳ động lượng. Khi momentum > 0, giá đã tăng trong chu kỳ hiện tại; Khi momentum < 0, giá đã giảm trong chu kỳ hiện tại.
Chiến lược này trước tiên đặt một tham số confirmBars, đại diện cho sự phán đoán xu hướng cần có một số đường K để thực hiện giao dịch. Trong phạm vi đo đạc, nếu momentum > 0 tiếp tục đường gốc K của confirmBars, thì sẽ được nhập nhiều hơn; Nếu momentum < 0 tiếp tục đường gốc K của confirmBars, thì sẽ được nhập trống.
Chìa khóa của chiến lược này để đánh giá xu hướng là tính toán số lượng dòng K liên tục lớn hơn hoặc nhỏ hơn 0 trong thời gian, thông qua các biến bcount và scount. Chúng trở thành +1 khi điều kiện tương ứng được đáp ứng và 0 khi không đáp ứng. Khi số liệu đạt đến confirmBars, thực hiện giao dịch mua hoặc bán.
Đây là một chiến lược theo dõi xu hướng đơn giản, có những lợi thế sau:
Chiến lược này cũng có một số rủi ro:
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Nhìn chung, chiến lược phá vỡ động lực là một trong những chiến lược theo dõi xu hướng đơn giản và thực tế, phù hợp với việc định lượng giao dịch. Trong quá trình ứng dụng, cần chú ý đến việc kiểm soát tần suất giao dịch, ngăn chặn giao dịch quá mức và chi phí giao dịch quá cao. Đồng thời, cả tham số và quy tắc lọc đều cần được điều chỉnh và tối ưu hóa theo các loại thực tế và môi trường thị trường để có thể sử dụng chiến lược hiệu quả nhất.
/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Momentum Strategy [TS Trader]", overlay=true)
confirmBars = input(1)
momentumLength = input(14, title="Momentum Length")
price = close
momentum = close - close[momentumLength]
// === INPUT BACKTEST RANGE ===
fromYear = input.int(2019, title="Backtest Start Year")
fromMonth = input.int(1, title="Backtest Start Month", minval=1, maxval=12)
fromDay = input.int(1, title="Backtest Start Day", minval=1, maxval=31)
toYear = input.int(2023, title="Backtest End Year")
toMonth = input.int(12, title="Backtest End Month", minval=1, maxval=12)
toDay = input.int(31, title="Backtest End Day", minval=1, maxval=31)
startTimestamp = timestamp(fromYear, fromMonth, fromDay, 00, 00)
endTimestamp = timestamp(toYear, toMonth, toDay, 23, 59)
inBacktestRange = true
// === STRATEGY LOGIC ===
bcond = momentum > 0
bcount = 0
bcount := bcond ? nz(bcount[1]) + 1 : 0
if (bcount == confirmBars and inBacktestRange)
strategy.entry("Buy", strategy.long, comment="Long")
scond = momentum < 0
scount = 0
scount := scond ? nz(scount[1]) + 1 : 0
if (scount == confirmBars and inBacktestRange)
strategy.entry("Sell", strategy.short, comment="Short")
// Plotting Momentum
plot(momentum, title="Momentum", color=color.purple)