Chiến lược phá vỡ động lực

Tác giả:ChaoZhang, Ngày: 2023-11-14 11:19:05
Tags:

img

Tổng quan

Chiến lược này sử dụng Bollinger Bands kết hợp với chỉ số ATR và đường EMA để xác định tín hiệu. Nó tạo ra tín hiệu mua khi giá vượt qua dải trên Bollinger và nhanh chóng vượt qua đường EMA. Nó tạo ra tín hiệu bán khi giá vượt qua dải dưới Bollinger và nhanh chóng vượt qua đường EMA. Chỉ số ATR được sử dụng để đặt dừng lỗ.

Chiến lược logic

  1. Tính toán đường giữa Bollinger, dải trên và dải dưới.Sai lệch tiêu chuẩn n thời gian, dải dưới là đường trung - mđộ lệch chuẩn n-thời gian.

  2. Tính toán chỉ số ATR để theo dõi stop loss.

  3. Tính toán đường EMA 1 giai đoạn và n giai đoạn để xác định đà tăng giá.

  4. Khi giá vượt qua đường Bollinger và đường EMA nhanh chóng, một tín hiệu mua được tạo ra.

  5. Khi giá vượt qua dưới dải dưới Bollinger và đường EMA nhanh chóng, một tín hiệu bán được tạo ra.

  6. Chỉ số ATR thiết lập điểm dừng lỗ, theo dõi hướng đột phá giá để tránh bị mắc kẹt.

Phân tích lợi thế

  1. Bollinger Bands kết hợp với ATR stop loss có thể kiểm soát rủi ro một cách hiệu quả.

  2. Đường EMA nhanh và chậm xác định hướng động lực, tránh phá vỡ sai.

  3. Các thông số điều chỉnh phù hợp với môi trường thị trường khác nhau.

  4. Các tín hiệu mua / bán rõ ràng với tần suất giao dịch cao, phù hợp với giao dịch ngắn hạn.

  5. Chỉ báo ATR theo dõi dừng lỗ một cách kịp thời.

Phân tích rủi ro

  1. Phạm vi Bollinger Bands hẹp có thể gây ra các giao dịch ồn ào hơn.

  2. Các thông số ATR được đặt quá nhỏ có thể gây ra stop loss quá gần dẫn đến bị mắc kẹt.

  3. Các thông số EMA cần điều chỉnh cho các hiệu ứng chu kỳ khác nhau.

  4. Thị trường dao động có thể tạo ra nhiều giao dịch hơn, cần thận trọng.

  5. Theo dõi dừng lỗ đôi khi có thể quá hung hăng, gây ra sự mở rộng lỗ.

Tối ưu hóa

  1. Kết hợp với các chỉ số khác để lọc các tín hiệu giao dịch, ví dụ: RSI cho quá mua / quá bán, KDJ cho sự khác biệt v.v.

  2. Xem xét điều chỉnh động các tham số Bollinger dựa trên ATR để phù hợp với biến động giá.

  3. Kiểm tra các thông số chu kỳ EMA khác nhau để kết hợp các thông số tốt nhất.

  4. Điều chỉnh thông minh các thông số ATR dựa trên biến động để tránh dừng lỗ mạnh mẽ.

  5. Xem xét kết hợp các mô hình học tập sâu để hỗ trợ quyết định mua / bán thời gian.

Tóm lại

Chiến lược này có logic rõ ràng sử dụng Bollinger Bands để nắm bắt sự đột phá giá, ATR để thiết lập phạm vi dừng lỗ, EMA để xác định hướng động lực để đánh giá toàn diện về sự đột phá động lực, có thể nắm bắt hiệu quả xu hướng giá ngắn hạn. Kết hợp nhiều chỉ số để đánh giá toàn diện có thể cải thiện chất lượng tín hiệu.


/*backtest
start: 2022-11-07 00:00:00
end: 2023-11-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="UT Bot Strategy", overlay = true)
//CREDITS to HPotter for the orginal code. The guy trying to sell this as his own is a scammer lol. 
// Inputs
a = input(1,     title = "Key Vaule. 'This changes the sensitivity'")
c = input(10,    title = "ATR Period")
h = input(false, title = "Signals from Heikin Ashi Candles")

src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, close, lookahead = false) : close

length = input(20, minval=1)
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
bbr = (src - lower)/(upper - lower)
// plot(bbr, "Bollinger Bands %B", color=#26A69A)
// band1 = hline(1, "Overbought", color=#787B86, linestyle=hline.style_dashed)
// hline(0.5, "Middle Band", color=color.new(#787B86, 50))
// band0 = hline(0, "Oversold", color=#787B86, linestyle=hline.style_dashed)
// fill(band1, band0, color=color.rgb(38, 166, 154, 90), title="Background")








xATR  = atr(c)
nLoss = a * xATR




xATRTrailingStop = 0.0
xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss),
   iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), 
   iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss)))
 
pos = 0   
pos :=	iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1,
   iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
   
xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue 

ema   = ema(src,1)
emaFast   = ema(src,144)
emaSlow   = ema(src,576)
sma       =  sma(src, c)

above = crossover(ema, xATRTrailingStop)
below = crossover(xATRTrailingStop, ema)

smaabove = crossover(src, sma)
smabelow = crossover(sma, src)


buy  = src > xATRTrailingStop and above and (bbr>20  or bbr<80)
sell = src < xATRTrailingStop and below  and  (bbr>20  or bbr<80)

// buy  = src > xATRTrailingStop 
// sell = src < xATRTrailingStop 


barbuy  = src > xATRTrailingStop 
barsell = src < xATRTrailingStop 

// plot(emaFast , color = color.rgb(243, 206, 127), title="emaFast")

plot(xATRTrailingStop, color = color.rgb(233, 233, 232), title="xATRTrailingStop")

plotshape(buy,  title = "Buy",  text = 'Buy',  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, transp = 0, size = size.tiny)
plotshape(sell, title = "Sell", text = 'Sell', style = shape.labeldown, location = location.abovebar, color= color.red,   textcolor = color.white, transp = 0, size = size.tiny)


// plotshape(buy,  title = "Sell",  text = 'Sell',  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, transp = 0, size = size.tiny)
// plotshape(sell, title = "buy", text = 'buy', style = shape.labeldown, location = location.abovebar, color= color.red,   textcolor = color.white, transp = 0, size = size.tiny)

barcolor(barbuy  ? color.green : na)
barcolor(barsell ? color.red   : na)

// strategy.entry("short",   false, when = buy)
// strategy.entry("long ", true, when = sell)


strategy.entry("long",   true, when = buy)
strategy.entry("short ", false, when = sell)

Thêm nữa