
Chiến lược phá vỡ mở rộng là một chiến lược phá vỡ rất linh hoạt và có thể mở rộng bằng cách xác định các vùng hỗ trợ và kháng cự quan trọng của giá, tạo ra tín hiệu giao dịch khi giá vượt qua các khu vực này. Chiến lược này có thể áp dụng cho các chu kỳ thời gian khác nhau bằng cách điều chỉnh các tham số, cũng có thể dễ dàng tích hợp các điều kiện lọc bổ sung và cơ chế quản lý rủi ro khác nhau để tối ưu hóa cho các tài sản cụ thể.
Chiến lược này bắt đầu bằng việc sử dụngswings()Chức năng này dựa trên thời kỳ xem xét lại để tính toán các điểm cao và thấp của giá hiện tại.swingLookbackCài đặt tham số, mặc định 20 đường K ◦ Sau đó, khi giá vượt qua điểm cao của biến động, làm nhiều; khi giá giảm xuống điểm thấp của biến động, làm trống ◦
Lập luận cụ thể của tín hiệu mua nhiều là mua nhiều khi giá đóng cửa lớn hơn bằng giá biến động cao. Lập luận cụ thể của tín hiệu mua ngắn là mua ngắn khi giá đóng cửa nhỏ hơn bằng giá biến động thấp.
Ngoài ra, chiến lược cũng đặt lệnh dừng lỗ, thông quastopTargetPercentCác tham số để thiết lập mức dừng lỗ. Ví dụ: đặt giá dừng lỗ dưới 5% giá cao nhất và đặt giá dừng lỗ trên 5% giá thấp nhất.
Ưu điểm của chiến lược này là có thể kiểm soát tần suất giao dịch bằng cách điều chỉnh thời gian xem lại. Thời gian xem lại càng ngắn, nhạy cảm hơn với đột phá, tần suất giao dịch càng cao. Ngược lại, thời gian xem lại quá dài, tần suất giao dịch giảm nhưng có thể bỏ lỡ cơ hội. Vì vậy, việc tìm kiếm thời gian xem lại tối ưu cho chiến lược là rất quan trọng.
Phản ứng:
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Thử nghiệm các tham số khác nhau để tìm ra sự kết hợp tối ưu nhất;
Kiểm tra các chu kỳ giao dịch khác nhau, chẳng hạn như 5 phút, 15 phút, 1 giờ, để chọn chu kỳ tốt nhất;
Tối ưu hóa mức dừng lỗ, cân bằng không gian lợi nhuận và kiểm soát rủi ro;
Thêm các điều kiện lọc, chẳng hạn như lọc khối lượng giao dịch, lọc giảm giá, để giảm tín hiệu kém chất lượng;
tích hợp nhiều cơ chế quản lý rủi ro hơn, chẳng hạn như di chuyển lỗ, khóa lợi nhuận;
Tối ưu hóa tham số, sử dụng tối ưu hóa từng bước, tìm kiếm ngẫu nhiên và tìm các tham số tối ưu;
Tích hợp công nghệ học máy, sử dụng AI để tự động tối ưu hóa các tham số.
Chiến lược giao dịch đột phá mở rộng là một hệ thống đột phá rất thực tế. Nó đơn giản, dễ sử dụng, có thể tùy chỉnh và có thể được tối ưu hóa cho các tài sản khác nhau bằng cách điều chỉnh thời gian xem lại và tích hợp các điều kiện lọc khác nhau. Đồng thời, có thể dễ dàng tích hợp các cơ chế quản lý rủi ro khác nhau để kiểm soát rủi ro giao dịch.
/*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")