Chiến lược nhấn chìm biến động hai chiều


Ngày tạo: 2023-11-21 12:04:19 sửa đổi lần cuối: 2023-11-21 12:04:19
sao chép: 0 Số nhấp chuột: 608
1
tập trung vào
1621
Người theo dõi

Chiến lược nhấn chìm biến động hai chiều

Tổng quan

Chiến lược này là một chiến lược giao dịch hai chiều theo dõi biến động. Nó sử dụng chỉ số ATR biến động thực trung bình để thiết lập điểm dừng để đánh giá hướng xu hướng dựa trên hướng giá phá vỡ điểm dừng.

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

Chiến lược này sử dụng tỷ lệ biến động ATR 3 ngày. Ưu điểm ATR được nhân bởi một hệ số làm điểm dừng. Khi giá cao hơn điểm dừng, đánh giá là xu hướng tăng và đóng cửa khi giá giảm vượt mức dừng. Khi giá thấp hơn điểm dừng, đánh giá là xu hướng không và đóng cửa khi giá tăng vượt mức dừng.

Phân tích lợi thế

  • Sử dụng ATR để theo dõi biến động của thị trường, giảm khả năng phá vỡ mức dừng lỗ
  • Giao dịch hai chiều, có thể kiếm lợi nhuận từ sự biến động hai chiều của thị trường
  • Chọn điểm mở đầu ngược để tăng khả năng lợi nhuận ngay khi xu hướng thay đổi

Phân tích rủi ro

  • Thị trường có thể biến động mạnh, ATR không thể hiện đầy đủ sự biến động thực tế, dẫn đến việc dừng lỗ bị phá vỡ
  • GAP có thể xảy ra ở nhiều vị trí
  • Có thể giao dịch thường xuyên với lợi nhuận nhỏ

Đối với rủi ro, có thể tăng ATR phù hợp, tăng vùng đệm dừng, kiểm soát tần suất giao dịch, thiết lập điểm dừng tối thiểu.

Hướng tối ưu hóa

  • Kết hợp với các chỉ số khác để đánh giá tín hiệu chuyển hướng
  • Tối ưu hóa tham số ATR
  • Tham gia kiểm soát khối lượng giao dịch

Tóm tắt

Chiến lược này nói chung là một chiến lược dừng chân theo dõi hai chiều ổn định. Với các chỉ số ATR, các vị trí dừng lỗ được thiết lập động, kiểm soát rủi ro rút lui. Trong khi đó, giao dịch hai chiều tăng cơ hội kiếm lợi nhuận. Bằng cách tối ưu hóa hơn nữa, chiến lược có thể trở nên ổn định, đáng tin cậy và có khả năng theo dõi xu hướng hơn.

Mã nguồn chiến lược
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("BCH Swinger v1", 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 = 2017, title = "From Year")
ToMonth   = input(defval = 10, title = "To Month", minval = 1)
ToDay     = input(defval = 01, 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