
Chiến lược phá vỡ động lực dựa trên khái niệm được Richard Buxtarp đưa ra vào năm 1984 rằng một khi có sự biến động lớn, thị trường thường sẽ tiếp tục hoạt động theo hướng này. Do đó, chiến lược này sử dụng ATR để đo lường sự biến động và phát ra tín hiệu giao dịch khi giá đóng cửa thay đổi nhiều lần so với ATR.
Chiến lược này đầu tiên tính toán chỉ số ATR để đo lường sự biến động của thị trường. Sau đó tính toán giá trị tuyệt đối của biến đổi giá đóng cửa hàng ngày. Khi giá đóng cửa thay đổi nhiều lần so với giá trị chỉ số ATR, nó tạo ra tín hiệu giao dịch. Cụ thể, nếu giá đóng cửa tăng nhiều hơn ATR lên đường, hãy làm nhiều hơn; Nếu giá đóng cửa giảm nhiều hơn ATR lên đường, hãy làm trống.
Chiến lược này sử dụng chỉ số ATR để xác định động điểm phá vỡ. Khi thị trường biến động lớn hơn, giá trị phá vỡ sẽ tăng, có thể giảm giao dịch sai. Khi thị trường biến động nhỏ hơn, giá trị phá vỡ sẽ giảm, có thể nắm bắt cơ hội phá vỡ kịp thời.
Có thể xem xét thời gian lọc giao dịch kết hợp với các chỉ số khác để tăng hiệu quả. Bạn cũng có thể chọn tham số ưu tiên cho các đặc điểm giống. Sử dụng các kỹ thuật kiểm soát tần suất giao dịch như thuật toán Martinegall.
Chiến lược đột phá động lực đơn giản và trực tiếp, sử dụng đột phá để tạo ra tín hiệu giao dịch. ATR dừng làm cho nó có thể thích ứng với sự biến động của thị trường. Chiến lược này dựa trên tối ưu hóa tham số có thể đạt được hiệu quả tốt.
/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 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/
// © EduardoMattje
//@version=5
strategy("Volatility System", overlay=false, margin_long=0, margin_short=0, default_qty_type=strategy.percent_of_equity,
default_qty_value=100, process_orders_on_close=true, initial_capital=20000)
// Inputs
var averageLength = input.int(14, "Average length", 2)
var multiplier = input.float(2.0, "Multiplier", 0.0, step=0.1)
// Calculations
atr = ta.atr(averageLength) * multiplier
closingChange = ta.change(close, 1)
atrPenetration(int signal) =>
res = closingChange * signal > atr[1]
longCondition = atrPenetration(1)
shortCondition = atrPenetration(-1)
// Order calls
if (longCondition)
strategy.entry(strategy.direction.long, strategy.long)
if (shortCondition)
strategy.entry(strategy.direction.short, strategy.short)
// Visuals
plot(atr, "ATR", color.white, 2)
plot(math.abs(closingChange), "Absolute close change", color.red)