Chiến lược này là một chiến lược theo xu hướng 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 trong một khoảng thời gian nhất định và thực hiện các mục dài hoặc ngắn tương ứng khi có xu hướng giá 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 giá.
momentum = close - close[n]
nơi n đại diện cho độ dài của thời gian động lực. Khi động lực > 0, điều đó có nghĩa là giá đã tăng trong thời gian hiện tại. Khi động lực < 0, điều đó có nghĩa là giá đã giảm trong thời gian hiện tại.
Chiến lược đầu tiên thiết lập một tham số confirmBars, đại diện cho số lượng nến cần thiết để đánh giá xu hướng trước khi thực hiện giao dịch. Trong phạm vi backtest, nếu đà > 0 tồn tại cho nến confirmBars, một mục dài được thực hiện. Nếu đà < 0 tồn tại cho nến confirmBars, một mục ngắn được thực hiện.
Chìa khóa để đánh giá xu hướng của chiến lược nằm trong việc đếm số lượng nến liên tiếp mà động lực lớn hơn hoặc nhỏ hơn 0, được thực hiện thông qua các biến bcount và scount. Chúng được tăng thêm 1 khi điều kiện tương ứng được đáp ứng và đặt lại 0 khi điều kiện không được đáp ứng. Khi đếm đạt confirmBars, giao dịch dài hoặc ngắn tương ứng được thực hiện.
Đây là một xu hướng tương đối đơn giản theo chiến lược với 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 có thể được tối ưu hóa trong một số khía cạnh:
Tóm lại, chiến lược phá vỡ đà này là một chiến lược theo xu hướng đơn giản và thực tế phù hợp như một chiến lược giao dịch định lượng giới thiệu. Trong ứng dụng, cần chú ý đến việc kiểm soát tần suất giao dịch và ngăn chặn giao dịch quá mức. Trong khi đó, các tham số và bộ lọc cần được điều chỉnh và tối ưu hóa dựa trên các sản phẩm thực tế và môi trường thị trường để chiến lược đạt được hiệu suất tối đa.
/*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)