Chiến lược giao dịch Bollinger Bands Breakout

Tác giả:ChaoZhang, Ngày: 2024-02-21 11:35:14
Tags:

img

Tổng quan

Chiến lược này được thiết kế dựa trên chỉ số Bollinger Bands. Nó đi dài khi giá vượt qua dải trên và đi ngắn khi giá vượt qua dải dưới. Nó thuộc về chiến lược theo xu hướng.

Chiến lược logic

  1. Tính toán dải giữa, dải trên và dải dưới của Bollinger Bands
  2. Khi giá đóng cửa phá vỡ dải trên, đi dài
  3. Khi giá đóng cửa phá vỡ dải dưới, đi ngắn
  4. Quy tắc thoát: đóng vị trí dài khi giá vượt qua dải giữa, đóng vị trí ngắn khi giá vượt qua dải giữa

Chiến lược này sử dụng Bollinger Bands để xác định phạm vi biến động và hướng xu hướng của thị trường. Khi giá vượt qua các dải trên hoặc dưới của Bollinger Bands, nó được coi là một tín hiệu đảo ngược xu hướng để vào.

Phân tích lợi thế

  1. Sử dụng chỉ số Bollinger Bands để xác định xu hướng thị trường và mức hỗ trợ / kháng cự
  2. Khả năng cao khi Bollinger Bands phá vỡ
  3. Các quy tắc nhập cảnh và xuất cảnh rõ ràng

Phân tích rủi ro

  1. Rủi ro của tín hiệu đột phá sai từ Bollinger Bands, có thể là biến động giá ngắn hạn
  2. Stop loss lớn hơn khi biến động giá lớn

Giải pháp:

  1. Kết hợp với các chỉ số khác để xác nhận xu hướng
  2. Điều chỉnh các tham số để mở rộng phạm vi Bollinger Bands

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

  1. Kết hợp với các chỉ số xu hướng để tránh giao dịch ngược không cần thiết
  2. Điều chỉnh động các tham số Bollinger Bands để tối ưu hóa kích thước tham số

Tóm lại

Chiến lược này sử dụng chỉ số Bollinger Bands để xác định xu hướng giá và mức hỗ trợ / kháng cự. Nó đi vào các điểm đột phá Bollinger Bands và thiết lập stop loss ở dải giữa. Logic chiến lược đơn giản và rõ ràng, dễ thực hiện. Nó có thể được tối ưu hóa bằng cách điều chỉnh các tham số hoặc kết hợp với các chỉ số khác, hoạt động tốt trong thị trường xu hướng.


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

//@version=5
strategy("FFFDBTC", overlay=true,initial_capital = 100,commission_type =strategy.commission.percent,commission_value= 0.15,default_qty_value = 100,default_qty_type = strategy.percent_of_equity)
// === INPUT BACKTEST RANGE ===
FromMonth = input.int(defval=1, title="From Month", minval=1, maxval=12)
FromDay = input.int(defval=1, title="From Day", minval=1, maxval=31)
FromYear = input.int(defval=1972, title="From Year", minval=1972)
ToMonth = input.int(defval=1, title="To Month", minval=1, maxval=12)
ToDay = input.int(defval=1, title="To Day", minval=1, maxval=31)
ToYear = input.int(defval=9999, title="To Year", minval=2010)

// === FUNCTION EXAMPLE === 
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)  // backtest finish window
window() => true
// Definindo tamanho da posição
position_size = strategy.equity
// Definir parâmetros das Bandas de Bollinger
length = input.int(51, "Comprimento")
mult = input.float(1.1, "Multiplicador")

// Calcular as Bandas de Bollinger
basis = ta.sma(close, length)
dev = mult * ta.stdev(close, length)
upper = basis + dev
lower = basis - dev
// Definir condições de entrada e saída
entrada_na_venda = low < lower
saida_da_venda = high > lower and strategy.position_size < 0
entrada_na_compra = high > upper
saida_da_compra = low < upper and strategy.position_size > 0
shortCondition = close[1] < lower[1] and close > lower and close < basis
longCondition = close[1] > upper[1] and close < upper and close > basis

// Entrar na posição longa se a condição longCondition for verdadeira
if ((entrada_na_compra) and window() )
    strategy.entry("Buy", strategy.long)
//saida da compra
if (saida_da_compra)
    strategy.close("Buy")
//entrada na venda
if ((entrada_na_venda) and window() )
    strategy.entry("Sell", strategy.short)
//saida da venda
if (saida_da_venda)
    strategy.close("Sell")
if ((longCondition) and window())
    strategy.entry("Long", strategy.long)

// Entrar na posição curta se a condição shortCondition for verdadeira
if ((shortCondition) and window())
    strategy.entry("Short", strategy.short)

// Definir a saída da posição

strategy.exit("Exit_Long", "Long", stop=ta.sma(close, length), when = close >= basis)
strategy.exit("Exit_Short", "Short", stop=ta.sma(close, length), when = close <= basis)

// Desenhar as Bandas de Bollinger no gráfico
plot(basis, "Média", color=#2962FF, linewidth=2)
plot(upper, "Upper", color=#BEBEBE, linewidth=2)
plot(lower, "Lower", color=#BEBEBE, linewidth=2)

Thêm nữa