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.
Logic cốt lõi của chiến lược này là:
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.
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.
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ỗ.
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.
Khi giá chạm vào đường dừng lỗ, dừng lại tự động.
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.
Những lợi thế của chiến lược này:
Độ 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.
Có thể tùy chỉnh tỷ lệ dừng lỗ và lợi nhuận để kiểm soát rủi ro.
Các tín hiệu giao dịch đến từ chỉ báo, tránh phá vỡ sai.
Hình ảnh dừng lỗ và lấy lợi nhuận, trực quan.
Đơn giản và rõ ràng chiến lược logic, dễ hiểu và thực hiện.
Ngoài ra còn có một số rủi ro với chiến lược này:
Rủi ro của tín hiệu sai từ chỉ số.
Giải pháp là điều chỉnh tỷ lệ cho các thị trường khác nhau.
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.
Giải pháp là giảm kích thước vị trí hoặc sử dụng stop loss.
Một số hướng để tối ưu hóa chiến lược:
Tối ưu hóa các thông số trung bình động để đảm bảo độ tin cậy.
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
Tối ưu hóa stop loss và lấy lợi nhuận, sử dụng stop loss động hoặc trailing vv
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.
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
Thêm kim tự tháp cho lợi nhuận tổng hợp.
Tối ưu hóa tham số cho các sản phẩm cụ thể.
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])