Chiến lược xu hướng Alpha với Trailing Stop Loss

Tác giả:ChaoZhang, Ngày: 2023-11-27 15:25:35
Tags:

img

Tổng quan

Chiến lược Alpha Trend với Trailing Stop Loss là một phiên bản nâng cao của Chiến lược Alpha Trend bằng cách kết hợp cơ chế dừng lỗ, có thể kiểm soát rủi ro hiệu quả hơn và cải thiện lợi nhuận tổng thể.

Chiến lược logic

Chiến lược đầu tiên sử dụng chỉ số Alpha để xác định xu hướng giá. Khi chỉ số Alpha tăng, đó là một tín hiệu tăng. Khi chỉ số Alpha giảm, đó là một tín hiệu giảm. Chiến lược tạo ra tín hiệu mua và bán dựa trên đường chéo vàng và đường chéo chết của chỉ số Alpha.

Trong khi đó, một cơ chế dừng lỗ sau được bật. Mức dừng lỗ sau mặc định là 10% giá đóng cửa của ngày. Khi giữ các vị trí dài, nếu giá giảm xuống dưới mức dừng lỗ, chiến lược sẽ thoát khỏi vị trí để dừng lỗ. Tương tự với các vị trí ngắn. Điều này giúp khóa lợi nhuận tốt hơn và giảm rủi ro.

Phân tích lợi thế

  1. Xu hướng Alpha có khả năng xác định xu hướng giá mạnh hơn so với các đường trung bình động đơn giản và các chỉ số khác.

  2. Bằng cách cho phép dừng lỗ, lỗ giao dịch đơn có thể được kiểm soát hiệu quả, giảm rủi ro.

  3. Chiến lược này có khả năng kiểm soát rủi ro mạnh mẽ. Ngay cả trong điều kiện thị trường bất lợi, tổn thất vẫn có thể được giảm thiểu.

  4. Với ít đầu vào tham chiếu hơn, chiến lược này là hiệu quả để tính toán, phù hợp với giao dịch tần số cao.

Phân tích rủi ro

  1. Trong các thị trường giới hạn phạm vi bên, chiến lược có thể tạo ra nhiều tín hiệu giao dịch không cần thiết, làm tăng chi phí giao dịch và tổn thất trượt.

  2. Khi cho phép dừng lỗ cuối cùng, tỷ lệ dừng lỗ cần phải được thiết lập phù hợp. tỷ lệ quá cao hoặc thấp sẽ không thuận lợi cho lợi nhuận của chiến lược.

  3. Trong các giá dao động mạnh mẽ, xác suất dừng lỗ sẽ tăng đáng kể, làm tăng nguy cơ bị khóa trong các vị trí.

  4. Khi tối ưu hóa các thông số dừng lỗ, các yếu tố khác nhau bao gồm các đặc điểm cơ bản và tần suất giao dịch nên được xem xét, không chỉ theo đuổi lợi nhuận tối đa.

Các rủi ro trên có thể được giảm thiểu bằng cách điều chỉnh các tham số chỉ số Alpha, đặt dừng lỗ DYNAMIC, rút ngắn thời gian chu kỳ giao dịch, v.v.

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

  1. Các tham số chỉ số khác nhau có thể được thử nghiệm để tìm các kết hợp tham số chỉ số Alpha phù hợp hơn.

  2. Cố gắng thiết lập tỷ lệ phần trăm dừng lỗ dựa trên ATR để thích nghi tốt hơn với biến động thị trường.

  3. Kết hợp với các chỉ số khác như MACD, KD để lọc ra một số tín hiệu sai.

  4. Các tham số có thể được tối ưu hóa tự động dựa trên kết quả giao dịch trực tiếp và kiểm tra lại, sử dụng các kỹ thuật học máy để cải thiện trí thông minh của việc lựa chọn tham số.

Kết luận

Chiến lược xu hướng Alpha với Trailing Stop Loss kết hợp xác định xu hướng và kiểm soát rủi ro. Nó có thể xác định hiệu quả xu hướng giá và khóa lợi nhuận để giảm rủi ro. So với các chiến lược theo dõi xu hướng đơn giản, chiến lược này có thể có lợi nhuận ổn định cao hơn. Với các khía cạnh tối ưu hóa khác nhau, nó có tiềm năng đạt được hiệu suất thậm chí tốt hơn.


/*backtest
start: 2023-10-27 00:00:00
end: 2023-11-26 00:00:00
period: 1h
basePeriod: 15m
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/
// author © KivancOzbilgic
// developer © KivancOzbilgic
//@version=5

strategy("AlphaTrend Strategy", shorttitle='ATst', overlay=true, format=format.price, precision=2, margin_long=100, margin_short=100)
coeff = input.float(1, 'Multiplier', step=0.1)
AP = input(14, 'Common Period')
ATR = ta.sma(ta.tr, AP)
src = input(close)
showsignalsk = input(title='Show Signals?', defval=false)
novolumedata = input(title='Change calculation (no volume data)?', defval=false)
upT = low - ATR * coeff
downT = high + ATR * coeff
AlphaTrend = 0.0
AlphaTrend := (novolumedata ? ta.rsi(src, AP) >= 50 : ta.mfi(hlc3, AP) >= 50) ? upT < nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : upT : downT > nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : downT

color1 = AlphaTrend > AlphaTrend[1] ? #00E60F : AlphaTrend < AlphaTrend[1] ? #80000B : AlphaTrend[1] > AlphaTrend[3] ? #00E60F : #80000B
k1 = plot(AlphaTrend, color=color.new(#0022FC, 0), linewidth=3)
k2 = plot(AlphaTrend[2], color=color.new(#FC0400, 0), linewidth=3)

fill(k1, k2, color=color1)

buySignalk = ta.crossover(AlphaTrend, AlphaTrend[2])
sellSignalk = ta.crossunder(AlphaTrend, AlphaTrend[2])


K1 = ta.barssince(buySignalk)
K2 = ta.barssince(sellSignalk)
O1 = ta.barssince(buySignalk[1])
O2 = ta.barssince(sellSignalk[1])

plotshape(buySignalk and showsignalsk and O1 > K2 ? AlphaTrend[2] * 0.9999 : na, title='BUY', text='BUY', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(#0022FC, 0), textcolor=color.new(color.white, 0))

plotshape(sellSignalk and showsignalsk and O2 > K1 ? AlphaTrend[2] * 1.0001 : na, title='SELL', text='SELL', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.maroon, 0), textcolor=color.new(color.white, 0))


// //ENTER SOME SETUP TRADES FOR TSL EXAMPLE
// longCondition = ta.crossover(ta.sma(close, 10), ta.sma(close, 20))
// if longCondition
//     strategy.entry('My Long Entry Id', strategy.long)

// shortCondition = ta.crossunder(ta.sma(close, 10), ta.sma(close, 20))
// if shortCondition
//     strategy.entry('My Short Entry Id', strategy.short)



longCondition = buySignalk
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = sellSignalk
if (shortCondition)
    strategy.entry("Short", strategy.short)
    

enableTrailing = input.bool(title='Enable Trailing Stop (%)',defval = true)
//TRAILING STOP CODE
trailStop = input.float(title='Trailing (%)', minval=0.0, step=0.1, defval=10) * 0.01



longStopPrice = 0.0
shortStopPrice = 0.0
longStopPrice := if strategy.position_size > 0
    stopValue = close * (1 - trailStop)
    math.max(stopValue, longStopPrice[1])
else
    0
shortStopPrice := if strategy.position_size < 0
    stopValue = close * (1 + trailStop)
    math.min(stopValue, shortStopPrice[1])
else
    999999

//PLOT TSL LINES
plot(series=strategy.position_size > 0 ? longStopPrice : na, color=color.new(color.red, 0), style=plot.style_linebr, linewidth=1, title='Long Trail Stop', offset=1, title='Long Trail Stop')
plot(series=strategy.position_size < 0 ? shortStopPrice : na, color=color.new(color.red, 0), style=plot.style_linebr, linewidth=1, title='Short Trail Stop', offset=1, title='Short Trail Stop')

    
if enableTrailing
    //EXIT TRADE @ TSL
    if strategy.position_size > 0
        strategy.exit(id='Close Long', stop=longStopPrice)
    if strategy.position_size < 0
        strategy.exit(id='Close Short', stop=shortStopPrice)


 

Thêm nữa