Chiến lược dừng lỗ chuyển động kết hợp thời gian Parabolic và Bollinger Band

Tác giả:ChaoZhang, Ngày: 2024-02-02 11:05:57
Tags:

img

Tổng quan

Bài viết này sẽ giới thiệu một chiến lược giao dịch định lượng kết hợp chỉ số thời gian parabolic và chỉ số băng Bollinger để thiết lập một chiến lược dừng lỗ chuyển động. Bằng cách tính toán đường thời gian parabolic để đánh giá hướng xu hướng thị trường, và sau đó sử dụng các đường ray trên và dưới của các băng Bollinger để thiết lập vị trí dừng lỗ một cách năng động, chiến lược nhận ra dừng lỗ chuyển động để khóa lợi nhuận.

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

Đầu tiên, chiến lược này sử dụng chỉ số parabolic để đánh giá xu hướng thị trường hiện tại. Khi giá đóng cửa ngày hôm nay vượt qua đường thời gian parabolic ngày hôm qua, nó được coi là thị trường đã đảo ngược sang tăng và có thể đi dài; khi giá đóng cửa ngày hôm nay vượt qua đường thời gian, triển vọng thị trường giảm và có thể đi ngắn.

Thứ hai, chiến lược này kết hợp chỉ số Bollinger Band để thiết lập một vị trí dừng lỗ động. Đường ray trên của Bollinger Band có thể được xem là một khu vực mua quá mức, và đường ray dưới là một khu vực bán quá mức. Sau khi mua dài, nếu giá giảm xuống dưới đường ray dưới của Bollinger Band, dừng lỗ để đóng vị trí; sau khi mua ngắn, nếu giá tăng lên trên đường ray trên một lần nữa, dừng lỗ để thoát ra. Do đó, đường ray trên và dưới của Bollinger Band trở thành các đường stop loss di chuyển.

Thông qua các nguyên tắc trên, chiến lược này nhận ra việc đánh giá hướng thị trường trong khi thiết lập một cơ chế dừng lỗ năng động để theo dõi lợi nhuận. Điều này cho phép nó nắm bắt một số xu hướng tăng và giảm trong các xu hướng chính, đồng thời cũng có thể khóa lợi nhuận thông qua dừng lỗ để tránh rủi ro.

Ưu điểm của Chiến lược

So với các chiến lược dừng lỗ truyền thống chỉ thiết lập một vị trí dừng lỗ cố định, chiến lược này sử dụng chỉ số băng Bollinger như đường dừng lỗ, để đường dừng lỗ có thể di chuyển với biến động giá. Điều này cho phép nó khóa nhiều lợi nhuận hơn trong các chuyển động tương đối lớn. Ngoài ra, so với việc sử dụng đường giai đoạn ngoại hình một mình, chiến lược này thêm chỉ số băng Bollinger để xác định các khu vực mua quá mức và bán quá mức, có thể chính xác hơn.

Rủi ro và giải pháp

Rủi ro chính của chiến lược này là xu hướng của chỉ số parabolic không mạnh. Trong các thị trường dao động, giá có thể vượt qua các đường thời gian parabolic nhiều lần, gây ra các giao dịch có lợi nhuận thường xuyên nhưng nhỏ cho chiến lược. Tại thời điểm này, phí giao dịch và chi phí trượt có thể chiếm một tỷ lệ lớn và làm giảm lợi nhuận của chiến lược.

Để đối phó với các rủi ro trên, các tham số có thể được điều chỉnh để tăng mức độ thay đổi trong đường thời gian parabolic để giảm xác suất đánh giá sai; hoặc xem xét kết hợp các chỉ số khác để lọc thời gian nhập cảnh. Ví dụ, các chỉ số biến động có thể được thêm để xác định xem thị trường có xu hướng hoặc dao động để giảm các giao dịch không cần thiết.

Tối ưu hóa chiến lược

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

  1. Tối ưu hóa các tham số chỉ số parabolic để điều chỉnh tốc độ thay đổi chỉ số để giảm xác suất đánh giá sai

  2. Tăng các chỉ số kỹ thuật khác lọc, chẳng hạn như thêm MACD, KD để xác định loại thị trường, tránh sự điều khoản trong thị trường dao động

  3. Tối ưu hóa các tham số Bollinger Band để điều chỉnh các tham số băng thông để làm cho Bollinger Band bám gần hơn với sự thay đổi giá

  4. Tăng các chỉ số khối lượng, chẳng hạn như khối lượng giao dịch, các vị trí để hỗ trợ đánh giá để tránh các vụ phá vỡ sai

  5. Kết hợp cơ bản của cổ phiếu để tránh các vấn đề với lợi nhuận của cổ phiếu chiến lược nắm giữ

Tóm lại

Chiến lược này kết hợp đánh giá hướng và sức mạnh xu hướng thị trường với chỉ số parabolic, và sau đó sử dụng các đường ray trên và dưới của Bollinger Bands làm vị trí dừng lỗ di chuyển để thiết lập chiến lược dừng lỗ, đạt được sự kết hợp của theo dõi xu hướng và kiểm soát rủi ro. So với các chiến lược dừng lỗ cố định truyền thống, chiến lược này có thể đạt được lợi nhuận cao hơn trong các chuyển động lớn hơn. Bằng cách tối ưu hóa các tham số và thêm các chỉ số đánh giá phụ trợ khác, sự ổn định của chiến lược có thể được tăng thêm và giảm các giao dịch không cần thiết.


/*backtest
start: 2024-01-02 00:00:00
end: 2024-02-01 00:00:00
period: 3h
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/
// © maxencetajet

//@version=5
strategy("HA_RSI", overlay=true, initial_capital=1000, default_qty_type=strategy.fixed, default_qty_value=0.5, slippage=25)

closeHA = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close)

useDateFilter = input.bool(true, title="Filter Date Range of Backtest",
     group="Backtest Time Period")
backtestStartDate = input(timestamp("5 June 2022"), 
     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.")
backtestEndDate = input(timestamp("5 July 2022"),
     title="End Date", group="Backtest Time Period",
     tooltip="This end 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

swingHighV = input.int(10, title="Swing High", group="number of past candles")
swingLowV = input.int(10, title="Swing Low", group="number of past candles")

emaV = input.int(200, title="Ema Period", group="EMA")

rsiV = input.int(14, title="RSI Period", group="RSI")

start = input(0.02, group="Parabolic SAR")
increment = input(0.02, group="Parabolic SAR")
maximum = input(0.2, "Max Value", group="Parabolic SAR")

ema = ta.ema(closeHA, emaV)
rsi = ta.rsi(closeHA, rsiV)
SAR = ta.sar(start, increment, maximum)

myColor = SAR < low?color.green:color.red

longcondition = closeHA > ema and rsi > 50 and closeHA[1] > SAR and closeHA[1] < SAR[1] 
shortcondition = closeHA < ema and rsi < 50 and closeHA[1] < SAR and closeHA[1] > SAR[1]

float risk_long = na
float risk_short = na
float stopLoss = na
float entry_price = na
float takeProfit = na

risk_long := risk_long[1]
risk_short := risk_short[1]

swingHigh = ta.highest(closeHA, swingHighV)
swingLow = ta.lowest(closeHA, swingLowV)

if strategy.position_size == 0 and longcondition and inTradeWindow
    risk_long := (close - swingLow) / close
    strategy.entry("long", strategy.long, comment="Buy")
    
if strategy.position_size == 0 and shortcondition and inTradeWindow
    risk_short := (swingHigh - close) / close       
    strategy.entry("short", strategy.short, comment="Sell")
    
if strategy.position_size > 0

    stopLoss := strategy.position_avg_price * (1 - risk_long)
    entry_price := strategy.position_avg_price
    strategy.exit("long exit", "long", stop = stopLoss)
    
if strategy.position_size < 0 

    stopLoss := strategy.position_avg_price * (1 + risk_short)
    entry_price := strategy.position_avg_price
    strategy.exit("short exit", "short", stop = stopLoss)

if closeHA[1] < SAR and close > strategy.position_avg_price
    strategy.close("long", comment="Exit Long")
    
if closeHA[1] > SAR and close < strategy.position_avg_price
    strategy.close("short", comment="Exit Short")

p_ep = plot(entry_price, color=color.new(color.white, 0), linewidth=2, style=plot.style_linebr, title='entry price')
p_sl = plot(stopLoss, color=color.new(color.red, 0), linewidth=2, style=plot.style_linebr, title='stopLoss')
fill(p_sl, p_ep, color.new(color.red, transp=85))

plot(SAR, "ParabolicSAR", style=plot.style_circles, color=myColor, linewidth=1)
plot(ema, color=color.white, linewidth=2, title="EMA")

Thêm nữa