Chiến lược giao dịch đột phá với khả năng mở rộng

Tác giả:ChaoZhang, Ngày: 2023-10-30 17:25:17
Tags:

img

Tổng quan

Chiến lược giao dịch breakout có thể mở rộng tạo ra tín hiệu giao dịch khi giá vượt qua các mức hỗ trợ và kháng cự chính được xác định bởi sự dao động giá. Đây là một chiến lược breakout rất linh hoạt và mở rộng. Chiến lược có thể được điều chỉnh theo khung thời gian khác nhau bằng cách điều chỉnh các tham số và có thể dễ dàng tích hợp các bộ lọc bổ sung và cơ chế quản lý rủi ro để tối ưu hóa.

Làm thế nào nó hoạt động

Chiến lược đầu tiên sử dụngswings()chức năng để tính toán swing cao nhất và thấp nhất dựa trên thời gian xem lại.swingLookbackCác tín hiệu dài được kích hoạt khi giá phá vỡ trên mức cao dao động, và các tín hiệu ngắn được kích hoạt khi giá phá vỡ dưới mức thấp dao động.

Cụ thể, tín hiệu dài được kích hoạt khi giá đóng lớn hơn hoặc bằng với giá swing high. tín hiệu ngắn được kích hoạt khi giá đóng nhỏ hơn hoặc bằng với giá swing low.

Chiến lược cũng đặt ra một mục tiêu dừng dựa trênstopTargetPercenttham số để xác định mức dừng lỗ. Ví dụ, dừng lỗ dài có thể được đặt ở mức 5% dưới mức cao dao động, và dừng lỗ ngắn có thể được đặt ở mức 5% trên mức thấp dao động.

Lợi thế của chiến lược này là tính linh hoạt để điều chỉnh thời gian xem lại để kiểm soát tần suất giao dịch. Thời gian xem lại ngắn hơn làm cho nó nhạy cảm hơn với sự đột phá và tăng tần suất giao dịch. Thời gian xem lại dài hơn làm giảm độ nhạy cảm và tần suất giao dịch nhưng có thể bỏ lỡ cơ hội. Tìm thời gian xem lại tối ưu là rất quan trọng để tối ưu hóa chiến lược.

Ưu điểm

  • Logic đột phá đơn giản, dễ hiểu và thực hiện
  • Thời gian xem lại cho phép tối ưu hóa các thông số và kiểm soát tần suất giao dịch
  • Dễ dàng tích hợp stop loss, trailing stop và quản lý rủi ro khác
  • Rất mở rộng để thêm các bộ lọc và cải thiện lợi nhuận
  • Áp dụng cho bất kỳ khung thời gian nào cho giao dịch nội ngày hoặc giao dịch swing

Rủi ro và giảm thiểu

  • Thời gian xem lại quá ngắn có thể gây ra quá mức giao dịch
  • Thời gian xem xét quá dài có thể bỏ lỡ cơ hội giao dịch
  • Stop loss quá rộng làm giảm tiềm năng lợi nhuận
  • Dừng lỗ quá chặt có thể bị dừng thường xuyên

Hạn chế:

  • Kiểm tra các khoảng thời gian xem lại khác nhau để tìm các thông số tối ưu
  • Tối ưu hóa mức dừng lỗ để cân bằng lợi nhuận so với kiểm soát rủi ro
  • Thêm trailing stop hoặc chandelier exit để khóa lợi nhuận
  • Thêm bộ lọc để cải thiện chất lượng tín hiệu giao dịch
  • Tối ưu hóa các tham số thông qua backtesting

Cơ hội gia tăng

Chiến lược có thể được cải thiện theo nhiều cách:

  1. Kiểm tra các giá trị khoảng thời gian xem lại khác nhau để tìm các thông số tối ưu.

  2. Kiểm tra các khung thời gian khác nhau như 5m, 15m, 1h để xác định khung thời gian tốt nhất.

  3. Tối ưu hóa tỷ lệ dừng lỗ để cân bằng tiềm năng lợi nhuận so với quản lý rủi ro.

  4. Thêm các bộ lọc như âm lượng, biến động để giảm thiết lập kém.

  5. Tích hợp nhiều cơ chế quản lý rủi ro như dừng lại, lấy lợi nhuận.

  6. Tối ưu hóa tham số thông qua phân tích tiến bộ và học máy.

  7. giới thiệu AI / học máy để tối ưu hóa tự động các thông số.

Kết luận

Chiến lược giao dịch breakout có thể mở rộng là một hệ thống breakout mạnh mẽ và tùy chỉnh. Nó rất dễ sử dụng và thích nghi bằng cách điều chỉnh xem lại và thêm các bộ lọc. Nó có thể dễ dàng tích hợp quản lý rủi ro để kiểm soát rủi ro. Với tối ưu hóa tham số và tích hợp máy học, chiến lược có thể phát triển theo thời gian để thích nghi với thị trường thay đổi. Nhìn chung, nó là một chiến lược breakout phổ quát được khuyến cáo.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © deperp

//@version=5
// strategy("Range Breaker", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.07, pyramiding=0)

// Backtest Time Period

useDateFilter = input.bool(true, title="Begin Backtest at Start Date",
     group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2020"), 
     title="Start Date", group="Backtest Time Period",
     tooltip="This start date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")

inTradeWindow = true

swingLookback = input.int(20, title="Swing Lookback", minval=3)
stopTargetPercent = input.float(5, title="Stop Target Percentage", step=0.1)

// Calculate lockback swings
swings(len) =>
    var highIndex = bar_index
    var lowIndex = bar_index
    var swingHigh = float(na)
    var swingLow = float(na)
    
    upper = ta.highest(len)
    lower = ta.lowest(len)
    
    if high[len] > upper
        highIndex := bar_index[len]
        swingHigh := high[len]

    if low[len] < lower
        lowIndex := bar_index[len]
        swingLow := low[len]

    [swingHigh, swingLow, highIndex, lowIndex]


// Strategy logic
[swingHigh, swingLow, highIndex, lowIndex] = swings(swingLookback)
longCondition = inTradeWindow and (ta.crossover(close, swingHigh))
shortCondition = inTradeWindow and (ta.crossunder(close, swingLow))

if longCondition
    strategy.entry("Long", strategy.long)
if shortCondition
    strategy.entry("Short", strategy.short)

longStopTarget = close * (1 + stopTargetPercent / 100)
shortStopTarget = close * (1 - stopTargetPercent / 100)

strategy.exit("Long Stop Target", "Long", limit=longStopTarget)
strategy.exit("Short Stop Target", "Short", limit=shortStopTarget)

// Plot break lines
// line.new(x1=highIndex, y1=swingHigh, x2=bar_index, y2=swingHigh, color=color.rgb(255, 82, 82, 48), width=3, xloc=xloc.bar_index, extend=extend.right)
// line.new(x1=lowIndex, y1=swingLow, x2=bar_index, y2=swingLow, color=color.rgb(76, 175, 79, 47), width=3, xloc=xloc.bar_index, extend=extend.right)


// Alert conditions for entry and exit
longEntryCondition = inTradeWindow and (ta.crossover(close, swingHigh))
shortEntryCondition = inTradeWindow and (ta.crossunder(close, swingLow))

longExitCondition = close >= longStopTarget
shortExitCondition = close <= shortStopTarget

alertcondition(longEntryCondition, title="Long Entry Alert", message="Enter Long Position")
alertcondition(shortEntryCondition, title="Short Entry Alert", message="Enter Short Position")
alertcondition(longExitCondition, title="Long Exit Alert", message="Exit Long Position")
alertcondition(shortExitCondition, title="Short Exit Alert", message="Exit Short Position")

Thêm nữa