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

Chiến lược dừng theo dõi động thông minh đa cấp dựa trên các băng Bollinger và ATR

Tác giả:ChaoZhang, Ngày: 2024-12-11 14:52:24
Tags:BBATRMASMAEMASMMAWMAVWMASD

img

Tổng quan

Chiến lược này là một hệ thống giao dịch thông minh dựa trên Bollinger Bands và các chỉ số ATR, kết hợp các cơ chế lấy lợi nhuận và dừng lỗ đa cấp. Chiến lược chủ yếu đi vào các vị trí dài bằng cách xác định các tín hiệu đảo ngược gần Bollinger Band dưới cùng và quản lý rủi ro bằng cách sử dụng các điểm dừng theo dõi động. Hệ thống được thiết kế với mục tiêu lợi nhuận 20% và mức dừng lỗ 12%, trong khi kết hợp các điểm dừng theo dõi động dựa trên ATR để bảo vệ lợi nhuận trong khi cho phép xu hướng đủ không gian để phát triển.

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

Logic cốt lõi bao gồm một số thành phần chính:

  1. Điều kiện nhập cảnh: Cần một ngọn nến màu xanh lá cây sau một ngọn nến màu đỏ chạm vào dải Bollinger dưới cùng, thường cho thấy một tín hiệu đảo ngược tiềm năng.
  2. Lựa chọn trung bình động: Hỗ trợ nhiều loại (SMA, EMA, SMMA, WMA, VWMA), với SMA 20 giai đoạn mặc định.
  3. Các thông số Bollinger Bands: Sử dụng độ lệch chuẩn 1,5 cho băng thông, bảo thủ hơn so với độ lệch chuẩn 2 truyền thống.
  4. Cơ chế thu lợi nhuận: Đặt mục tiêu lợi nhuận 20% ban đầu.
  5. Cơ chế dừng lỗ: Thực hiện 12% dừng lỗ cố định để bảo vệ vốn.
  6. Chặn động:
    • Kích hoạt ATR trailing stop sau khi đạt mục tiêu lợi nhuận
    • Bắt đầu ATR dừng lại động sau khi chạm vào Bollinger Band trên
    • Sử dụng ATR nhân để điều chỉnh năng động phía sau dừng khoảng cách

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

  1. Kiểm soát rủi ro đa cấp:
    • Đặt lệnh dừng lỗ cố định bảo vệ chính
    • Đánh dấu dừng kéo theo động trong lợi nhuận
    • Bollinger Band trên kích hoạt dừng động cung cấp bảo vệ bổ sung
  2. Lựa chọn trung bình động linh hoạt cho phép thích nghi với các điều kiện thị trường khác nhau
  3. Dừng theo dõi động dựa trên ATR tự động điều chỉnh dựa trên biến động thị trường, ngăn ngừa thoát sớm
  4. Các tín hiệu đầu vào kết hợp các mô hình giá và các chỉ số kỹ thuật, cải thiện độ tin cậy của tín hiệu
  5. Hỗ trợ quản lý vị trí và thiết lập chi phí giao dịch, gần hơn với điều kiện giao dịch thực tế

Rủi ro chiến lược

  1. Thị trường dao động nhanh có thể dẫn đến giao dịch thường xuyên, tăng chi phí giao dịch
  2. 12% dừng lỗ cố định có thể quá chặt chẽ trong các thị trường biến động cao
  3. Các tín hiệu Bollinger Bands có thể tạo ra các tín hiệu sai trong thị trường xu hướng
  4. ATR trailing stop có thể dẫn đến rút vốn lớn hơn trong thời gian biến động nghiêm trọng Các biện pháp giảm thiểu:
  • Sử dụng khuyến cáo trong khoảng thời gian dài hơn (30 phút - 1 giờ)
  • Điều chỉnh tỷ lệ dừng lỗ dựa trên các đặc điểm cụ thể của công cụ
  • Xem xét thêm các bộ lọc xu hướng để giảm tín hiệu sai
  • Điều chỉnh động nhân ATR cho các môi trường thị trường khác nhau

Hướng dẫn tối ưu hóa chiến lược

  1. Tối ưu hóa nhập:
  • Thêm cơ chế xác nhận khối lượng
  • Tích hợp các chỉ số sức mạnh xu hướng để lọc tín hiệu
  • Xem xét thêm các chỉ số động lực để xác nhận
  1. Tối ưu hóa stop-loss:
  • Chuyển đổi stop-loss cố định sang stop động dựa trên ATR
  • Phát triển thuật toán dừng lỗ thích nghi
  • Điều chỉnh năng động khoảng cách dừng dựa trên biến động
  1. Tối ưu hóa trung bình di chuyển:
  • Kiểm tra các kết hợp thời gian khác nhau
  • Phương pháp điều chỉnh thời gian nghiên cứu
  • Xem xét sử dụng hành động giá thay vì trung bình động
  1. Tối ưu hóa quản lý vị trí:
  • Phát triển hệ thống định hình vị trí dựa trên biến động
  • Thực hiện các cơ chế nhập cảnh và xuất cảnh quy mô
  • Thêm kiểm soát rủi ro

Tóm lại

Chiến lược này xây dựng một hệ thống giao dịch đa cấp bằng cách sử dụng Bollinger Bands và các chỉ số ATR, sử dụng các phương pháp quản lý năng động để nhập, dừng lỗ và lấy lợi nhuận.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Demo GPT - Bollinger Bands Strategy with Tightened Trailing Stops", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_value=0.1, slippage=3)

// Input settings
length = input.int(20, minval=1)
maType = input.string("SMA", "Basis MA Type", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
src = input(close, title="Source")
mult = 1.5 // Standard deviation multiplier set to 1.5
offset = input.int(0, "Offset", minval=-500, maxval=500)
atrMultiplier = input.float(1.0, title="ATR Multiplier for Trailing Stop", minval=0.1) // ATR multiplier for trailing stop

// Time range filters
start_date = input(timestamp("2018-01-01 00:00"), title="Start Date")
end_date = input(timestamp("2069-12-31 23:59"), title="End Date")
in_date_range = true

// Moving average function
ma(source, length, _type) =>
    switch _type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

// Calculate Bollinger Bands
basis = ma(src, length, maType)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev

// ATR Calculation
atr = ta.atr(length) // Use ATR for trailing stop adjustments

// Plotting
plot(basis, "Basis", color=#2962FF, offset=offset)
p1 = plot(upper, "Upper", color=#F23645, offset=offset)
p2 = plot(lower, "Lower", color=#089981, offset=offset)
fill(p1, p2, title="Background", color=color.rgb(33, 150, 243, 95))

// Candle color detection
isGreen = close > open
isRed = close < open

// Flags for entry and exit conditions
var bool redTouchedLower = false
var float targetPrice = na
var float stopLossPrice = na
var float trailingStopPrice = na

if in_date_range
    // Entry Logic: First green candle after a red candle touches the lower band
    if close < lower and isRed
        redTouchedLower := true
    if redTouchedLower and isGreen
        strategy.entry("Long", strategy.long)
        targetPrice := close * 1.2       // Set the target price to 20% above the entry price
        stopLossPrice := close * 0.88   // Set the stop loss to 12% below the entry price
        trailingStopPrice := na         // Reset trailing stop on entry
        redTouchedLower := false

    // Exit Logic: Trailing stop after 20% price increase
    if strategy.position_size > 0 and not na(targetPrice) and close >= targetPrice
        if na(trailingStopPrice)
            trailingStopPrice := close - atr * atrMultiplier // Initialize trailing stop using ATR
        trailingStopPrice := math.max(trailingStopPrice, close - atr * atrMultiplier) // Tighten dynamically based on ATR

    // Exit if the price falls below the trailing stop after 20% increase
    if strategy.position_size > 0 and not na(trailingStopPrice) and close < trailingStopPrice
        strategy.close("Long", comment="Trailing Stop After 20% Increase")
        targetPrice := na // Reset the target price
        stopLossPrice := na // Reset the stop loss price
        trailingStopPrice := na // Reset trailing stop

    // Stop Loss: Exit if the price drops 12% below the entry price
    if strategy.position_size > 0 and not na(stopLossPrice) and close <= stopLossPrice
        strategy.close("Long", comment="Stop Loss Triggered")
        targetPrice := na // Reset the target price
        stopLossPrice := na // Reset the stop loss price
        trailingStopPrice := na // Reset trailing stop

    // Trailing Stop: Activate after touching the upper band
    if strategy.position_size > 0 and close >= upper and isGreen
        if na(trailingStopPrice)
            trailingStopPrice := close - atr * atrMultiplier // Initialize trailing stop using ATR
        trailingStopPrice := math.max(trailingStopPrice, close - atr * atrMultiplier) // Tighten dynamically based on ATR

    // Exit if the price falls below the trailing stop
    if strategy.position_size > 0 and not na(trailingStopPrice) and close < trailingStopPrice
        strategy.close("Long", comment="Trailing Stop Triggered")
        trailingStopPrice := na // Reset trailing stop
        targetPrice := na // Reset the target price
        stopLossPrice := na // Reset the stop loss price


Có liên quan

Thêm nữa