Chiến lược theo dõi siêu xu hướng nhiều khung thời gian

Tác giả:ChaoZhang, Ngày: 2024-01-15 11:35:47
Tags:

img

Tổng quan

Chiến lược này sử dụng chỉ số ATR để xây dựng một kênh xu hướng năng động nhiều khung thời gian để theo dõi xu hướng. Nó tạo ra tín hiệu khi giá vượt qua kênh bằng cách liên tục điều chỉnh kênh để nắm bắt xu hướng lớn hơn.

Chiến lược logic

Chiến lược này sử dụng chỉ số ATR để xây dựng một kênh xu hướng tăng và một kênh xu hướng giảm. Cụ thể, đường kênh xu hướng tăng là giá đóng trừ N lần chỉ số ATR; đường kênh xu hướng giảm là giá đóng cộng với N lần chỉ số ATR. Giá trị N có thể được điều chỉnh thông qua các tham số.

Khi giá vượt qua kênh xu hướng tăng, một tín hiệu mua được tạo ra; khi giá vượt qua kênh xu hướng giảm, một tín hiệu bán được tạo ra.

Ngoài ra, chiến lược cũng xác định một biến xu hướng để xác định xem hiện tại có xu hướng tăng hay giảm.

Ưu điểm

  • Sử dụng các kênh năng động để theo dõi xu hướng và giao dịch cùng với xu hướng
  • Tránh theo đuổi mức cao và bán mức thấp, giảm nguy cơ đảo ngược thị trường
  • Các thông số kênh có thể điều chỉnh, khả năng thích nghi cao
  • Cài đặt nhiều khung thời gian linh hoạt hơn

Rủi ro

  • Theo dõi quá mạnh mẽ có thể làm tăng nguy cơ mất mát
  • Cài đặt tham số kênh không chính xác dẫn đến ít hoặc nhiều tín hiệu sai
  • Cần kỹ năng lập trình mạnh mẽ để điều chỉnh các thông số

Cải thiện:

  • Giảm thích hợp nhân ATR xuống độ lớn theo dõi thấp hơn
  • Tối ưu hóa các tham số để tìm kết hợp tốt nhất
  • Thêm chiến lược dừng lỗ để giảm lỗ trên mỗi giao dịch

Hướng dẫn tối ưu hóa

  • Thêm các chỉ số khác cho bộ lọc cho tín hiệu đáng tin cậy hơn
  • Thêm chiến lược dừng lỗ để giảm rủi ro
  • Thực hiện tối ưu hóa tham số để tìm tối ưu
  • Tối ưu hóa thời gian vào và ra để cải thiện tỷ lệ lợi nhuận

Tóm lại

Nhìn chung, đây là một chiến lược theo dõi xu hướng tốt. Nó điều chỉnh năng động để giao dịch cùng với xu hướng và tránh theo đuổi mức cao và bán thấp. Với tối ưu hóa tham số và cải tiến thích hợp, lợi thế chiến lược có thể được tăng thêm và giảm rủi ro để đạt được kết quả tốt hơn.


/*backtest
start: 2023-01-08 00:00:00
end: 2024-01-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('超级趋势精简优化版', overlay=true)
Periods = input(title='ATR周期', defval=10)
src = input(hl2, title='价格数据源')
Multiplier = input.float(title='ATR 乘数', step=0.1, defval=3.0)
changeATR = input(title='更改ATR计算方法', defval=true,tooltip = '默认为art否则sma(ta.tr,ATR周期)')
showsignals = input(title='显示买入/卖出信号', defval=false)
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title='上涨趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal and showsignals ? up : na, title='买点', text='买点', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0))
dnPlot = plot(trend == 1 ? na : dn, title='下跌趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal and showsignals ? dn : na, title='卖点', text='卖点', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
FromMonth = input.int(defval=9, title='From Month', minval=1, maxval=12)
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
FromYear = input.int(defval=2018, title='From Year', minval=999)
ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12)
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31)
ToYear = input.int(defval=9999, title='To Year', minval=999)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
window() =>
    time >= start and time <= finish ? true : false
longCondition = buySignal
if longCondition and window()
    strategy.entry('BUY', strategy.long, comment = '买入')
shortCondition = sellSignal
if shortCondition and window()
    strategy.close('BUY',comment = '卖出')
buy1 = ta.barssince(buySignal)
sell1 = ta.barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na



Thêm nữa