Tài nguyên đang được tải lên... tải...

Chiến lược theo xu hướng tiên tiến với dừng theo dõi thích nghi

Tác giả:ChaoZhang, Ngày: 2024-12-20 14:12:05
Tags:ATRSLTS

img

Tổng quan

Đây là một chiến lược theo xu hướng dựa trên chỉ số Supertrend, kết hợp với một cơ chế dừng lỗ kéo dài thích nghi. Chiến lược chủ yếu sử dụng chỉ số Supertrend để xác định hướng xu hướng thị trường và sử dụng các điểm dừng kéo dài được điều chỉnh năng động để quản lý rủi ro và tối ưu hóa thời gian thoát. Nó hỗ trợ nhiều phương pháp dừng lỗ, bao gồm dừng dựa trên tỷ lệ phần trăm, dựa trên ATR và điểm cố định, cho phép điều chỉnh linh hoạt theo các điều kiện thị trường khác nhau.

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

Logic cốt lõi của chiến lược dựa trên các yếu tố chính sau:

  1. Sử dụng chỉ số Supertrend làm cơ sở chính để xác định xu hướng, kết hợp ATR (Medio True Range) để đo biến động thị trường
  2. Các tín hiệu nhập cảnh được kích hoạt bởi sự thay đổi hướng Supertrend, hỗ trợ giao dịch dài, ngắn hoặc song phương
  3. Cơ chế dừng lỗ sử dụng các điểm dừng sau thích nghi tự động điều chỉnh dựa trên biến động thị trường
  4. Hệ thống quản lý giao dịch bao gồm kích thước vị trí (thất định 15% vốn chủ sở hữu tài khoản) và các cơ chế lọc thời gian

Ưu điểm chiến lược

  1. Khả năng nắm bắt xu hướng mạnh mẽ: Xác định hiệu quả các xu hướng chính thông qua chỉ số Supertrend, giảm các tín hiệu sai
  2. Kiểm soát rủi ro toàn diện: Sử dụng các cơ chế dừng lỗ đa dạng phù hợp với các môi trường thị trường khác nhau
  3. Độ linh hoạt cao: Hỗ trợ cấu hình nhiều hướng giao dịch và phương pháp dừng lỗ
  4. Khả năng thích nghi mạnh mẽ: Chế độ dừng lại tự động điều chỉnh theo sự biến động của thị trường, tăng khả năng thích nghi chiến lược
  5. Hệ thống backtesting hoàn chỉnh: Chức năng lọc thời gian tích hợp để phân tích hiệu suất lịch sử

Rủi ro chiến lược

  1. Rủi ro đảo ngược xu hướng: Có thể xảy ra tín hiệu sai trong các thị trường biến động cao
  2. Rủi ro trượt: Việc thực hiện lệnh dừng kéo dài có thể bị ảnh hưởng bởi thanh khoản thị trường
  3. Độ nhạy của các tham số: yếu tố siêu xu hướng và cài đặt thời gian ATR ảnh hưởng đáng kể đến hiệu suất chiến lược
  4. Sự phụ thuộc vào môi trường thị trường: Giao dịch thường xuyên trên các thị trường khác nhau có thể làm tăng chi phí

Hướng dẫn tối ưu hóa chiến lược

  1. Tối ưu hóa lọc tín hiệu: Các chỉ số kỹ thuật bổ sung có thể được thêm vào để lọc tín hiệu sai
  2. Tối ưu hóa quản lý vị trí: Kích thước vị trí có thể được điều chỉnh năng động dựa trên biến động thị trường
  3. Cải thiện cơ chế dừng lỗ: Logic dừng lỗ phức tạp hơn có thể được thiết kế kết hợp giá trung bình chi phí
  4. Tối ưu hóa thời gian nhập cảnh: Phân tích cấu trúc giá có thể được thêm để cải thiện độ chính xác nhập cảnh
  5. Cải thiện hệ thống kiểm tra hậu quả: Có thể thêm nhiều chỉ số thống kê để đánh giá hiệu suất chiến lược

Tóm lại

Đây là một xu hướng được thiết kế tốt theo chiến lược có rủi ro có thể kiểm soát được. Bằng cách kết hợp chỉ số Supertrend với các cơ chế dừng lỗ linh hoạt, chiến lược có thể duy trì lợi nhuận cao trong khi kiểm soát rủi ro một cách hiệu quả. Chiến lược có thể cấu hình cao và phù hợp để sử dụng trong các môi trường thị trường khác nhau, nhưng đòi hỏi tối ưu hóa tham số kỹ lưỡng và xác minh backtesting. Những cải tiến trong tương lai có thể được thực hiện bằng cách thêm nhiều công cụ phân tích kỹ thuật và các biện pháp kiểm soát rủi ro để tăng cường sự ổn định và lợi nhuận của chiến lược.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Supertrend Strategy with Adjustable Trailing Stop [Bips]", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=15)

// Inputs
atrPeriod = input(10, "ATR Länge", "Average True Range „wahre durchschnittliche Schwankungsbreite“ und stammt aus der technischen Analyse. Die ATR misst die Volatilität eines Instruments oder eines Marktes. Mit ihr kann die Wahrscheinlichkeit für einen Trendwechsel bestimmt werden.", group="Supertrend Settings")
factor = input.float(3.0, "Faktor", step=0.1, group="Supertrend Settings")
tradeDirection = input.string("Long", "Trade Direction", options=["Both", "Long", "Short"], group="Supertrend Settings")
sl_type    = input.string("%", "SL Type", options=["%", "ATR", "Absolute"])
// Parameter für ST nur für einstieg -> Beim Ausstieg fragen ob der bool WWert true ist -> Für weniger und längere Trädes 

sl_perc    = input.float(4.0, "% SL", group="Stop Loss Einstellung")
atr_length = input.int(10, "ATR Length", group="Stop Loss Einstellung")
atr_mult   = input.float(2.0, "ATR Mult", group="Stop Loss Einstellung")
sl_absol   = input.float(10.0, "Absolute SL", group="Stop Loss Einstellung")

//-------------------------//
// BACKTESTING RANGE
fromDay   = input.int(defval=1, title="From Day", minval=1, maxval=31, group="Backtesting Einstellung")
fromMonth = input.int(defval=1, title="From Month", minval=1, maxval=12, group="Backtesting Einstellung")
fromYear  = input.int(defval=2016, title="From Year", minval=1970, group="Backtesting Einstellung")
toDay     = input.int(defval=1, title="To Day", minval=1, maxval=31, group="Backtesting Einstellung")
toMonth   = input.int(defval=1, title="To Month", minval=1, maxval=12, group="Backtesting Einstellung")
toYear    = input.int(defval=2100, title="To Year", minval=1970, group="Backtesting Einstellung")

startDate  = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond  = time >= startDate and time <= finishDate

//-------------------------//
// Supertrend calculation
[_, direction] = ta.supertrend(factor, atrPeriod)

// SL values
sl_val = sl_type == "ATR"      ? atr_mult * ta.atr(atr_length) : 
         sl_type == "Absolute" ? sl_absol : 
         close * sl_perc / 100
         
// Init Variables
var pos         = 0
var float trailing_sl = 0.0

// Signals
long_signal  = nz(pos[1]) !=  1 and high > nz(trailing_sl[1])
short_signal = nz(pos[1]) != -1 and low  < nz(trailing_sl[1]) 

// Calculate SL
trailing_sl := short_signal     ? high + sl_val : 
               long_signal      ? low  - sl_val : 
               nz(pos[1]) ==  1 ? math.max(low  - sl_val, nz(trailing_sl[1])) :  
               nz(pos[1]) == -1 ? math.min(high + sl_val, nz(trailing_sl[1])) : 
               nz(trailing_sl[1])
               
// Position var               
pos := long_signal  ? 1 : short_signal ? -1 : nz(pos[1]) 

// Entry logic
if ta.change(direction) < 0 and time_cond
    if tradeDirection == "Both" or tradeDirection == "Long"
        strategy.entry("Long", strategy.long, stop=trailing_sl)
    else
        strategy.close_all("Stop Short")

if ta.change(direction) > 0 and time_cond
    if tradeDirection == "Both" or tradeDirection == "Short"
        strategy.entry("Short", strategy.short, stop=trailing_sl)
    else
        strategy.close_all("Stop Long")

// Exit logic: Trailing Stop and Supertrend
//if strategy.position_size > 0 and not na(trailing_sl)
    //strategy.exit("SL-Exit Long", from_entry="Long", stop=trailing_sl)

//if strategy.position_size < 0 and not na(trailing_sl)
    //strategy.exit("SL-Exit Short", from_entry="Short", stop=trailing_sl)

// Trailing Stop visualization
plot(trailing_sl, linewidth = 2, color = pos == 1 ? color.green : color.red)
//plot(not na(trailing_sl) ? trailing_sl : na, color=pos == 1 ? color.green : color.red, linewidth=2, title="Trailing Stop")


Có liên quan

Thêm nữa