AlphaTrend Adaptive ATR Channel Breakout chiến lược

Tác giả:ChaoZhang, Ngày: 2023-09-11 14:27:54
Tags:

Chiến lược AlphaTrend sử dụng một kênh ATR thích nghi để nắm bắt hướng xu hướng giá và theo dõi xu hướng dựa trên sự đột phá của kênh. Cụ thể, nó xây dựng một kênh năng động dựa trên ATR, với dải trên là giá trị ATR thấp trừ và dải dưới là giá trị ATR cao cộng. Các mục dài được thực hiện khi giá phá vỡ trên dải trên và các mục ngắn được thực hiện khi giá phá vỡ dưới dải dưới.

ATR phản ánh sự biến động và động lực của thị trường trong thời gian thực. Kênh được hình thành bởi các dải trên và dưới có thể đo đạc động lực và sức mạnh của giá. Breakout báo hiệu khả năng đảo ngược xu hướng hoặc tăng tốc, làm cho nó hợp lý để theo dõi xu hướng. Lợi thế của AlphaTrend là sử dụng khả năng thích nghi của ATR để nắm bắt sự thay đổi giá, đồng thời kết hợp các chỉ số khác như RSI để xác định hướng xu hướng, cải thiện độ chính xác nhập cảnh.

Tuy nhiên, một số vấn đề cần được lưu ý. ATR tự nó có đặc điểm chậm trễ, có thể gây ra các mục nhập sau khi đảo ngược xu hướng. Ngoài ra, không sử dụng stop loss dẫn đến giảm lớn. Cuối cùng, các thông số như thời gian ATR cần tối ưu hóa cho các sản phẩm và khung thời gian khác nhau.

Tóm lại, AlphaTrend có những điểm mạnh độc đáo trong việc xác định các điểm đảo ngược xu hướng năng động, nhưng quản lý rủi ro nghiêm ngặt vẫn được yêu cầu cho giao dịch trực tiếp, bao gồm sử dụng dừng, định kích thước vị trí và điều chỉnh tham số.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-04-10 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"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[2] ? #00E60F : AlphaTrend < AlphaTrend[2] ? #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))


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

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

Thêm nữa