Chiến lược giao dịch xu hướng dựa trên Golden Cross

Tác giả:ChaoZhang, Ngày: 2023-11-23 14:07:11
Tags:

img

Tổng quan

Chiến lược giao dịch chéo vàng là một chiến lược theo dõi xu hướng trung hạn đến dài hạn. Nó xác định hướng xu hướng của giá cổ phiếu bằng cách tính toán chỉ số SR và chỉ số tín hiệu SR, và thực hiện các hoạt động theo dõi xu hướng bằng cách vẽ một kênh xu hướng bằng cách sử dụng các thuật toán mạng thần kinh. Khi chỉ số SR vượt qua tín hiệu SR, một tín hiệu mua được tạo ra. Khi chỉ số SR vượt qua dưới tín hiệu SR, một tín hiệu bán được tạo ra. Chiến lược này cũng sử dụng kỹ thuật lọc hồi quy tuyến tính thích nghi để tối ưu hóa đường cong kênh, có hiệu quả ngăn chặn các tín hiệu sai.

Nguyên tắc

Các chỉ số cốt lõi của chiến lược này là chỉ số SR và chỉ số tín hiệu SR. Chỉ số SR là một tổng hợp thứ cấp của trung bình động WMA và trung bình động SMA với khoảng thời gian 8. Chỉ số tín hiệu SR là chỉ số SR được tính toán với khoảng thời gian 20.

Chiến lược này sử dụng thuật toán mạng thần kinh để tự động vẽ ranh giới trên và dưới của giá cổ phiếu để tạo thành một kênh thích nghi. ranh giới trên lấy giá trị tối đa lịch sử của chỉ số SR làm đầu vào, ranh giới dưới lấy giá trị tối thiểu lịch sử làm đầu vào, và đường cong hồi quy được tính theo ranh giới trên và dưới của kênh tương ứng.

Khi chỉ số SR vượt qua tín hiệu SR, một tín hiệu mua được tạo ra. Khi chỉ số SR vượt qua dưới tín hiệu SR, một tín hiệu bán được tạo ra. Sau khi các tín hiệu dài và ngắn được phát hành, mối quan hệ giữa giá cổ phiếu và giới hạn trên và dưới của kênh xác định các vị trí dừng lỗ và lấy lợi nhuận.

Ưu điểm

  • Sử dụng công nghệ tổng hợp song tuyến để loại bỏ tác động của biến động giá và xác định chính xác hướng xu hướng;
  • Các thuật toán kênh thích nghi tối ưu hóa thời gian vào và ra và tránh các sự đột phá sai;
  • Các đường cong kênh áp dụng công nghệ lọc hồi quy tuyến tính thích nghi để tránh biến dạng từ cực đoan;
  • Các vị trí dừng lỗ và lấy lợi nhuận thay đổi năng động theo kênh, tự động theo dõi xu hướng lợi nhuận.

Phân tích rủi ro

Những rủi ro chính của chiến lược theo dõi xu hướng này là:

  • Tạo ra nhiều tín hiệu sai và quá nhiều hoạt động không hợp lệ trong xu hướng dao động;
  • Việc phá vỡ nhanh dưới giới hạn dưới của kênh do các sự kiện đột ngột dẫn đến tổn thất lớn;
  • Cài đặt tham số không chính xác có thể dễ dàng gây ra thất bại chiến lược.

Để kiểm soát rủi ro, nên kết hợp với các chiến lược khác thay vì dựa vào một chiến lược duy nhất; đồng thời tối ưu hóa cài đặt tham số để thích nghi với môi trường thị trường khác nhau.

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

Chiến lược này 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 chỉ báo SR và chỉ báo tín hiệu để cải thiện sự ổn định của tín hiệu chéo;

  2. Tối ưu hóa thời gian chu kỳ của kênh thích nghi để làm mịn đường cong kênh;

  3. Thêm các chỉ số bộ lọc khác để tránh hoạt động sai, chẳng hạn như chỉ số năng lượng, chỉ số biến động, v.v.;

  4. Kết hợp các thuật toán học sâu để tối ưu hóa đường cong kênh trong thời gian thực và cải thiện khả năng thích nghi.

Tóm lại

Chiến lược giao dịch chéo vàng là một chiến lược định lượng hiệu quả để theo dõi xu hướng trung hạn đến dài hạn. Nó có khả năng xác định đúng hướng xu hướng và rủi ro hoạt động thấp. Với không gian rất lớn để tối ưu hóa mô hình thuật toán, chiến lược này có tiềm năng trở thành một công cụ mạnh mẽ để theo dõi những thay đổi trong xu hướng cổ phiếu.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-22 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

strategy(title = " Strategy PyramiCover",
         shorttitle = "S-PC",
         overlay = true,
         precision = 8,
         calc_on_order_fills = true,
         calc_on_every_tick = true,
         backtest_fill_limits_assumption = 0,
         default_qty_type = strategy.fixed,
         default_qty_value = 2,
         initial_capital = 10000,
         pyramiding=50,
         currency = currency.USD,
         linktoseries = true)

//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

backTestSectionFrom = input(title = "═══════════════ From ═══════════════", defval = true, type = input.bool)

FromMonth         = input(defval = 1, title = "Month", minval = 1)
FromDay           = input(defval = 1, title = "Day", minval = 1)
FromYear          = input(defval = 2014, title = "Year", minval = 2014)

backTestSectionTo = input(title = "════════════════ To ════════════════", defval = true, type = input.bool)
ToMonth           = input(defval = 31, title = "Month", minval = 1)
ToDay             = input(defval = 12, title = "Day", minval = 1)
ToYear            = input(defval = 9999, title = "Year", minval = 2014)

backTestPeriod() => (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59))

//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

per = input(14,title="🔹 Length")
//
up = 0.0
nup= 0.0
lowl = 0.0
nin = 0.0
//
srl=wma(close,8)
srr = sma(close,8)
sr = 2*srl - srr
//
srsl=wma(close,20)
srsr= sma(close,20)
srsignal = 2*srsl - srsr
//
if sr>srsignal
    up := highest(sr,round(150))
    nup :=highest(srsignal,round(20))
else
    up := highest(srsignal,round(150))
    nup := highest(sr,round(20))
//
if sr<srsignal
    lowl := lowest(sr,round(150))
    nin := lowest(srsignal,round(20))
else
    lowl := lowest(sr,round(150))
    nin := lowest(srsignal,round(20))
//reg alexgrover
f_reg(src,length)=>
    x = bar_index
    y = src
    x_ = sma(x, length)
    y_ = sma(y, length)
    mx = stdev(x, length)
    my = stdev(y, length)
    c = correlation(x, y, length)
    slope = c * (my / mx)
    inter = y_ - slope * x_
    reg = x * slope + inter
    reg
//
up_=f_reg(up,per)
lowl_=f_reg(lowl,per)
nup_=f_reg(nup,per)
nin_=f_reg(nin,per)
//
plot(sr, title='SR', color=color.green, linewidth=2, style=plot.style_line,transp=0)
plot(srsignal, title='SR-Signal', color=color.red, linewidth=2, style=plot.style_line,transp=0)
plot(up_, title='Upper limit', color=color.blue, linewidth=3, style=plot.style_line,transp=0)
plot(lowl_, title='Lower limit', color=color.blue, linewidth=3, style=plot.style_line,transp=0)
a=plot(nup_, title='Neuronal Upper', color=color.gray, linewidth=1, style=plot.style_line,transp=0)
b=plot(nin_, title='Neuronal Lower', color=color.gray, linewidth=1, style=plot.style_line,transp=0)
fill(a, b, color=color.gray)
plotshape(crossunder(sr,nup_)? sr+atr(20):na, title="Sell", text="🐻", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.black,transp=0)
plotshape(crossover(sr,nin_)? sr-atr(20):na, title="Buy", text="🐂", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.black,transp=0)

//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

if backTestPeriod()

    strategy.entry("Buy", true, 1, when = crossover(sr,nin_)) 
    strategy.entry("Short", false, 1, when = crossunder(sr,nup_))

Thêm nữa