Chiến lược theo dõi xu hướng hai hướng dựa trên sự đột phá phạm vi

Tác giả:ChaoZhang, Ngày: 2024-02-01 14:22:26
Tags:

img

Tổng quan

Chiến lược này tính toán giá cao nhất cuối cùng (lastbull) và giá thấp nhất cuối cùng (lastbear). Sau đó nó so sánh giá hiện tại với lastbull và lastbear để xác định xem giá đã bước vào một phạm vi nhất định và do đó tạo ra các tín hiệu giao dịch. Nó đi dài khi giá tăng trên lastbull một tỷ lệ phần trăm nhất định, và đi ngắn khi giá giảm dưới lastbear một tỷ lệ phần trăm nhất định.

Chiến lược logic

Chiến lược đầu tiên tính toán giá cao nhất cuối cùng lastbull và giá thấp nhất cuối cùng lastbear. sau đó nó tính toán tỷ lệ thay đổi tỷ lệ phần trăm ddl của giá hiện tại gần so với lastbull, và tỷ lệ thay đổi tỷ lệ phần trăm dds so với lastbear.

Khi ddl thấp hơn ngưỡng tín hiệu dài được cấu hình, một tín hiệu dài được tạo ra. Khi dds cao hơn ngưỡng tín hiệu ngắn được cấu hình, một tín hiệu ngắn dn được tạo ra.

Khi nhận được tín hiệu dài, nó mở vị trí dài nếu tham số needlong là đúng. Khi nhận được tín hiệu ngắn, nó mở vị trí ngắn nếu tham số needshort là đúng.

Nó đóng vị trí dài khi giá tăng sau khi mở dài, và đóng vị trí ngắn khi giá giảm sau khi mở ngắn.

Phân tích lợi thế

Chiến lược này kết hợp phân tích xu hướng và phạm vi. Nó có thể bắt được xu hướng và tạo ra các tín hiệu giao dịch từ việc phá vỡ phạm vi. So với các chiến lược theo dõi xu hướng đơn giản, nó có thể nhanh chóng bắt được hướng xu hướng mới sau khi phá vỡ phạm vi.

Các thông số có thể được cấu hình cho các sản phẩm khác nhau.

Phân tích rủi ro

Không có cơ chế dừng lỗ trong chiến lược này để hạn chế lỗ trên mỗi giao dịch.

Stop loss có thể được thêm vào để hạn chế lỗ trên mỗi giao dịch.

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

  1. Thêm stop loss di chuyển vào điều khiển theo rủi ro lỗ giao dịch
  2. Cải thiện thuật toán kích thước vị trí, ví dụ: sử dụng ATR, để ổn định kích thước vị trí
  3. Thêm lọc cho tín hiệu nhập, ví dụ: chỉ nhập khi chữ thập vàng xảy ra
  4. Giao dịch nhiều sản phẩm có mối tương quan với rủi ro hệ thống thấp hơn

Tóm lại

Chiến lược này kết hợp phân tích xu hướng và đột phá phạm vi để tạo ra các tín hiệu giao dịch, có thể bắt được xu hướng mới và tận dụng các đặc điểm giới hạn phạm vi. Các thông số có thể cấu hình cao cho các sản phẩm khác nhau. Có nhiều không gian tối ưu hóa để thích nghi với môi trường thị trường phức tạp hơn.


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

//Noro
//2019

//@version=4
strategy(title = "Noro's DDL Strategy", shorttitle = "DDL str", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
needlong = input(true, title = "Long")
needshort = input(true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
signalshort = input(3.0, title = "Short, %")
signallong = input(-3.0, title = "Long, %")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Levels
bull = close > close[1] ? 1 : 0
bear = close < close[1] ? 1 : 0
lastbull = 0.0
lastbull := bull ? close : lastbull[1]
lastbear = 0.0
lastbear := bear ? close : lastbear[1]

//Signals
ddl = ((close / lastbull) - 1) * 100
up = ddl < signallong
dds = ((close / lastbear) - 1) * 100
dn = dds > signalshort

//Lines
plot(dds, style = plot.style_area, color = color.red, transp = 0)
plot(ddl, style = plot.style_area, color = color.lime, transp = 0)
plot(0, color = color.black, linewidth = 2, transp = 0)

//Background
col = (up and needlong) or (dn and needshort) ? color.yellow : na
bgcolor(col, transp = 20)

//Orders
lot = 0.0
lot := strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
truetime = true
if up
    strategy.entry("Long", strategy.long, lot, when = needlong and truetime)
if dn
    strategy.entry("Short", strategy.short, lot, when = needshort and truetime)
if strategy.position_size > 0 and close > open
    strategy.entry("Close", strategy.short, 0)
if strategy.position_size < 0 and close < open
    strategy.entry("Close", strategy.long, 0)

Thêm nữa