Chiến lược vào và thoát kênh giá Momentum


Ngày tạo: 2023-12-06 16:44:32 sửa đổi lần cuối: 2023-12-06 16:44:32
sao chép: 1 Số nhấp chuột: 613
1
tập trung vào
1621
Người theo dõi

Chiến lược vào và thoát kênh giá Momentum

Tổng quan

Chiến lược này dựa trên chỉ số kênh giá, đặt tham số động lực, hình thành đường trung bình của kênh giá bằng cách tính trung bình giá cao nhất và giá thấp nhất trong các chu kỳ khác nhau, sử dụng nó làm chuẩn, đặt đường dài và đường ngắn. Khi giá phá vỡ đường dài, làm nhiều hơn; Khi giá phá vỡ đường ngắn, làm trống.

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

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

Khi giá thấp hơn đường dài, sử dụng đơn giá giới hạn để mở nhiều lệnh; khi giá cao hơn đường ngắn, sử dụng đơn giá giới hạn để mở nhiều lệnh. Phương thức dừng lỗ của nhiều lệnh là giá quay trở lại đường trung tâm.

Phân tích lợi thế

Chiến lược này có những ưu điểm sau:

  1. Sử dụng chỉ số kênh giá, bạn có thể nắm bắt hiệu quả xu hướng giá và mức kháng cự hỗ trợ quan trọng.
  2. Sử dụng các bản ghi phá vỡ để mở vị trí, bạn có thể giảm tổn thất do phá vỡ giả.
  3. Phương pháp dừng lỗ trực tiếp theo tiêu chuẩn đường trung bình của kênh giá, tránh tổn thất quá mức do dừng lỗ theo giá.

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 tham số kênh giá được thiết lập không chính xác, có thể bỏ lỡ các hoạt động tích cực hoặc tạo ra quá nhiều đột phá giả.
  2. Việc phá vỡ kho chứa có một số chi phí.
  3. Trong thời gian giá giảm nhanh chóng, không thể dừng lỗ kịp thời.

Có thể giảm thiểu rủi ro trên 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 với các phán đoán về các chỉ số khác.

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

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

  1. Tối ưu hóa các tham số của kênh giá, tìm kiếm sự kết hợp tốt nhất.
  2. Thử các cách khác nhau để mở vị trí, chẳng hạn như hình dạng K-line, tín hiệu chỉ số trống và nhiều hơn nữa.
  3. Tăng các lệnh dừng lỗ để ngăn chặn sự sụt giảm giá.
  4. Kết hợp các chỉ số như khối lượng giao dịch, tỷ lệ biến động, tránh phá vỡ giả trên thị trường chứng khoán.

Tóm tắt

Chiến lược này được thiết kế dựa trên các chỉ số đường dẫn giá rõ ràng, sử dụng phá vỡ mở cửa để kiểm soát rủi ro hiệu quả. Tuy nhiên, cũng có nhiều vấn đề về tối ưu hóa tham số và cơ chế dừng lỗ cần được hoàn thiện. Nhìn chung, chiến lược này có một số giá trị thực tế và đáng để kiểm tra và tối ưu hóa hơn nữa.

Mã nguồn chiến lược
/*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()