Honey Trend ATR Breakout chiến lược

Tác giả:ChaoZhang, Ngày: 2023-12-06 18:03:38
Tags:

img

Tổng quan

Chiến lược Breakout ATR Honey Trend là một chiến lược breakout trung hạn dựa trên chỉ số ATR và Bollinger Bands để tạo tín hiệu giao dịch. Nó chủ yếu theo dõi sự thay đổi xu hướng của giá cổ phiếu trong một chiều rộng nhất định của các kênh ATR trên và dưới. Khi giá vượt qua đường ray dưới hoặc trên, kết hợp với lọc xu hướng, nó đưa ra quyết định giao dịch.

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

Chiến lược bao gồm ba phần chính:

  1. Kênh ATR: Tính toán phạm vi biến động của giá cổ phiếu thông qua chỉ số ATR và tạo ra một kênh lên và xuống trong phạm vi này.

  2. Đường Bee: lấy đường trung của giá cổ phiếu làm đường cơ sở. Phương pháp tính toán đường trung là: giá trị trung bình của giá cao, thấp và đóng ngày hôm qua.

  3. Chế độ lọc xu hướng: Tính toán xu hướng giá thông qua chỉ số DMI và thiết lập chu kỳ tín hiệu. Khi pricesig >: pricesig[3], xu hướng tăng. Khi pricesig < pricesig[3], xu hướng giảm.

Logic cụ thể để tạo ra tín hiệu giao dịch là:

Tín hiệu dài: pricesig > pricesig [3] và giá phá vỡ qua đường ray dưới của kênh.

Tín hiệu ngắn: pricesig < pricesig [3] và giá phá vỡ qua đường ray trên của kênh.

Không giao dịch trong những tình huống khác.

Chiến lược cũng thiết lập các điều kiện dừng lợi nhuận và dừng lỗ để kiểm soát rủi ro giao dịch.

Phân tích lợi thế

Chiến lược Breakout Honey Trend ATR có những lợi thế sau:

  1. Sử dụng chỉ số ATR để tính phạm vi biến động của giá cổ phiếu, có thể nắm bắt thay đổi thị trường một cách năng động;

  2. Kết hợp đường trung gian để đánh giá các giá cổ phiếu và thiết lập các điểm giao dịch thoát khỏi kênh để tránh theo đuổi mức cao và giết chết mức thấp;

  3. Chỉ số DMI được sử dụng để xác định xu hướng và tránh giao dịch chống lại xu hướng, cải thiện tỷ lệ thắng;

  4. Đặt các điều kiện dừng lợi nhuận và dừng lỗ để kiểm soát rủi ro của giao dịch duy nhất;

  5. Các tham số chiến lược đủ linh hoạt để tối ưu hóa chiến lược bằng cách điều chỉnh chiều rộng kênh, chu kỳ ATR và các yếu tố khác.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Giao dịch trung hạn có biến động tương đối lớn và rủi ro cao.

  2. Tính toán phạm vi kênh ATR có thể không chính xác khi giá cổ phiếu dao động mạnh, dễ dẫn đến giao dịch sai.

  3. Chỉ số DMI cũng có thể mắc lỗi trong đánh giá xu hướng, do đó ảnh hưởng đến độ chính xác của tín hiệu giao dịch.

Để đáp ứng các rủi ro trên, các thông số như kênh ATR có thể được điều chỉnh và chu kỳ tín hiệu có thể được tăng để tối ưu hóa và cải thiện.

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

Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:

  1. Điều chỉnh chiều rộng kênh ATR bằng cách sửa đổi atrDivisor lên hoặc xuống để nén hoặc mở rộng phạm vi kênh.

  2. Điều chỉnh tham số chu kỳ nhìn lại ATR để thay đổi độ nhạy của kênh đối với biến động gần đây.

  3. Điều chỉnh tham số chu kỳ tín hiệu xu hướng để cải thiện độ chính xác của các phán đoán xu hướng tăng và giảm.

  4. Thêm các chỉ số khác để xác minh nhiều yếu tố để cải thiện chất lượng tín hiệu.

  5. Tối ưu hóa các thuật toán dừng lợi nhuận và dừng lỗ để cải thiện kiểm soát rủi ro.

Kết luận

Chiến lược Breakout Honey Trend ATR tích hợp phân tích phạm vi biến động giá và các chỉ số đánh giá xu hướng. Trong khi nắm bắt các điểm nóng của thị trường, nó cũng kiểm soát rủi ro giao dịch. Đây là một chiến lược định lượng linh hoạt và thích nghi. Chiến lược này có thể được cải thiện liên tục thông qua điều chỉnh tham số và tối ưu hóa tín hiệu, với triển vọng ứng dụng rộng.


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

//@version=2
strategy(title="Strategy - Bobo PATR Swing", overlay=true, default_qty_type = strategy.fixed, default_qty_value = 1, initial_capital = 10000)

// === STRATEGY RELATED INPUTS AND LOGIC ===
PivottimeFrame = input(title="Pivot Timeframe",  defval="D")
ATRSDtimeFrame = input(title="ATR Band Timeframe (Lower timeframe = wider bands)",  defval="D")
len = input(title="ATR lookback (Lower = bands more responsive to recent price action)",  defval=13)
myatr = atr(len)
dailyatr = request.security(syminfo.tickerid, ATRSDtimeFrame, myatr[1])
atrdiv = input(title="ATR divisor (Lower = wider bands)", type=float, defval=2)
pivot0 = (high[1] + low[1]  + close[1]) / 3
pivot = request.security(syminfo.tickerid, PivottimeFrame, pivot0)
upperband1 = (dailyatr / atrdiv) + pivot
lowerband1 = pivot - (dailyatr / atrdiv)
middleband = pivot

// == TREND CALC ===
i1=input(2, "Momentum Period", minval=1) //Keep at 2 usually
i2=input(20, "Slow Period", minval=1)
i3=input(5, "Fast Period", minval=1)
i4=input(3, "Smoothing Period", minval=1)
i5=input(4, "Signal Period", minval=1)
i6=input(50, "Extreme Value", minval=1)
hiDif = high - high[1]
loDif = low[1] - low
uDM = hiDif > loDif and hiDif > 0 ? hiDif : 0
dDM =  loDif > hiDif and loDif > 0 ? loDif : 0
ATR = rma(tr(true), i1)
DIu = 100 * rma(uDM, i1) / ATR
DId = 100 * rma(dDM, i1) / ATR
HLM2 =  DIu - DId
DTI = (100 * ema(ema(ema(HLM2, i2), i3), i4)) /  ema(ema(ema(abs(HLM2), i2), i3), i4)
signal = ema(DTI, i5)


// === RISK MANAGEMENT INPUTS ===
inpTakeProfit   = input(defval = 0, title = "Take Profit (In Market MinTick Value)", minval = 0)
inpStopLoss     = input(defval = 100, title = "Stop Loss (In Market MinTick Value)", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na

// === STRATEGY - LONG POSITION EXECUTION ===
enterLong = (((low<=lowerband1) and (close >lowerband1)) or ((open <= lowerband1) and (close > lowerband1))) and (strategy.opentrades <1) and (atr(3) > atr(50)) and (signal>signal[3])
exitLong = (high > middleband)
strategy.entry(id = "Long", long = true, when = enterLong) 
strategy.close(id = "Long", when = exitLong)

// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort = (((high>=upperband1) and (close < upperband1)) or ((open >= upperband1) and (close < upperband1))) and (strategy.opentrades <1) and (atr(3) > atr(50)) and (signal<signal[3])
exitShort = (low < middleband)
strategy.entry(id = "Short", long = false, when = enterShort)
strategy.close(id = "Short", when = exitShort)

// === STRATEGY RISK MANAGEMENT EXECUTION ===
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss)

// === CHART OVERLAY ===
plot(upperband1, color=#C10C00, linewidth=3)
plot(lowerband1, color=#23E019, linewidth=3)
plot(middleband, color=#00E2E2, linewidth=3)
//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)

Thêm nữa