Chiến lược động lực giữa các chu kỳ chứa

Tác giả:ChaoZhang, Ngày: 2023-09-20 14:59:37
Tags:

Tổng quan

Ý tưởng cốt lõi của chiến lược này là xác định hướng xu hướng bằng cách sử dụng mô hình nến chứa giữa các chu kỳ và sử dụng nó như là tín hiệu đầu vào. Khi một mô hình chứa giữa các chu kỳ xuất hiện có chứa nến trước đó, chúng ta có thể suy luận rằng đây là một điểm mà xu hướng đang đảo ngược, tại thời điểm đó chúng ta có thể đi dài trên một sự đột phá trên mức cao trước đó hoặc đi ngắn trên một sự đột phá dưới mức thấp trước đó, với thiết lập dừng lỗ và lấy lợi nhuận thích hợp.

Chiến lược logic

  1. Kiểm tra xem mô hình chứa giữa các chu kỳ xảy ra hay không. logic cụ thể là: nến hiện tại cao hơn nến trước cao hơn, và nến hiện tại thấp hơn nến trước thấp.

  2. Xác định nếu nến trước đó là tăng hoặc giảm. Nếu đóng cao hơn mở, nó tăng. Nếu đóng thấp hơn mở, nó giảm.

  3. Nếu nến trước đó tăng và mô hình chứa xảy ra, đặt lệnh dừng mua ở mức cao của nến trước cộng với 10% phạm vi của nó.

  4. Nếu nến trước đó giảm và mô hình chứa xảy ra, đặt lệnh dừng bán ở mức thấp của nến trước trừ đi 10% phạm vi của nó.

  5. Khi lệnh dừng được kích hoạt và vị trí được mở, đặt lệnh dừng lỗ và lấy lợi nhuận.

  6. Nếu một mô hình thanh bên trong khác hình thành, đóng các vị trí hiện có trước và sau đó đặt lệnh chờ mới.

Phân tích lợi thế

Những lợi thế của chiến lược này bao gồm:

  1. Nó sử dụng logic vốn có của các ngọn nến và cung cấp thời gian nhập chính xác.

  2. Các quy tắc đơn giản và dễ dàng để làm theo cho giao dịch thực tế.

  3. Đặt lỗ và lấy lợi nhuận dựa trên phạm vi nến trước đó giúp kiểm soát rủi ro.

  4. Các đơn đặt hàng đang chờ được đặt mỗi khi một mô hình đủ điều kiện xuất hiện, cho phép chúng tôi theo dõi xu hướng mới.

Phân tích rủi ro

Ngoài ra còn có một số rủi ro:

  1. Mô hình chứa không phải lúc nào cũng dẫn đến sự đảo ngược xu hướng hoặc tăng tốc.

  2. Khoảng cách dừng lỗ có thể quá nhỏ để chịu được sự biến động lớn trên thị trường.

  3. Mục tiêu lợi nhuận có thể quá rộng, ngăn cản lợi nhuận kịp thời.

  4. Chiến lược dựa nhiều hơn vào xu hướng thị trường.

  5. Tần suất giao dịch cao dẫn đến chi phí giao dịch lớn.

Giải pháp:

  1. Thêm các chỉ số khác để xác nhận tín hiệu và giảm tín hiệu sai.

  2. Mở rộng stop loss một chút nhưng không quá 50% phạm vi của nến trước.

  3. Giảm mục tiêu thu lợi nhuận xuống khoảng 50% của phạm vi nến trước đó.

  4. Tối ưu hóa quản lý vốn, giảm kích thước vị trí cá nhân cho các thị trường khác nhau.

  5. Nới lỏng các tiêu chí nhập cảnh để giảm tần suất giao dịch.

Hướng dẫn tối ưu hóa

Một số cách để tối ưu hóa chiến lược:

  1. Thêm một chỉ số xu hướng như MACD để xác định hướng xu hướng, tránh những cú sốc trong quá trình củng cố.

  2. Sử dụng các kỹ thuật dừng lỗ tiên tiến hơn như dừng lại hoặc dừng lỗ bảo vệ lợi nhuận.

  3. Kiểm tra các tỷ lệ dừng lỗ và lợi nhuận khác nhau để tìm các thông số tối ưu.

  4. Thêm logic nhập lại để nắm bắt xu hướng một lần nữa sau khi dừng lỗ.

  5. Tối ưu hóa kích thước vị trí dựa trên biến động thị trường.

  6. Tối ưu hóa quản lý vốn, chẳng hạn như kích thước vị trí phân số cố định.

  7. Kiểm tra chiến lược trên các sản phẩm và khung thời gian khác nhau.

Kết luận

Tóm lại, đây là một chiến lược sử dụng mô hình chứa giữa các chu kỳ để xác định các điểm chuyển đổi xu hướng và đặt các lệnh đang chờ để nắm bắt sự đảo ngược xu hướng. Nó có những lợi thế của các tín hiệu đầu vào rõ ràng, các quy tắc đơn giản và rủi ro có thể kiểm soát được, nhưng cũng có một số rủi ro tín hiệu sai và không gian tối ưu hóa. Chúng ta có thể cải thiện thêm sự ổn định và lợi nhuận của nó bằng cách kết hợp các bộ lọc xu hướng, tối ưu hóa các điểm dừng, điều chỉnh kích thước vị trí vv. Nó phù hợp hơn cho các thị trường xu hướng, và cần được tối ưu hóa và thử nghiệm cho các điều kiện thị trường khác nhau trước khi sử dụng thực tế để tối đa hóa hiệu quả của nó.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-03-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3

// Inside Bar Momentum Strategy
// As defined on Babypips.com
// https://www.babypips.com/trading/forex-inside-bar-20170113

// strategy("Babypips: Inside Bar Momentum Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=5)

From_Year  = input(defval = 2018, title = "From Year")
From_Month = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
From_Day   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
To_Year    = input(defval = 9999, title = "To Year")
To_Month   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
To_Day     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
Start  = timestamp(From_Year, From_Month, From_Day, 00, 00)  // backtest start window
Finish = timestamp(To_Year, To_Month, To_Day, 23, 59)        // backtest finish window
Window = true

Stop_Buy_Perc  = input(10, "Stop Buy Order Percentage From Previous Candle's Range")/100
Stop_Loss_Perc = input(20, "Stop Loss Distance from High/Low of Previous Candle")/100
Take_Prof_Perc = input(80, "Take Profit Distance from High/Low of Previous Candle")/100

Risk = input(2, "Percentage Of EQUITY to risk per trade", step=0.1, minval=0, maxval=100)/100

Inside_Bar = high[1] > high[0] and low[1] < low[0]
Prev_Range = high[1] - low[1]
Bullish = open[1] < close[1]
Bearish = open[1] > close[1]

// Get Key Levels 
Long_Stop_Buy_Level   = high[1] + (Prev_Range * Stop_Buy_Perc)
Short_Stop_Buy_Level  = low[1]  - (Prev_Range * Stop_Buy_Perc)
Long_Stop_Loss_Level  = high[1] - (Prev_Range * Stop_Loss_Perc)
Short_Stop_Loss_Level = low[1]  + (Prev_Range * Stop_Loss_Perc)
Long_Take_Prof_Level  = high[1] + (Prev_Range * Take_Prof_Perc)
Short_Take_Prof_Level = low[1]  - (Prev_Range * Take_Prof_Perc)

// Position Sizing
long_qty = floor((strategy.equity * Risk) / (Long_Stop_Buy_Level - Long_Stop_Loss_Level))
short_qty = floor((strategy.equity * Risk) / (Short_Stop_Loss_Level - Short_Stop_Buy_Level))

// -------------------------- LONG CONDITIONS --------------------------------//
// The first candlestick must be bullish (green or white) and if the second 
// candlestick is completely contained by the first, set a buy stop order at 
// the first candle’s high plus 10% of its range (high minus low).

// Place the stop loss at the first candle’s high minus 20% of its range 
// and set the target at the first candle’s high plus 80% of its range

// If another inside bar pattern forms, the current position should be closed 
// or the pending buy/sell order must be canceled and entry orders must be 
// updated to the latest candles.

Long_Condition = Window and Inside_Bar and Bullish
if (Long_Condition)
    // Incase we still have a buy stop order in the market
    strategy.cancel_all()
    // Close any existing positions according to the rules
    strategy.close_all()
    strategy.entry("Bullish IB", strategy.long, stop=Long_Stop_Buy_Level)
    strategy.exit("Bullish Exit","Bullish IB", stop=Long_Stop_Loss_Level, limit=Long_Take_Prof_Level)
    
// -------------------------- SHORT CONDITIONS -------------------------------//
// The first candlestick must be bearish (red or black) and if the second 
// candlestick is completely contained by the first, set a sell stop order at 
// the first candle’s low minus 10% of its range (high minus low).

// Place the stop loss at the first candle’s low plus 20% of its range and 
// set the target at the first candle’s low minus 80% of its range.

// If another inside bar pattern forms, the current position should be closed 
// or the pending buy/sell order must be canceled and entry orders must be 
// updated to the latest candles.

Short_Condition = Window and Inside_Bar and Bearish
if (Short_Condition)
    // Incase we still have a buy stop order in the market
    strategy.cancel_all()
    // Close any existing positions according to the rules
    strategy.close_all()
    strategy.entry("Bearish IB", strategy.short, stop=Short_Stop_Buy_Level)
    strategy.exit("Bearish Exit","Bearish IB", stop=Short_Stop_Loss_Level, limit=Short_Take_Prof_Level)
    
// ----------------------------- PLOTTING ------------------------------------//
plotshape(Inside_Bar, style=shape.arrowdown, location=location.abovebar, color=purple)


Thêm nữa