Chiến lược dừng lỗ và chốt lời dựa trên giá


Ngày tạo: 2023-11-23 15:36:00 sửa đổi lần cuối: 2023-11-23 15:36:00
sao chép: 0 Số nhấp chuột: 672
1
tập trung vào
1617
Người theo dõi

Chiến lược dừng lỗ và chốt lời dựa trên giá

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 để thiết lập số điểm dừng lỗ hợp lý, quản lý rủi ro và lợi nhuận cho mỗi giao dịch.

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

Chiến lược này được thiết lập đầu tiên với một tín hiệu nhập vào ngẫu nhiên, làm nhiều khi SMA14 đi qua SMA28 và trống khi SMA14 đi qua SMA28.

Sau khi nhập, chiến lược sử dụng hàm moneyToSLPoints để tính toán số điểm dừng tương ứng dựa trên số tiền dừng nhập, đồng thời tính toán số điểm dừng. Như vậy, thiết lập điểm dừng dựa trên số tiền đô la được thực hiện.

Ví dụ, nếu vào chơi thêm 100 bàn tay, mỗi điểm có giá trị 10 đô la và thiết lập lỗ hổng là 100 đô la, thì số điểm dừng lỗ sẽ được thiết lập là 100/10/100 = 0,1 điểm.

Cuối cùng, hãy sử dụng strategy.exit để thiết lập điểm dừng lỗ và điểm xuất cảnh. Cùng lúc vẽ đồ họa đường dừng lỗ và đường dừng để tham khảo.

Phân tích lợi thế

Chiến lược này dựa trên giá dừng lỗ, lợi thế lớn nhất là thiết lập tham số trực quan, có thể trực quan nhìn thấy mối quan hệ giữa rủi ro và lợi nhuận, để lựa chọn tham số.

Ngoài ra, so với điểm dừng, USD dừng có thể kiểm soát tốt hơn các lỗ hổng rủi ro thực tế. Khi thị trường biến động, USD dừng có thể bảo vệ tốt hơn các quỹ.

Phân tích rủi ro

Tuy nhiên, chiến lược dừng lỗ này cũng có một số rủi ro:

  1. Điểm dừng quá rộng có thể dễ bị mắc kẹt. Nếu dừng quá xa, khả năng đảo ngược đường ngắn của thị trường sẽ lớn hơn, dễ bị mắc kẹt và không thể dừng lỗ.

  2. Nếu điểm dừng quá gần thì khó kiếm lợi nhuận. Nếu điểm dừng quá gần thì không thể đạt được một hành động đơn phương bình thường, rất khó kiếm lợi nhuận.

  3. Cần lựa chọn hợp đồng hợp lý. Nếu lựa chọn hợp đồng có giá trị điểm quá lớn, ví dụ như dầu thô, thì đồng USD sẽ bị dừng lại, điểm tương ứng sẽ rất nhỏ và dễ bị trục xuất trong biến động thị trường. Điều này cần lựa chọn giá trị điểm hợp lý.

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:

  1. Các tín hiệu đầu vào có thể được tối ưu hóa, ví dụ như kết hợp các lựa chọn như xu hướng, biến động và tính theo mùa để có thời gian đầu vào tốt hơn.

  2. Có thể chọn tỷ lệ dừng lỗ thích hợp cho các loại khác nhau. Ví dụ: hàng hóa có thể được thiết lập để dừng lỗ thoải mái hơn.

  3. Có thể kết hợp với tỷ lệ dao động, dừng lỗ được nới lỏng thích hợp khi dao động tăng; dừng lỗ được thắt chặt thích hợp khi dao động giảm.

  4. Các chiến lược dừng lỗ khác nhau có thể được lựa chọn tùy thuộc vào các thời điểm khác nhau trong ngày giao dịch. Ví dụ, các chiến lược dừng lỗ được thắt chặt trong thời gian giao dịch của Hoa Kỳ, giảm khả năng bị đặt.

Tóm tắt

Chiến lược này thực hiện chức năng dừng lỗ trực quan bằng tham số số đô la. Ưu điểm của chiến lược là lựa chọn tham số và kiểm soát vốn là trực quan, nhược điểm là dễ bị đặt và khó kiếm lợi nhuận. Chúng ta có thể cải thiện từ thời gian nhập cảnh, tối ưu hóa tham số dừng lỗ, lựa chọn hợp đồng, để chiến lược có lợi nhuận ổn định hơn.

Mã nguồn chiến lược
/*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)