Chiến lược kiểm tra ngược đột phá cao-thấp


Ngày tạo: 2023-11-27 15:37:13 sửa đổi lần cuối: 2023-11-27 15:37:13
sao chép: 0 Số nhấp chuột: 689
1
tập trung vào
1617
Người theo dõi

Chiến lược kiểm tra ngược đột phá cao-thấp

Tổng quan

Chiến lược đo đạc phá vỡ cao thấp là một chiến lược theo dõi xu hướng sử dụng các mức cao và thấp trong lịch sử của cổ phiếu để xác định liệu giá có phá vỡ các mức cao thấp này hay không. Nó tạo ra tín hiệu mua bằng cách tính toán giá cao nhất và giá thấp nhất trong một chu kỳ nhất định, khi giá trong chu kỳ hiện tại vượt quá giá cao nhất trong một chu kỳ nhất định gần đây; khi giá giảm xuống dưới giá thấp nhất trong một chu kỳ nhất định gần đây, tạo ra bán.

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

Lập luận cốt lõi của chiến lược này là tính toán giá cao nhất và giá thấp nhất trong một chu kỳ nhất định ((50 đường K mặc định). Khi tính toán giá cao nhất và giá thấp nhất, bạn có thể chọn sử dụng giá đóng cửa hoặc giá cao nhất và giá thấp nhất (( sử dụng giá cao nhất và giá thấp nhất mặc định).

Khi tạo ra tín hiệu mua, chiến lược sẽ mua ở mức giá đó và thiết lập giá dừng lỗ và giá dừng bán. Khi giá chạm mức giá dừng lỗ, chiến lược sẽ dừng lỗ và rút ra; khi giá chạm mức giá dừng bán, chiến lược sẽ dừng và rút ra.

Phân tích lợi thế

Chiến lược này có một số lợi thế:

  1. Lập luận của chiến lược đơn giản, dễ hiểu và dễ thực hiện.
  2. Có thể nắm bắt được các đặc điểm xu hướng của giá cổ phiếu, và hoạt động theo xu hướng.
  3. Bạn có thể điều chỉnh các tham số Finding cho các tham số chính sách phù hợp nhất.
  4. Thiết bị ngăn chặn và ngăn chặn tích hợp có thể kiểm soát rủi ro.
  5. Hiển thị trực quan rất thuận tiện cho việc điều chỉnh tham số và phân tích kết quả.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Dễ bị giao dịch lặp lại và giao dịch quá mức.
  2. Các nhà đầu tư sẽ thường xuyên mở lệnh khi giá cả dao động.
  3. Các tham số chỉ số không đúng lúc, có thể bỏ lỡ cơ hội xu hướng lớn.
  4. Không tính đến tần suất và mức độ biến động của giá cổ phiếu.
  5. Không kết hợp với các chỉ số khác để xác minh tín hiệu.

Để kiểm soát những rủi ro này, có thể tối ưu hóa theo các cách sau:

  1. Giảm mức dừng lỗ thích hợp và tăng thời gian nắm giữ.
  2. Tăng các điều kiện mở cửa để tránh mở cửa thường xuyên.
  3. Tối ưu hóa các tham số, tìm ra sự kết hợp tham số tốt nhất.
  4. Kết hợp với các chỉ số khác để lọc tín hiệu.

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa từ các khía cạnh sau:

  1. Tối ưu hóa tham số. Các tham số tối ưu có thể được tìm thấy bằng cách thử nghiệm các kết hợp tham số khác nhau một cách có hệ thống hơn.

  2. Kết hợp với các chỉ số khác để lọc tín hiệu. Ví dụ, có thể kết hợp với chỉ số trung bình di chuyển, chỉ khi giá vượt qua mức giá cao nhất và vượt qua trung bình di chuyển ngắn hạn trên trung bình di chuyển dài hạn, tín hiệu mua sẽ được tạo ra.

  3. Cân nhắc tần suất biến động của giá cổ phiếu. Ví dụ, có thể kết hợp với chỉ số ATR, khi biến động giá cổ phiếu tăng lên, mức độ phá vỡ được nới lỏng thích hợp.

  4. Phân biệt thị trường xu hướng và thị trường chấn động. Trong giai đoạn xu hướng rõ ràng, hãy nới lỏng tham số một cách thích hợp để theo dõi xu hướng; Trong thị trường chấn động, hãy thắt chặt tham số một cách thích hợp.

  5. Tăng cơ chế quản lý vị trí. Ví dụ: ngừng mở vị trí khi thua lỗ đạt đến một tỷ lệ nhất định.

Tóm tắt

Nói chung, chiến lược đo lường lại phá vỡ cao thấp là một chiến lược theo dõi xu hướng đơn giản và thực tế. Nó quyết định tín hiệu giao dịch bằng cách đánh giá liệu giá có phá vỡ mức cao nhất và thấp nhất trong một chu kỳ nhất định hay không. Chiến lược này có những lợi thế như đơn giản, theo dõi xu hướng, có thể tối ưu hóa tham số, đồng thời có rủi ro tạo ra giao dịch quá mức và không thể xử lý thị trường xung đột. Chúng ta có thể tối ưu hóa chiến lược này từ nhiều khía cạnh như tối ưu hóa tham số, lọc chỉ số và quản lý vị trí để hiệu quả của nó được nâng cao hơn nữa.

Mã nguồn chiến lược
/*backtest
start: 2023-11-25 00:00:00
end: 2023-11-26 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("High/Low Breaker Backtest 1.0", overlay=true, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, max_bars_back=700)

// Strategy Settings
takeProfitPercentageLong = input(.1, title='Take Profit Percentage Long', type=float)/100
stopLossPercentageLong = input(0.15, title='Stop Loss Percentage Long', type=float)/100
takeProfitPercentageShort = input(.1, title='Take Profit Percentage Short', type=float)/100
stopLossPercentageShort = input(0.15, title='Stop Loss Percentage Short', type=float)/100


candlesBack = input(title="Number of candles back",  defval=50)
useHighAndLows =  input(true, title="Use high and lows (uncheck to use close)", defval=true)
lastBarsBackMinimum =  input(title="Number of candles back to ignore for last high/low",  defval=30)
showHighsAndLows = input(true, title="Show high/low lines", defval=true)

getIndexOfLowestInSeries(series, period) => 
    index = 0
    current = series
    for i = 1 to period
        if series[i] <= current
            index := i
            current := series[i]
    index

getIndexOfHighestInSeries(series, period) => 
    index = 0
    current = series
    for i = 1 to period
        if series[i] >= current
            index := i
            current := series[i]
    index

indexOfHighestInRange = getIndexOfHighestInSeries(useHighAndLows ? high : close, candlesBack)
indexOfLowestInRange = getIndexOfLowestInSeries(useHighAndLows ? low : close, candlesBack)

max = useHighAndLows ? high[indexOfHighestInRange] : close[indexOfHighestInRange]
min = useHighAndLows ? low[indexOfLowestInRange] : close[indexOfLowestInRange]

barsSinceLastHigh = indexOfHighestInRange
barsSinceLastLow = indexOfLowestInRange

isNewHigh = (useHighAndLows ? high > max[1] : close > max[1]) and (barsSinceLastHigh[1] + 1 > lastBarsBackMinimum)
isNewLow = (useHighAndLows ? low < min[1] : close < min[1]) and (barsSinceLastLow[1] + 1 > lastBarsBackMinimum)

alertcondition(condition=isNewHigh, title="New High", message="Last High Broken")
alertcondition(condition=isNewLow, title="New Low", message="Last Low Broken")

if high > max 
    max := high
    barsSinceLastHigh := 0

if low < min
    min := low
    barsSinceLastLow := 0 

plot( showHighsAndLows ? max : na, color=red, style=line, title="High", linewidth=3)
plot( showHighsAndLows ? min : na, color=green, style=line, title="Low", linewidth=3)

// Strategy Entry/Exit Logic
goLong =isNewHigh
longStopLevel = strategy.position_avg_price * (1 - stopLossPercentageLong)
longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercentageLong)

goShort = isNewLow
shortStopLevel = strategy.position_avg_price * (1 + stopLossPercentageShort)
shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercentageShort)

strategy.entry("Long", strategy.long, when=goLong)
strategy.exit("Long Exit", "Long", stop=longStopLevel, limit=longTakeProfitLevel)

strategy.entry("Short", strategy.short, when=goShort)
strategy.exit("Short Exit", "Short", stop=shortStopLevel, limit=shortTakeProfitLevel)
        
plot(goShort ? shortStopLevel : na, color=yellow, style=linebr, linewidth=2)
plot(goShort ? shortTakeProfitLevel : na, color=blue, style=linebr, linewidth=2)
plot(goLong ? longStopLevel : na, color=yellow, style=linebr, linewidth=2)
plot(goLong ? longTakeProfitLevel : na, color=blue, style=linebr, linewidth=2)