Chiến lược dừng lỗ và lấy lợi nhuận dựa trên giá

Tác giả:ChaoZhang, Ngày: 2023-11-23 15:36:00
Tags:

img

Tổng quan

Ý tưởng cốt lõi của chiến lược này là sử dụng số tiền dừng lỗ đầu vào và lấy lợi nhuận để thiết lập mức dừng lỗ hợp lý và lấy lợi nhuận, để quản lý rủi ro và lợi nhuận của mỗi giao dịch.

Chiến lược logic

Chiến lược đầu tiên thiết lập các tín hiệu nhập vào ngẫu nhiên, đi dài khi SMA14 vượt qua SMA28, và đi ngắn khi SMA14 vượt qua dưới SMA28.

Sau khi nhập, chiến lược sử dụng hàm moneyToSLPoints để tính mức chấm dừng lỗ dựa trên số tiền nhập bằng đô la. Tương tự, nó cũng tính mức chấm lấy lợi nhuận. Điều này thực hiện chấm dứt lỗ và lấy lợi nhuận dựa trên số tiền đô la.

Ví dụ, nếu mua dài 100 hợp đồng với mỗi dấu chấm có giá trị 10 đô la và dừng lỗ được đặt ở mức 100 đô la, thì mức dấu chấm chấm sẽ được tính là 100/10/100 = 0,1 dấu chấm.

Cuối cùng.strategy.exitđược sử dụng để thiết lập điểm dừng lỗ và lấy lợi nhuận. Các đường dừng lỗ và lấy lợi nhuận cũng được vẽ cho mục đích gỡ lỗi.

Phân tích lợi thế

Ưu điểm lớn nhất của chiến lược dừng lỗ và lấy lợi nhuận dựa trên giá là các tham số trực quan. Mối quan hệ giữa rủi ro và phần thưởng có thể được nhìn thấy rõ ràng để hướng dẫn lựa chọn tham số.

Ngoài ra, các điểm dừng bằng số tiền đô la có thể kiểm soát tốt hơn sự tiếp xúc rủi ro thực tế so với các điểm dừng cố định khi biến động thị trường thay đổi.

Phân tích rủi ro

Có một số rủi ro với chiến lược dừng lỗ và lấy lợi nhuận này:

  1. Nếu stop loss quá rộng, bạn dễ bị bắt trong những lần đảo ngược. Nếu stop distance quá lớn, những lần đảo ngược ngắn hạn trở nên có khả năng và có thể bắt được giao dịch.

  2. Nếu khoảng cách lấy lợi nhuận là rất nhỏ, sẽ rất khó cho các xu hướng đơn phương bình thường để đạt được nó, làm cho lợi nhuận không có khả năng.

  3. Các hợp đồng thích hợp cần phải được lựa chọn. Nếu một hợp đồng giá trị cao như dầu thô được sử dụng, cùng một đô la dừng lỗ sẽ dịch thành rất ít các dấu hiệu, mà có thể dễ dàng bị dừng lại trên tiếng ồn.

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

Một số cách để cải thiện chiến lược này:

  1. Tín hiệu nhập cảnh có thể được tăng cường bằng cách kết hợp xu hướng, biến động, tính theo mùa v.v. với các mục nhập thời gian tốt hơn.

  2. Các tỷ lệ dừng/lợi nhuận phù hợp có thể được chọn dựa trên các sản phẩm khác nhau.

  3. Các điểm dừng có thể thích nghi với biến động, mở rộng khi biến động tăng và thắt chặt khi biến động giảm.

  4. Các phương pháp dừng/lợi nhuận khác nhau có thể được sử dụng cho các phiên giao dịch khác nhau.

Kết luận

Chiến lược này thực hiện dừng lỗ trực quan và lấy lợi nhuận dựa trên số tiền đô la. Ưu điểm của nó là các tham số trực quan và kiểm soát vốn. Nhược điểm là dễ bị mắc kẹt trong sự đảo ngược và mất lợi nhuận. Nó có thể được cải thiện bằng cách tăng cường các mục nhập, tối ưu hóa dừng / mục tiêu, chọn các sản phẩm tốt hơn vv để làm cho nó ổn định hơn.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © adolgov

// @description
// 

//@version=4
strategy("Stop loss and Take Profit in $$ example", overlay=true)

// random entry condition

longCondition = crossover(sma(close, 14), sma(close, 28))
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = crossunder(sma(close, 14), sma(close, 28))
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)

moneyToSLPoints(money) =>
    strategy.position_size !=0 ? (money / syminfo.pointvalue / abs(strategy.position_size)) / syminfo.mintick : na

p = moneyToSLPoints(input(200, title = "Take Profit $$"))
l = moneyToSLPoints(input(100, title = "Stop Loss $$"))
strategy.exit("x", profit = p, loss = l)

// debug plots for visualize SL & TP levels
pointsToPrice(pp) =>
    na(pp) ? na : strategy.position_avg_price + pp * sign(strategy.position_size) * syminfo.mintick
    
pp = plot(pointsToPrice(p), style = plot.style_linebr )
lp = plot(pointsToPrice(-l), style = plot.style_linebr )
avg = plot( strategy.position_avg_price, style = plot.style_linebr )
fill(pp, avg, color = color.green)
fill(avg, lp, color = color.red)

Thêm nữa