Chiến lược giao dịch lượng dựa trên kênh SuperTrend

Tác giả:ChaoZhang, Ngày: 2024-02-05 13:57:28
Tags:

img

Tổng quan

Chiến lược này tạo ra các tín hiệu vào và ra dựa trên chỉ số kênh SuperTrend để nhận ra giao dịch lượng tự động. Chỉ số kênh SuperTrend có thể xác định các điểm đột phá và mức hỗ trợ / kháng cự rõ ràng để xác định hướng xu hướng. Chiến lược này kết hợp các lợi thế của chỉ số này để thực hiện cả giao dịch dài và ngắn.

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

Chiến lược này sử dụng ATR và kênh Donchian để tính toán hai đường dừng lỗ cho các vị trí dài và ngắn. Cụ thể, nó tính toán giá trị ATR bằng cách sử dụng thời gian ATR và các tham số nhân, sau đó cộng và trừ nó từ trung bình của mức cao nhất và thấp nhất để có được các đường dừng lỗ dài và ngắn. Khi giá đóng phá vỡ trên đường dừng lỗ dài lên, một tín hiệu dài được tạo ra. Khi giá đóng phá vỡ dưới đường dừng lỗ ngắn xuống, một tín hiệu ngắn được kích hoạt.

Sau khi thực hiện các vị trí dài hoặc ngắn, các đường dừng lỗ được cập nhật năng động để khóa lợi nhuận. Đường dừng lỗ mới sẽ không thấp hơn hoặc cao hơn so với đường trước, tránh xâm nhập dừng lỗ. Khi một mức cao hoặc thấp mới xuất hiện giữa đường dừng lỗ hiện tại và trước đó, đường dừng lỗ được điều chỉnh theo giá mới nhất.

Phân tích lợi thế

Ưu điểm lớn nhất của chiến lược này là chỉ số kênh SuperTrend có thể xác định rõ hướng xu hướng và mức hỗ trợ / kháng cự chính. Cùng với lệnh dừng lỗ ATR năng động, nó có thể kiểm soát hiệu quả lỗ giao dịch duy nhất.

Cụ thể, hai đường dừng lỗ trong chỉ số kênh SuperTrend đại diện cho cơ sở chi phí vị trí và hỗ trợ / kháng cự mới nhất. Chúng cung cấp hướng dẫn rất rõ ràng cho các bước vào và ra. Trong khi đó, đường dừng lỗ cập nhật năng động để khóa lợi nhuận và ngăn chặn sự xâm nhập của dừng lỗ.

Nói chung, chiến lược này đi vào kịp thời khi xu hướng được xác định, kiểm soát rủi ro thông qua dừng lỗ năng động, làm cho nó trở thành một chiến lược giao dịch định lượng tương đối mạnh mẽ.

Phân tích rủi ro

Rủi ro chính của chiến lược này nằm ở khả năng thâm nhập dừng lỗ. Khi giá dao động mạnh mẽ, đường dừng lỗ mới có thể trở nên thấp hơn hoặc cao hơn đường trước đó, gây ra sự thâm nhập dừng lỗ và tăng lỗ.

Ngoài ra, các tín hiệu nhập khẩu được tạo ra bởi chỉ số kênh SuperTrend không hoạt động tốt trong các thị trường dao động, dẫn đến các giao dịch sai đôi khi.

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 thời gian ATR và các thông số nhân để tìm ra sự kết hợp tốt nhất thông qua kiểm tra ngược các giá trị khác nhau và phân tích các số liệu như lợi nhuận và tỷ lệ Sharpe.

  2. Thêm các chỉ số khác để lọc tín hiệu để tránh các mục nhập sai trong các thị trường dao động.

  3. Kết hợp các chỉ số khối lượng để điều chỉnh chính xác vị trí dừng lỗ. Các đường dừng lỗ có thể được điều chỉnh dựa trên sự gia tăng khối lượng để tiếp tục khóa lợi nhuận.

  4. giới thiệu các mô hình học máy cho tối ưu hóa tham số thích nghi. Các kỹ thuật như RNN và LSTM có thể được tận dụng để dự đoán các giá trị tham số tối ưu một cách năng động.

Kết luận

Chiến lược này bắt nguồn từ chỉ số kênh SuperTrend với đánh giá rõ ràng về hướng xu hướng và tỷ lệ thắng tương đối cao. Nó cũng áp dụng lệnh dừng lỗ theo dõi ATR năng động để kiểm soát lỗ giao dịch duy nhất. Hiệu suất có thể được cải thiện hơn nữa thông qua tối ưu hóa tham số, tối ưu hóa chỉ số vv. Nói chung, đây là một chiến lược mạnh mẽ phù hợp với giao dịch lượng tự động.


/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//EU ESCREVI ISSO TUDO, PARA FICAR BEM CLARO

strategy("SuperTrend Strategy", overlay=true)


//AQUI OS INPUTS PARA A SUPERTREND
length = input(title="ATR Period", type=input.integer, defval=7)
mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=7)
showLabels = input(title="Show Buy/Sell Labels ?", type=input.bool, defval=true)

//AQUI O CALCULO DO ATR STOPS
atr = mult * atr(length)



//AQUI A TRANSFORMAÇÃO DO ATR STOPS EM SUPERTREND
//-
//A LÓGICA PARA LONGSTOP
longStop = hl2 - atr
longStopPrev = nz(longStop[1], longStop)
longStop := close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop

//A LÓGICA PARA SELLSTOP
shortStop = hl2 + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop


//DIREÇÃO DO INDICADOR
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and close > shortStopPrev ? 1 : 
   dir == 1 and close < longStopPrev ? -1 : dir


//DEFININDO AS CORES DAS LINHAS DA SUPERTREND
longColor = color.lime
shortColor = color.red


//PLOTANDO NO GRÁFICO A SUPERTREND E A ESTRATÉGIA
plot(dir == 1 ? longStop : na, title="Long Stop", style=plot.style_linebr, linewidth=3, color=longColor)
buySignal = dir == 1 and dir[1] == -1
plot(dir == 1 ? na : shortStop, title="Short Stop", style=plot.style_linebr, linewidth=3, color=shortColor)
sellSignal = dir == -1 and dir[1] == 1

//DEFININDO AS FUNÇÕES DE COMPRA E VENDA
strategy.entry("long", strategy.long, when = buySignal)
strategy.entry("short", strategy.short, when = sellSignal)




Thêm nữa