Chiến lược mở và đóng kênh giá động lực

Tác giả:ChaoZhang, Ngày: 2023-12-06 16:44:32
Tags:

img

Tổng quan

Chiến lược này dựa trên chỉ số kênh giá. Bằng cách thiết lập một thông số động lực, nó tính toán giá trị trung bình của giá cao nhất và thấp nhất trong các chu kỳ khác nhau để tạo ra đường trung bình của kênh giá, và thiết lập các đường dài và ngắn dựa trên điều này. Khi giá vượt qua đường dài, nó sẽ dài; khi giá vượt qua đường ngắn, nó sẽ ngắn. Điều kiện đóng cửa là giá sẽ lùi xuống đường trung bình của kênh.

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

Chiến lược này sử dụng chỉ số kênh giá để tính giá trị trung bình của giá cao nhất và thấp nhất trong các chu kỳ khác nhau để tạo thành đường giữa kênh. Dựa trên đường giữa, các đường dài và đường ngắn được thiết lập thông qua tham số chuyển đổi. Cụ thể, công thức tính toán đường dài là: đường trung + (chỉ số đường trung × đường dài %); công thức tính toán đường ngắn là: đường trung + (chỉ số đường trung × đường ngắn%).

Khi giá thấp hơn đường dài, mở các vị trí dài với lệnh giới hạn; khi giá cao hơn đường ngắn, mở các vị trí ngắn với lệnh giới hạn.

Phân tích lợi thế

Chiến lược có những lợi thế sau:

  1. Sử dụng chỉ số kênh giá có thể nắm bắt hiệu quả xu hướng giá và mức hỗ trợ / kháng cự chính.
  2. Việc mở các vị trí trên breakout có thể giảm tổn thất từ breakout giả.
  3. Phương pháp dừng lỗ trực tiếp lấy đường trung gian kênh giá làm tiêu chuẩn để tránh tổn thất quá mức từ các chase stop.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Các thiết lập tham số không chính xác của kênh giá có thể bỏ qua các xu hướng hoạt động hoặc tạo ra quá nhiều sự đột phá sai.
  2. Các phương pháp mở đột phá phải chịu một mức độ chi phí trượt nhất định.
  3. Không thể ngăn chặn mất mát trong thời gian trong quá trình giảm giá nhanh chóng.

Các rủi ro trên có thể được giảm thiểu bằng cách tối ưu hóa các tham số, đặt lệnh dừng lỗ hoặc kết hợp các chỉ số khác để đánh giá.

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

Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:

  1. Tối ưu hóa các thông số của kênh giá để tìm ra sự kết hợp tốt nhất.
  2. Hãy thử các phương pháp mở khác nhau như mô hình nến và tín hiệu chỉ báo.
  3. Thêm cài đặt lệnh dừng lỗ để ngăn chặn tổn thất từ giảm giá nhanh chóng.
  4. Kết hợp khối lượng giao dịch, biến động và các chỉ số khác để tránh sự phá vỡ sai trên thị trường chứng khoán.

Kết luận

Ý tưởng thiết kế của chiến lược này dựa trên chỉ số kênh giá là rõ ràng. Sử dụng breakout để mở các vị trí có thể kiểm soát rủi ro một cách hiệu quả. Nhưng cũng có không gian tối ưu hóa tham số lớn và cơ chế dừng lỗ cần được cải thiện. Nhìn chung, chiến lược có một giá trị thực tế nhất định và đáng để thử nghiệm và tối ưu hóa thêm.


/*backtest
start: 2022-11-29 00:00:00
end: 2023-12-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's PCMA Strategy v1.0", shorttitle = "PCMA 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
per = input(3, title = "Length")
shortlevel = input(10.0, title = "Short line (red)")
longlevel = input(-5.0, title = "Long line (lime)")
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")

//Price Channel
h = highest(high, per)
l = lowest(low, per)
c = (h + l) / 2
ll = c + ((c / 100) * longlevel)
sl = c + ((c / 100) * shortlevel)

//Lines
shortcolor = needshort ? red : na
longcolor = needlong ? lime : na
plot(sl, linewidth = 2, color = shortcolor, title = "Short line")
plot(c, linewidth = 2, color = blue, title = "SMA line")
plot(ll, linewidth = 2, color = longcolor, title = "Long line")

//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]

if (not na(close[per])) and size == 0 and needlong
    strategy.entry("L", strategy.long, lot, limit = ll, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if (not na(close[per])) and size == 0 and needshort
    strategy.entry("S", strategy.short, lot, limit = sl, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if (not na(close[per])) and size > 0 
    strategy.entry("Close", strategy.short, 0, limit = c, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if (not na(close[per])) and size < 0 
    strategy.entry("Close", strategy.long, 0, limit = c, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Thêm nữa