Chiến lược dừng lỗ di chuyển kết hợp chu kỳ Parobel và dải Bollinger


Ngày tạo: 2024-02-02 11:05:57 sửa đổi lần cuối: 2024-02-02 11:05:57
sao chép: 2 Số nhấp chuột: 455
1
tập trung vào
1218
Người theo dõi

Chiến lược dừng lỗ di chuyển kết hợp chu kỳ Parobel và dải Bollinger

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 các chỉ số chu kỳ Parobel với các chỉ số Brin để thiết lập chiến lược dừng chân di động. Chiến lược này sử dụng đường chu kỳ Parobel để xác định xu hướng của thị trường, sau đó sử dụng các động thái trên và dưới đường đua của Brin để thiết lập điểm dừng để thực hiện dừng chân di độ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ố Parobel để xác định xu hướng thị trường hiện tại. Khi giá đóng cửa hôm nay trên đường chu kỳ Parobel ngày hôm qua, cho rằng thị trường đã đảo ngược sang lạc quan, bạn có thể làm nhiều hơn; Khi giá đóng cửa hôm nay dưới đường chu kỳ ngày hôm qua, thì thị trường đi xuống, bạn có thể phá vỡ.

Thứ hai, chiến lược này kết hợp với chỉ số Bollinger Bands để thiết lập điểm dừng động. Đường trên của Bollinger Bands có thể được coi là vùng mua quá mức và đường dưới là vùng bán quá mức. Sau khi làm nhiều, nếu giá giảm xuống đường Bollinger Bands, nó sẽ dừng lại.

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

Lợi thế chiến lược

Chiến lược này sử dụng chỉ số Brin Belt làm đường dừng để cho đường dừng có thể di chuyển theo 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 tình huống tương đối lớn. Ngoài ra, chiến lược này có thêm chỉ số Brin Belt để xác định vùng quá mua quá bán, có thể chính xác hơn so với việc sử dụng đường chu kỳ Parobel đơn lẻ.

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

Rủi ro chính của chiến lược này là sự định hướng của chỉ số Parobel không mạnh mẽ. Trong tình huống biến động, giá có thể lên và xuống nhiều lần vượt qua đường chu kỳ Parobel, khiến chiến lược tạo ra giao dịch thường xuyên nhưng có lợi nhuận nhỏ.

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

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

Chính sách này có thể được tối ưu hóa theo các khía cạnh sau:

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

  2. Thêm các bộ lọc cho các chỉ số kỹ thuật khác, chẳng hạn như thêm MACD, KD và các loại hình giao dịch khác để tránh mạo hiểm trong thị trường biến động

  3. Tối ưu hóa tham số Brinh và điều chỉnh tham số Bandwidth để làm cho Brinh gần hơn với sự thay đổi giá

  4. Tăng các chỉ số năng lượng, chẳng hạn như khối lượng giao dịch, số lượng nắm giữ và các phán quyết phụ trợ để tránh phá vỡ giả

  5. Kết hợp thông tin cơ bản về cổ phiếu để tránh các vấn đề ảnh hưởng đến kết quả cổ phiếu nắm giữ chiến lược

Tóm tắt

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

Mã nguồn chiến lược
/*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")