Chiến lược dừng lỗ theo dõi động


Ngày tạo: 2023-12-21 15:58:54 sửa đổi lần cuối: 2023-12-21 15:58:54
sao chép: 1 Số nhấp chuột: 761
1
tập trung vào
1623
Người theo dõi

Chiến lược dừng lỗ theo dõi động

Tổng quan

Chiến lược này dựa trên đường nắng để xác định hướng xu hướng, sau đó sử dụng các điểm cao hoặc thấp mới được hình thành từ đường K 15 phút làm điểm dừng lỗ hoặc theo dõi điểm dừng lỗ, thực hiện các chiến lược điều chỉnh động để khóa nhiều lợi nhuận hơn.

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

  1. Sử dụng giá đóng cửa của ngày K và giá cao nhất của ngày trước để so sánh giá thấp nhất, để xác định hướng xu hướng. Nếu giá đóng cửa cao hơn giá cao nhất của ngày trước, nó được định nghĩa là xu hướng tăng; Nếu giá đóng cửa thấp hơn giá thấp nhất của ngày trước, nó được định nghĩa là xu hướng giảm.

  2. Trong xu hướng tăng, khi giá tròn 15 phút của đường K cao hơn giá cao nhất của đường K 15 phút trước đó, hãy làm nhiều; trong xu hướng giảm, khi giá tròn 15 phút của đường K thấp hơn giá thấp nhất của đường K 15 phút trước đó, hãy làm giảm.

  3. Sau khi thực hiện thêm, giá thấp nhất của dòng K 15 phút trước đó là điểm dừng chân. Sau khi làm giảm giá, giá cao nhất của dòng K 15 phút trước đó là điểm dừng chân.

  4. Khi đường K 15 phút tạo ra một điểm cao hoặc thấp mới, điều chỉnh điểm dừng. Điều chỉnh mức thấp mới khi làm nhiều, điều chỉnh mức cao mới khi làm trống, thực hiện dừng theo dõi động.

Phân tích lợi thế

Ưu điểm lớn nhất của chiến lược này là có thể điều chỉnh động mức dừng lỗ, khóa lợi nhuận tối đa trong khi đảm bảo kiểm soát rủi ro, giảm khả năng dừng lỗ bị va đập.

Những ưu điểm cụ thể là:

  1. Dựa trên tính toán xu hướng, bạn có thể đánh giá thị trường và chọn đúng hướng giao dịch.

  2. Giao dịch ở cấp độ 15 phút, có thể xuất hiện thường xuyên và nắm bắt nhiều cơ hội hơn.

  3. Động thái điều chỉnh chiến lược dừng lỗ, có thể làm giảm nguy cơ bị va chạm theo mức cao mới hoặc thấp mới.

  4. Cài đặt vị trí dừng thiệt hại hợp lý, tối đa tránh thiệt hại không cần thiết.

Phân tích rủi ro

Rủi ro chính của chiến lược này đến từ những sai lầm trong đánh giá xu hướng. Các điểm rủi ro cụ thể như sau:

  1. Những người tham gia có thể bị ảnh hưởng bởi sự sai lệch trong việc đánh giá xu hướng, có thể dẫn đến sai hướng giao dịch.

  2. Trong trường hợp giao dịch có biến động mạnh trong thời gian ngắn, có khả năng phá vỡ mức dừng lỗ 15 phút.

  3. Không xác định được điểm biến động của xu hướng có thể dẫn đến tổn thất.

Các giải pháp tương ứng là:

  1. Thêm các chỉ số khác trong chu kỳ thời gian để đưa ra phán đoán tổng hợp, tránh mắc lỗi chỉ với một chu kỳ duy nhất.

  2. Đánh giá sự biến động của thị trường và giảm phạm vi dừng lỗ thích hợp khi có biến động lớn.

  3. Tăng cơ chế đánh giá điểm chuyển hướng và thanh toán trước khi chuyển hướng.

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

Chiến lược này có thể được tối ưu hóa hơn nữa:

  1. Thêm các chỉ số khác để đánh giá và tối ưu hóa xu hướng.

  2. Kiểm tra các thiết lập tỷ lệ dừng khác nhau, chọn tham số tối ưu.

  3. Tăng chỉ số năng lượng, tránh sai lệch năng lượng dẫn đến giao dịch sai.

  4. Thêm một cơ chế biến đổi xu hướng, tối ưu hóa điểm thoát.

  5. Đánh giá tăng phạm vi Trailing Stop để giảm thêm khả năng bị va đập.

Tóm tắt

Chiến lược này hoạt động tốt, dễ hiểu, có lợi thế như điều chỉnh động lực dừng lỗ, giao dịch thường xuyên, tiến triển, có thể kiểm soát rủi ro và khóa lợi nhuận một cách hiệu quả, đáng để thử nghiệm và tối ưu hóa hơn nữa. Tuy nhiên, cũng có một số không gian cải tiến, khuyến nghị bắt đầu từ nhiều góc độ đánh giá tổng hợp, thiết lập tham số tối ưu hóa, tăng phán đoán biến đổi xu hướng để tăng cường sự ổn định và lợi nhuận của chiến lược.

Mã nguồn chiến lược
/*backtest
start: 2023-12-13 00:00:00
end: 2023-12-15 02:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Anand's Strategy", overlay=true)

// Get the high and low of the previous day's candle
prev_high = request.security(syminfo.tickerid, "D", high[2])
prev_low = request.security(syminfo.tickerid, "D", low[2])

// var float prev_high = na
// var float prev_low = na

prev_close = request.security(syminfo.tickerid, "D", close[1])


getDayIndexedHighLow(_bar) =>
    _indexed_high = request.security(syminfo.tickerid, "D", high[_bar])
    _indexed_low = request.security(syminfo.tickerid, "D", low[_bar])
    [_indexed_high, _indexed_low]

var index = 2

while index >= 0
    [indexed_high_D, indexed_low_D] =  getDayIndexedHighLow(index)
  
    if prev_close > indexed_high_D or prev_close < indexed_low_D
        prev_high := indexed_high_D
        prev_low := indexed_low_D
        break
    // Decrease the index to move to the previous 15-minute candle
    index := index - 1


// Determine the trade direction based on the candle criterion
trade_direction = prev_close > prev_high ? 1 : (prev_close < prev_low ? -1 : 0)

// Get the current close from 15-minute timeframe
current_close = request.security(syminfo.tickerid, "15", close[1])
prev_high_15m = request.security(syminfo.tickerid, "15", high[2])
prev_low_15m = request.security(syminfo.tickerid, "15", low[2])

// var float prev_high_15m = na
// var float prev_low_15m = na

getIndexedHighLow(_bar) =>
    _indexed_high = request.security(syminfo.tickerid, "15", high[_bar])
    _indexed_low = request.security(syminfo.tickerid, "15", low[_bar])
    [_indexed_high, _indexed_low]


// Loop through previous 15-minute candles until the condition is met
var  i = 2

while i >= 2
    [indexed_high_15m, indexed_low_15m] =  getIndexedHighLow(i)
  
    if current_close > indexed_high_15m or current_close < indexed_low_15m
        prev_high_15m := indexed_high_15m
        prev_low_15m := indexed_low_15m
        break
    // Decrease the index to move to the previous 15-minute candle
    i := i - 1



buy_condition = trade_direction == 1 and current_close > prev_high_15m
stop_loss_buy = prev_low_15m

// Sell Trade Criteria in Negative Trend
sell_condition = trade_direction == -1 and current_close < prev_low_15m
stop_loss_sell = prev_high_15m


// Trailing Stop Loss for Buy Trade
// Custom Trailing Stop Function for Buy Trade
var float trail_stop_buy = na
trailing_buy_condition = buy_condition and current_close > trail_stop_buy
if trailing_buy_condition
    trail_stop_buy := current_close

// Custom Trailing Stop Function for Sell Trade
var float trail_stop_sell = na
trailing_sell_condition = sell_condition and current_close < trail_stop_sell
if trailing_sell_condition
    trail_stop_sell := current_close

// Take Buy Trade with Stop Loss
if (buy_condition)
    strategy.entry("Buy", strategy.long)
    strategy.exit("Buy Stop Loss", "Buy", stop=stop_loss_buy)

// Take Sell Trade with Stop Loss
if (sell_condition)
    strategy.entry("Sell", strategy.short)
    strategy.exit("Sell Stop Loss", "Sell", stop=stop_loss_sell)

// Set the background color based on the trade direction
bgcolor(trade_direction == 1 ? color.new(color.green, 90) : trade_direction == -1 ? color.new(color.red, 90) : na)