Chiến lược Bollinger Band A giá đột phá

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

img

Tổng quan

Chiến lược này sử dụng chỉ số Bollinger Band để đánh giá mức độ biến động của giá, kết hợp với các mẫu đường K cho các hoạt động đột phá giá. Các đường ray trên và dưới của Bollinger Band có thể đánh giá gần như xu hướng tăng và giảm của giá. Kết hợp với các chỉ số mô hình đường K có thể tìm ra thời gian mua và bán tương đối rõ ràng. Chiến lược chủ yếu đánh giá sự đột phá bên dưới Bollinger Band để đi dài, sự đột phá trên đường ray để đi ngắn, trong khi kết hợp chỉ số Stoch để đánh giá tình trạng mua quá mức và bán quá mức, và sử dụng các mẫu đường K để cung cấp tín hiệu mua và bán thay thế.

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

Chiến lược bao gồm các chỉ số chính sau:

  1. Bollinger Band chỉ số, bao gồm Bollinger đường ray giữa, đường ray trên và đường ray dưới. Bollinger Bands tính toán phạm vi biến động giá thông qua độ lệch chuẩn của giá, do đó đánh giá xu hướng biến động giá.

  2. Chỉ số cổ phiếu, để đánh giá liệu cổ phiếu có ở trạng thái mua quá mức hoặc bán quá mức.

  3. Mô hình đường K, đánh giá một số mô hình phổ biến như đường Yang lớn, đường Yin lớn vv như cơ hội giao dịch thay thế.

Điều kiện mua: Giá vượt trên đường ray Bollinger, chỉ số Stoch cho thấy tình trạng bán quá mức (K<20, D<20), trung bình di chuyển nhanh vượt trên trung bình di chuyển chậm.

Điều kiện bán: Giá vượt dưới đường sắt trên của Bollinger, hoặc dừng lỗ khi có lợi nhuận.

Chiến lược này kết hợp cả phân tích xu hướng và phán đoán mua quá mức / bán quá mức, làm giảm tỷ lệ tín hiệu sai và cho phép nhập thị trường kịp thời khi xu hướng xuất hiện.

Phân tích lợi thế

  1. Kết hợp Bollinger Band và chỉ số Stoch, nó có thể mua ở những điểm thấp rõ ràng, giảm rủi ro.

  2. Các mô hình đường K phục vụ như một điều kiện phụ trợ, tránh mua sai trong thị trường giới hạn phạm vi.

  3. Việc thông qua các phán quyết về hai điều kiện làm tăng tính ổn định và đáng tin cậy của chiến lược.

  4. Cơ chế dừng lỗ tránh mất mát lớn.

Phân tích rủi ro

  1. Giao dịch với Bollinger Bands có xu hướng bị mắc kẹt. Sự gián đoạn giá có thể gây ra tổn thất tương đối lớn.

  2. Chỉ số Stoch có khả năng phát ra các tín hiệu sai.

  3. Thật dễ dàng để tạo ra các tín hiệu giao dịch sai trong các thị trường giới hạn phạm vi.

  4. Cần dừng lỗ kịp thời để kiểm soát rủi ro.

  5. Cần phải chú ý đến sức mạnh của những bước đột phá để tránh rút lui sau khi tăng cao.

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

  1. Tối ưu hóa hồ sơ cổ phiếu, chọn cổ phiếu có biến động lớn và xu hướng rõ ràng.

  2. Tối ưu hóa các thông số Bollinger, điều chỉnh chu kỳ đường ray giữa, tối ưu hóa nắm bắt các điểm mua / bán.

  3. Tối ưu hóa các thông số Stoch, điều chỉnh chu kỳ đường K và đường D, cải thiện độ tin cậy của chỉ số.

  4. Thêm các phán đoán về điều kiện khối lượng giao dịch để tránh rút lui sau khi tăng cao.

  5. Thêm các chiến lược dừng lỗ như dừng lỗ sau, dừng lỗ di chuyển vv để kiểm soát rủi ro mất mát.

  6. Đánh giá việc thêm các chỉ số kỹ thuật khác như MACD, KDJ vv để cải thiện tính ổn định của chiến lược.

  7. Kiểm tra các giai đoạn giữ khác nhau để tối ưu hóa tỷ lệ lợi nhuận và rút vốn.

Tóm lại

Chiến lược này tích hợp Bollinger Band, chỉ số Stoch với các chỉ số cơ bản kỹ thuật. Dưới tiền đề kiểm soát rủi ro, nó mua ở mức giá thấp nhất và bán gần mức cao nhất trong lịch sử, nhận ra một mô hình lợi nhuận tương đối ổn định. Nhưng nó cũng mang lại rủi ro như bị mắc kẹt, dừng lỗ không hiệu quả vv. Tăng cường thêm sự ổn định và lợi nhuận có thể đạt được bằng cách tối ưu hóa các tham số và thêm các chỉ số phán đoán khác. Chiến lược phù hợp với các nhà đầu tư giao dịch khi giá dao động xung quanh các vùng mua quá mức và bán quá mức.


/*backtest
start: 2023-10-29 00:00:00
end: 2023-11-03 18:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Bollinger e Tendência", overlay=true)

//MÉDIAS 
periodolenta = 14
periodosimples = 47
periodome = 7

psimples = input(title="Período da média simples", defval=periodosimples)
pexp = input(title="Período da média exponencial", defval=periodome)
pexplenta = input(title="Período da média exp lenta", defval=periodolenta)
msimples = sma(close, psimples)
mexp = ema(close, pexp)
mexplenta = ema(close, pexplenta)

plot(msimples, linewidth=2, color=yellow)
plot(mexp, linewidth=5, color=white)
plot(mexplenta, linewidth=2, color=orange)

//BOLLANGER
length = input(21, minval=2)
src = input(close, title="Source")
mult = input(1.5, minval=0.001, maxval=50)
basis = sma(src, length)
dev = mult * stdev(src, length)
upperBol = basis + dev
lowerBol = basis - dev

p1 = plot(upperBol, title="Upper", color=blue, linewidth=3)
p2 = plot(lowerBol, title="Lower", color=blue, linewidth=3)
fill(p1, p2, color = purple, transp=90)

//BBW (altura do Bollanger)
basis2 = sma(close, 21)
bbw = (upperBol-lowerBol)/basis2


//STOCH E FORÇA
source = close
lengthRSI = input(11, minval=2), lengthStoch = input(7, minval=2)
smoothK = input(3,minval=3), smoothD = input(4,minval=3)
OverSold = input(20), OverBought = input(80)
rsi1 = rsi(source, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)
hline(OverSold,color=blue)
hline(OverBought,color=blue)



// Cor das Tendências (Verde ou Vermelho)
// Baseado no código: "Pivot Daily Price Color" (by Rimko)
pivot = (high + low + close ) / 3.0 
dtime_pivot = request.security(syminfo.tickerid, 'D', pivot[1]) 
pv = dtime_pivot ? dtime_pivot : na
pe = ema(close,periodome)
col = sma(close,1)>pv?green:red
col2 = sma(close,1)>pe?green:red
offs_daily = 0 
pp=plot(pv, title="Daily Pivot",style=linebr, color=black,linewidth=2) 
p=plot(sma(close,1), transp=100, editable=false)
pema = plot(pe, title="EMA",style=line, color=black,linewidth=2, transp = 50)
fill(p,pema,color=col2,title="EMA to price color", transp = 50)
fill(pp,p,color=col, title="Privot to price color", transp = 90) 


//*************************************************************************************************************************************************
// Candles (identificação):
// Baseado no código: "Candlesticks Pattern Identified" (by Repo32)
trend= input(5, minval=1, title="Trend in Bars")

DojiSize = input(0.05, minval=0.01, title="Doji size")
data=(abs(open - close) <= (high - low) * DojiSize)
//plotchar(data, title="Doji", color=white)
plotshape(data, title="Doji", color=white, style=shape.cross)
 //text='Doji'

data6=(close[1] > open[1] and open > close and open <= close[1] and open[1] <= close and open - close < close[1] - open[1] and open[trend] < open)
plotshape(data6, title= "Bearish Harami", color=red, style=shape.triangledown)
//, text="Harami\nde Baixa"

data8=(close[1] > open[1] and open > close and open >= close[1] and open[1] >= close and open - close > close[1] - open[1] and open[trend] < open)
plotshape(data8,  title= "Bearish Engulfing", color=red, style=shape.triangledown)
//, text="Engolfo\nde Baixa"

data13=(open[1]<close[1] and open<=open[1] and close<=open and open[trend] < open)
plotshape(data13, title= "Bearish Kicker", color=red, style=shape.triangledown)
//, text="Kicker\nde Baixa"

data14=(((high-low>4*(open-close))and((close-low)/(.001+high-low)>=0.75)and((open-low)/(.001+high-low)>=0.75))and open[trend] < open and high[1] < open and high[2] < open)
plotshape(data14,  title= "Hanging Man", location=location.belowbar, color=red, style=shape.triangledown)
//, text="Enforcado"

data7=(open[1] > close[1] and close > open and close <= open[1] and close[1] <= open and close - open < open[1] - close[1] and open[trend] > open)
plotshape(data7,  title= "Bullish Harami", location=location.belowbar, color=lime, style=shape.triangleup)
//, text="Mulher\nGrávida"

data9=(open[1] > close[1] and close > open and close >= open[1] and close[1] >= open and close - open > open[1] - close[1] and open[trend] > open)
plotshape(data9, title= "Bullish Engulfing", location=location.belowbar, color=lime, style=shape.triangleup)
//, text="Engolfo\nde Alta"

//uppercandle = highest(10)[1]
data10=(close[1] < open[1] and  open < low[1] and close > close[1] + ((open[1] - close[1])/2) and close < open[1] and open[trend] > open)
plotshape(data10, title= "Piercing Line", location=location.belowbar, color=lime, style=shape.triangleup)
//, text="Piercing"

lowercandle = lowest(10)[1]
data11=(low == open and  open < lowercandle and open < close and close > ((high[1] - low[1]) / 2) + low[1] and open[trend] > open)
plotshape(data11, title= "Bullish Belt", location=location.belowbar, color=lime, style=shape.triangleup)
//, text="Contenção\nde Alta"

data12=(open[1]>close[1] and open>=open[1] and close>open and open[trend] > open)
plotshape(data12, title= "Bullish Kicker", location=location.belowbar, color=lime, style=shape.triangleup)//, text="Kicker\nde Alta"


data5=(((high - low)>3*(open -close)) and  ((close - low)/(.001 + high - low) > 0.6) and ((open - low)/(.001 + high - low) > 0.6))
plotshape(data5, title= "Hammer", location=location.belowbar, color=white, style=shape.diamond)

data5b=(((high - low)>3*(open -close)) and  ((high - close)/(.001 + high - low) > 0.6) and ((high - open)/(.001 + high - low) > 0.6))
plotshape(data5b, title= "Inverted Hammer", location=location.belowbar, color=white, style=shape.diamond)
//, text="Martelo\nInvertido"

data2=(close[2] > open[2] and min(open[1], close[1]) > close[2] and open < min(open[1], close[1]) and close < open )
//plotshape(data2, title= "Evening Star", location=location.belowbar, color=red, style=shape.arrowdown, text="Estrela\nda Tarde")
plotchar(data2, title="Evening Star", color=white)

data3=(close[2] < open[2] and max(open[1], close[1]) < close[2] and open > max(open[1], close[1]) and close > open )
//plotshape(data3,  title= "Morning Star", location=location.belowbar, color=lime, style=shape.arrowup, text="Estrela\nda Manhã")
plotchar(data3, title="Morning Star", color=white, location=location.belowbar)

data4=(open[1] < close[1] and open > close[1] and high - max(open, close) >= abs(open - close) * 3 and min(close, open) - low <= abs(open - close))
//plotshape(data4, title= "Shooting Star", color=red, style=shape.arrowdown, text="Estrela\nCadente")
plotchar(data4, title="Shooting Star", color=white)



//**********************************************************************************************************



// Ações:

momento = strategy.position_size[0] > strategy.position_size[1]
valorcompra = valuewhen(momento, open, 0)
valorbbw = input(title="Altura Máxima do Bollinger", defval=10)

alerta = crossunder(close, lowerBol)
alertcondition(alerta, title='Abaixo da Banda Baixa', message='Fechou abaixo da banda baixa...!')

//data7 data9 data10 data11 data12

compra =  crossover(close, lowerBol) and ((k<=20) and (d<=20)) and (mexp>mexp[1])
//compra = (data7 or data9 or data10 or data11 or data12) and (msimples>msimples[1]) and ((k<=20) and (d<=20)) and (bbw<valorbbw/1000)
//compra =  (open<close) and (crossover (close, lowerBol)) and ((k<=20) and (d<=20)) and (bbw<valorbbw/1000) and (msimples>msimples[1])

venda = crossover(close, upperBol)
//(close >= (valorcompra + (valorcompra * 0.025))) 

strategy.entry ("Compra", strategy.long, when=compra)
strategy.entry ("Venda", strategy.short, when=venda)


//plotshape(series=compra, title="Compra", style=shape.triangleup, location=location.belowbar, color=green, text="COMPRA", size=size.small)
//plotshape(series=venda, title="Venda", style=shape.triangledown, location=location.abovebar, color=red, text="VENDA", size=size.small)  






Thêm nữa