Chiến lược dừng lỗ và lấy lợi nhuận dựa trên chỉ số

Tác giả:ChaoZhang, Ngày: 2023-11-10 11:28:06
Tags:

img

Tổng quan

Chiến lược này sử dụng đường trung bình động như tín hiệu giao dịch và kết hợp nó với tỷ lệ dừng lỗ và lấy lợi nhuận do người dùng xác định để thực hiện một chiến lược dừng lỗ và lấy lợi nhuận hoàn chỉnh dựa trên chỉ số. Nó có thể nhập giao dịch, đặt dừng lỗ và lấy lợi nhuận tự động mà không cần can thiệp bằng tay, phù hợp với giao dịch thuật toán.

Chiến lược logic

Logic cốt lõi của chiến lược này là:

  1. Sử dụng SMA 3 giai đoạn làm tín hiệu giao dịch, mua dài khi SMA vượt trên 0, và mua ngắn khi SMA vượt dưới 0.

  2. Sau khi tham gia giao dịch, người dùng có thể tùy chỉnh mức dừng lỗ và tỷ lệ lợi nhuận.

  3. Dựa trên giá nhập cảnh và tỷ lệ dừng lỗ được thiết lập bởi người dùng, tự động thiết lập đường dừng lỗ.

  4. Dựa trên giá nhập cảnh và tỷ lệ lợi nhuận được thiết lập bởi người dùng, tự động thiết lập dòng lợi nhuận.

  5. Khi giá chạm vào đường dừng lỗ, dừng lại tự động.

  6. Sau khi đóng các vị trí, tự động hủy lệnh dừng lỗ và nhận lệnh lợi nhuận.

Cụ thể, chiến lược tính toán SMA 3 giai đoạn bằng hàm sma và gán nó cho biến ma.

Sau đó, nó tính toán chiều dài đường nhập dài, đó là ma cộng với ma% của lo. lo là một tham số có thể điều chỉnh bởi người dùng cho sự dịch chuyển đường nhập dài.

Khi ma vượt trên 0, nó báo hiệu một bước vào dài. Chiến lược nhập dài bằng cách sử dụng hàm strategy.entry với giá nhập được đặt thành dài.

Đồng thời, giá dừng lỗ và giá lấy lợi nhuận được thiết lập. Giá dừng lỗ là giá nhập trừ giá nhập% của sl. sl là tham số tỷ lệ dừng lỗ có thể điều chỉnh bởi người dùng. Giá lấy lợi nhuận là giá nhập cộng với giá nhập% của tp. tp là tham số tỷ lệ lấy lợi nhuận có thể điều chỉnh bởi người dùng.

Chức năng Strategy.entry đặt lệnh dừng lỗ và lấy lợi nhuận riêng biệt. Khi giá chạm vào đường dừng lỗ, nó sẽ dừng lại tự động. Khi giá chạm vào đường lấy lợi nhuận, nó sẽ lấy lợi nhuận tự động.

Sau khi đóng các vị trí, lệnh dừng lỗ và lệnh lấy lợi nhuận được hủy tự động bằng cách sử dụng chức năng strategy.cancel.

Ưu điểm

Những lợi thế của chiến lược này:

  1. Độ tự động cao, không cần can thiệp bằng tay, phù hợp với giao dịch thuật toán.

  2. Có thể tùy chỉnh tỷ lệ dừng lỗ và lợi nhuận để kiểm soát rủi ro.

  3. Các tín hiệu giao dịch đến từ chỉ báo, tránh phá vỡ sai.

  4. Hình ảnh dừng lỗ và lấy lợi nhuận, trực quan.

  5. Đơn giản và rõ ràng chiến lược logic, dễ hiểu và thực hiện.

Rủi ro và giải pháp

Ngoài ra còn có một số rủi ro với chiến lược này:

  1. Rủi ro của tín hiệu sai từ chỉ số.

  2. Giải pháp là điều chỉnh tỷ lệ cho các thị trường khác nhau.

  3. Giải pháp là lọc các tín hiệu nhập vào theo xu hướng, khối lượng v.v.

  4. Giải pháp là giảm kích thước vị trí hoặc sử dụng stop loss.

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

Một số hướng để tối ưu hóa chiến lược:

  1. Tối ưu hóa các thông số trung bình động để đảm bảo độ tin cậy.

  2. Tối ưu hóa điều kiện nhập để tránh đột phá sai, thêm xác nhận khối lượng vv

  3. Tối ưu hóa stop loss và lấy lợi nhuận, sử dụng stop loss động hoặc trailing vv

  4. Tối ưu hóa quản lý rủi ro, điều chỉnh kích thước vị trí, giảm rủi ro giao dịch duy nhất.

  5. Tối ưu hóa thời gian nhập cảnh, kết hợp với xu hướng, hỗ trợ / kháng cự vv

  6. Thêm kim tự tháp cho lợi nhuận tổng hợp.

  7. Tối ưu hóa tham số cho các sản phẩm cụ thể.

Kết luận

Chiến lược này cung cấp một khuôn khổ kỹ thuật đơn giản và đáng tin cậy để dừng lỗ dựa trên chỉ số và kiếm lợi nhuận với những lợi thế như tự động hóa và kiểm soát rủi ro. Nó phù hợp với giao dịch thuật toán. Ngoài ra còn có nhiều khía cạnh có thể được cải thiện và tối ưu hóa, chẳng hạn như các tham số chỉ số, bộ lọc nhập cảnh, chiến lược dừng lỗ / lấy lợi nhuận, quản lý rủi ro vv. Với các mở rộng và tối ưu hóa hơn nữa, nó có thể trở thành một chiến lược giao dịch mạnh mẽ hơn.


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

//@version=4
strategy("example for panel signals", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//https://www.tradingview.com/script/m2a04xmb-noro-s-shiftma-tp-sl-strategy/
//Settings
lo = input(-5.0, title = "Long-line, %")
tp = input(5.0, title = "Take-profit")
sl = input(2.0, title = "Stop-loss")

//SMA
ma = sma(ohlc4, 3)
long = ma + ((ma / 100) * lo)

//Orders
avg = strategy.position_avg_price
if ma > 0
    strategy.entry("Long", strategy.long, limit = long)
    strategy.entry("Take", strategy.short, 0, limit = avg + ((avg / 100) * tp))
    strategy.entry("Stop", strategy.short, 0, stop = avg - ((avg / 100) * sl))
    
//Cancel order
if strategy.position_size == 0
    strategy.cancel("Take")
    strategy.cancel("Stop")

//Lines
plot(long, offset = 1, color = color.black, transp = 0)
take = avg != 0 ? avg + ((avg / 100) * tp) : long + ((long / 100) * tp)
stop = avg != 0 ? avg - ((avg / 100) * sl) : long - ((long / 100) * sl)
takelinecolor = avg == avg[1] and avg != 0 ? color.lime : na
stoplinecolor = avg == avg[1] and avg != 0 ? color.red : na
plot(take, offset = 1, color = takelinecolor, linewidth = 3, transp = 0)
plot(stop, offset = 1, color = stoplinecolor, linewidth = 3, transp = 0)
//
disp_panels = input(true, title="Display info panels?")
h=high
info_label_off = input(20, title="Info panel offset")
info_label_size = input(size.large, options=[size.tiny, size.small, size.normal, size.large, size.huge], title="Info panel label size")
info_panel_x = timenow + round(change(time)*info_label_off)
info_panel_y = h

info_title= "-=-=-=-=- Info Panel -=-=-=-=-"
info_div = "\n\n------------------------------"
a = "\n\ Long : " + tostring(long)
b = "\n\ Stop loss : " + tostring(stop)
c = "\n\ TP : " + tostring(take)
// info_text = a+c+b
// info_panel = disp_panels ? label.new(x=info_panel_x, y=info_panel_y, text=info_text, xloc=xloc.bar_time, yloc=yloc.price, color=color.yellow, style=label.style_labelup, textcolor=color.black, size=info_label_size) : na
// label.delete(info_panel[1])




Thêm nữa