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

Chiến lược ATR siêu xu hướng

Tác giả:ChaoZhang, Ngày: 2024-03-29 11:29:15
Tags:

img

Tổng quan

Đây là một chiến lược dựa trên chỉ số Supertrend và chỉ số ATR. Ý tưởng chính của chiến lược này là sử dụng chỉ số Supertrend để xác định hướng xu hướng thị trường hiện tại và thực hiện giao dịch khi chỉ số Supertrend thay đổi. Đồng thời, chiến lược này sử dụng chỉ số ATR để tính giá dừng lỗ và lấy lợi nhuận, và tính kích thước vị trí dựa trên một tỷ lệ phần trăm nhất định của số dư tài khoản để kiểm soát rủi ro.

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

Các nguyên tắc của chiến lược này là như sau:

  1. Tính toán giá trị của chỉ số Supertrend và tạo tín hiệu mua hoặc bán khi chỉ số Supertrend thay đổi.
  2. Sử dụng chỉ số ATR để tính giá dừng lỗ và lấy lợi nhuận. Giá dừng lỗ là giá hiện tại cộng với hoặc trừ giá trị ATR nhân nhiều lần, và giá lấy lợi nhuận là giá dừng lỗ nhân tỷ lệ rủi ro-lợi nhuận.
  3. Tính toán kích thước vị trí dựa trên một tỷ lệ phần trăm nhất định của số dư tài khoản và giá dừng lỗ để kiểm soát rủi ro của mỗi giao dịch.
  4. Khi một tín hiệu mua được tạo ra, mở một vị trí dài, với giá dừng lỗ là giá mà tín hiệu được tạo ra trừ đi giá trị ATR nhân nhiều lần, và giá lấy lợi nhuận là giá mà tín hiệu được tạo ra cộng với giá trị ATR nhân nhiều lần và sau đó nhân tỷ lệ rủi ro-lợi nhuận.
  5. Khi một tín hiệu bán được tạo ra, mở một vị trí ngắn, với giá dừng lỗ là giá mà tín hiệu được tạo ra cộng với giá trị ATR nhân nhiều lần, và giá lấy lợi nhuận là giá mà tín hiệu được tạo ra trừ giá trị ATR nhân nhiều lần và sau đó nhân tỷ lệ rủi ro-lợi nhuận.

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

Những lợi thế của chiến lược này là như sau:

  1. Nó kết hợp các chỉ số theo xu hướng và biến động để nắm bắt hiệu quả xu hướng trong khi kiểm soát rủi ro.
  2. Kích thước vị trí được tính toán tự động dựa trên số dư tài khoản và mức độ rủi ro, mà không cần điều chỉnh thủ công, giúp thực hiện dễ dàng.
  3. Các thông số có thể được điều chỉnh linh hoạt để phù hợp với các thị trường và sản phẩm khác nhau.

Rủi ro chiến lược

Những rủi ro của chiến lược này là như sau:

  1. Trong một thị trường biến động, tín hiệu mua và bán thường xuyên có thể dẫn đến chi phí giao dịch cao và trượt.
  2. Tỷ lệ dừng lỗ cố định và tỷ lệ lấy lợi nhuận có thể không thích nghi với những thay đổi trên thị trường, dẫn đến dừng lỗ sớm hoặc lợi nhuận nhỏ.
  3. Việc tính toán kích thước vị trí phụ thuộc vào sự biến động trong quá khứ, có thể dẫn đến việc rút vốn lớn khi biến động đột ngột tăng lên.

Để giải quyết các rủi ro trên, các biện pháp sau đây có thể được thực hiện:

  1. Thêm nhiều điều kiện lọc tín hiệu để giảm tần suất giao dịch.
  2. Tối ưu hóa phương pháp tính toán stop loss và take profit, chẳng hạn như sử dụng trailing stop loss hoặc dynamic take profit.
  3. Tạo ra các yếu tố kiểm soát rủi ro trong tính toán vị trí, chẳng hạn như giảm vị trí khi biến động xảy ra.

Định hướng tối ưu hóa chiến lược

Chiến lược này có thể được tối ưu hóa trong các lĩnh vực sau:

  1. Đưa ra nhiều chỉ số kỹ thuật hơn, chẳng hạn như MACD, RSI, v.v., như là điều kiện phụ trợ để đánh giá xu hướng và lọc tín hiệu để cải thiện độ chính xác tín hiệu.
  2. Tối ưu hóa các thông số của chỉ số Supertrend và chỉ số ATR cho các thị trường và sản phẩm khác nhau để tìm ra sự kết hợp các thông số tốt nhất.
  3. Tạo thêm các yếu tố kiểm soát rủi ro trong tính toán vị trí, chẳng hạn như thu hút tài khoản tối đa, rủi ro tối đa cho mỗi giao dịch, v.v., để cải thiện độ vững chắc của chiến lược.
  4. Thêm các chiến lược lợi nhuận, chẳng hạn như lợi nhuận một phần, lợi nhuận sau lưng, v.v., để cho phép lợi nhuận tiếp tục tăng.

Các tối ưu hóa trên có thể cải thiện lợi nhuận và sự ổn định của chiến lược trong khi giảm rủi ro của nó, làm cho nó thích nghi hơn với môi trường thị trường khác nhau.

Tóm lại

Chiến lược này kết hợp chỉ số Supertrend và chỉ số ATR để nắm bắt hiệu quả xu hướng trong khi kiểm soát rủi ro. Bằng cách tính toán kích thước vị trí tối ưu, rủi ro của mỗi giao dịch có thể kiểm soát được. Tuy nhiên, chiến lược này có thể tạo ra chi phí giao dịch cao và rút tiền trong một thị trường biến động. Bằng cách giới thiệu nhiều chỉ số kỹ thuật hơn, tối ưu hóa các tham số, thêm các yếu tố kiểm soát rủi ro và cải thiện các chiến lược lấy lợi nhuận, hiệu suất của chiến lược này có thể được cải thiện hơn nữa. Nhìn chung, chiến lược này là một chiến lược theo xu hướng đơn giản và hiệu quả phù hợp để sử dụng trong các thị trường xu hướng.


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tradez99

//@version=5
strategy('Supertrend', overlay=true, format=format.price, precision=2)

Periods = input(title='ATR Period', defval=10)
src = input(hl2, title='Source')
Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=3.0)
changeATR = input(title='Change ATR Calculation Method ?', defval=true)
showsignals = input(title='Show Buy/Sell Signals ?', defval=true)
highlighting = input(title='Highlighter On/Off ?', defval=true)
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title='Up Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title='UpTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0))
plotshape(buySignal and showsignals ? up : na, title='Buy', text='Buy', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0))
dnPlot = plot(trend == 1 ? na : dn, title='Down Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title='DownTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))
plotshape(sellSignal and showsignals ? dn : na, title='Sell', text='Sell', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
mPlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? trend == 1 ? color.green : color.white : color.white
shortFillColor = highlighting ? trend == -1 ? color.red : color.white : color.white
//fill(mPlot, upPlot, title='UpTrend Highligter', color=longFillColor)
//fill(mPlot, dnPlot, title='DownTrend Highligter', color=shortFillColor)

multiplier = input.float(title="ATR multiplier", defval = 1.5)
rr           = input.float(title="Risk:Reward", defval=1.0)
riskPerTrade = input.float(title="Risk Per Trade %", defval=1.0)
atr3 = ta.atr(14)

//calculate stops and targets 
longstop = close - (atr3 * multiplier)
shortstop = close + (atr3 * multiplier)
longStopDistance  = close - longstop
shortStopDistance = shortstop - close
longTarget  = close + (longStopDistance * rr)
shortTarget = close - (shortStopDistance * rr)

// Save stops & targets
var t_stop = 0.0
var t_target = 0.0

longCondition = buySignal 
if (longCondition)
    t_stop := longstop
    t_target := longTarget
    positionSize = math.floor((strategy.equity * (riskPerTrade/100)) / (close - t_stop))
    strategy.entry("Long", strategy.long, qty = positionSize)

shortCondition = sellSignal 
if (shortCondition)
    t_stop := shortstop
    t_target := shortTarget
    positionSize = math.floor((strategy.equity * (riskPerTrade/100)) / (t_stop - close))  
    strategy.entry("Short", strategy.short, qty = positionSize)

strategy.exit(id="Long Exit", from_entry="Long", limit=t_target, stop=t_stop)
strategy.exit(id="Short Exit", from_entry="Short", limit=t_target, stop=t_stop)


Thêm nữa