
Chiến lược này là một chiến lược giao dịch động cơ dựa trên công nghệ giao dịch động cơ, sử dụng ATR để dừng lỗ. Chiến lược này được tạo ra bởi Kory Hoang của Stabley.
Chiến lược sử dụng chỉ số động lực để xác định xu hướng, kết hợp với chỉ số ATR để thiết lập đường dừng lỗ, để thực hiện chiến lược giao dịch xung đột mua thấp mua cao.
Lần đầu tiên trong mã, chúng tôi đặt phạm vi thời gian của lần phát hiện.
Sau đó là phần chỉ số, tính toán các chỉ số sau:
Lý luận chính cho xu hướng này là:
Nếu close cao hơn vstop của đường dừng trước khi giảm, nó được coi là xu hướng tăng; nếu close thấp hơn vstop của đường dừng trước khi tăng, nó được coi là xu hướng giảm.
Điều chỉnh vị trí của đường dừng khi xu hướng thay đổi.
Cụ thể, khi xu hướng tăng, đường dừng được xác định là giá cao nhất trước đường K trừ ATR; khi xu hướng giảm, đường dừng được xác định là giá thấp nhất trước đường K cộng với ATR.
Điều này có thể thực hiện theo dõi xu hướng.
Trong phần quy tắc giao dịch, khi mở vị trí phá vỡ đường dừng lỗ, hãy thực hiện thêm lỗ.
Chiến lược này có những ưu điểm sau:
Chiến lược này cũng có một số rủi ro:
Có thể tối ưu hóa theo các khía cạnh sau:
Chiến lược này có thể được tối ưu hóa theo các hướng sau:
Kiểm tra các tham số ATR khác nhau để tìm ra sự kết hợp tối ưu. Có thể kiểm tra lại nhiều tham số để đánh giá tỷ lệ lợi nhuận / rủi ro.
Đường dừng tối ưu hóa kết hợp với chỉ số dao động dựa trên ATR. Các chỉ số dao động có thể được giới thiệu, nới lỏng mức dừng thích hợp khi dao động tăng lên.
Kết hợp với bộ lọc xu hướng, bạn có thể tăng các chỉ số đánh giá xu hướng và chỉ đặt vị trí khi xu hướng rõ ràng.
Tăng cơ chế quản lý vị trí. Bạn có thể điều chỉnh vị trí tùy theo tỷ lệ sử dụng vốn, số lần dừng lỗ liên tục.
Tăng khả năng kiểm soát rủi ro giữa đêm. Có thể chủ động dừng lỗ trước khi đóng cửa, tránh giá qua đêm tăng vọt.
Chiến lược này được sử dụng như một chiến lược giao dịch xung đột trong ngày cơ bản, tư duy tổng thể rõ ràng, sử dụng động lực kỹ thuật để đánh giá xu hướng và sử dụng chỉ số ATR để theo dõi điểm dừng lỗ, có thể kiểm soát rủi ro hiệu quả.
Có rất nhiều không gian để tối ưu hóa, có thể cải thiện từ nhiều khía cạnh như đánh giá xu hướng, cách dừng lỗ và quản lý vị trí, để làm cho chiến lược phù hợp hơn với giao dịch thực. Nhìn chung, chiến lược này cung cấp một khuôn khổ cơ bản tốt cho giao dịch định lượng.
/*backtest
start: 2023-01-29 00:00:00
end: 2024-02-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("BTC Swinger", overlay=true, commission_value = 0.25, default_qty_type=strategy.percent_of_equity, default_qty_value = 100)
/////////////////////////////////////////////////////////////
//START - SET DATE RANGE
// === BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1)
FromDay = input(defval = 1, title = "From Day", minval = 1)
FromYear = input(defval = 2010, title = "From Year")
ToMonth = input(defval = 12, title = "To Month", minval = 1)
ToDay = input(defval = 31, title = "To Day", minval = 1)
ToYear = input(defval = 2020, title = "To Year")
startDate = time > timestamp(FromYear, FromMonth, FromDay, 1, 1)
endDate = time < timestamp(ToYear, ToMonth, ToDay, 23, 59)
withinTimeRange = true
/////////////////////////////////////////////////////////////
//END - SET DATE RANGE
/////////////////////////////////////////////////////////////
//START - INDICATORS
length = input(3)
mult = input(1, minval = 0.01)
atr_ = atr(length)
max1 = max(nz(max_[1]), close)
min1 = min(nz(min_[1]), close)
is_uptrend_prev = nz(is_uptrend[1], true)
stop = is_uptrend_prev ? max1 - mult * atr_ : min1 + mult * atr_
vstop_prev = nz(vstop[1])
vstop1 = is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend = close - vstop1 >= 0
is_trend_changed = is_uptrend != is_uptrend_prev
max_ = is_trend_changed ? close : max1
min_ = is_trend_changed ? close : min1
vstop = is_trend_changed ? is_uptrend ? max_ - mult * atr_ : min_ + mult * atr_ : vstop1
plot(vstop, color = is_uptrend ? yellow : red, style=circles, linewidth=2)
/////////////////////////////////////////////////////////////
//END - INDICATORS
/////////////////////////////////////////////////////////////
//START - TRADING RULES
direction = input(defval=1, title = "Strategy Direction", minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))
condition1 = close > vstop and withinTimeRange
condition2 = close < vstop and withinTimeRange
strategy.entry("BUY", strategy.long, when = condition1)
strategy.entry("SELL", strategy.short, when = condition2)
/////////////////////////////////////////////////////////////
//END - TRADING RULES