Chiến lược thử nghiệm ngược Harami giảm

Tác giả:ChaoZhang, Ngày: 2023-11-23 11:47:10
Tags:

img

Tổng quan

Chiến lược Backtest đảo ngược Harami giảm giá xác định các mẫu đảo ngược Harami giảm giá trong biểu đồ nến và tự động giao dịch chúng. Nó đi ngắn khi phát hiện mô hình Harami giảm giá và đóng vị trí khi dừng lỗ hoặc lấy lợi nhuận được kích hoạt.

Chiến lược logic

Chỉ số nhận dạng mô hình cốt lõi của chiến lược này là: đóng của nến đầu tiên là nến tăng dài và đóng của nến thứ hai nằm bên trong thân nến đầu tiên, tạo thành nến giảm. Điều này chỉ ra một mô hình đảo ngược Harami giảm tiềm năng. Khi mô hình này hình thành, chiến lược sẽ ngắn.

Lý thuyết cụ thể là:

  1. Tính toán nếu kích thước cơ thể của ngọn nến đầu tiên ABS ((Close1 - Open1) lớn hơn so với kích thước cơ thể tối thiểu thiết lập
  2. Kiểm tra xem nến đầu tiên có tăng không Close1 > Open1
  3. Kiểm tra xem nến hiện tại có giảm hay không Mở > Đóng
  4. Kiểm tra xem nến hiện tại mở là nhỏ hơn hoặc bằng với trước đó đóng mở <= Close1
  5. Kiểm tra xem nến trước đó mở là nhỏ hơn hoặc bằng với nến hiện tại đóng mở1 <= đóng
  6. Kiểm tra xem cơ thể của nến hiện tại là nhỏ hơn cơ thể trước đó mở - đóng < đóng1 - mở1
  7. Nếu tất cả các điều kiện vượt qua, một Harami Bearish đã được hình thành và chiến lược không thành công.

Phân tích lợi thế

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

  1. Sử dụng tín hiệu đảo ngược giảm mạnh của Harami cho xác suất lợi nhuận cao hơn
  2. Kết quả backtest rộng rãi là tích cực.
  3. Logic đơn giản rõ ràng dễ hiểu và tối ưu hóa
  4. Đơn vị xác định giá trị giao dịch.

Phân tích rủi ro

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

  1. Thị trường có thể có sự phá vỡ sai dẫn đến việc mất vị trí. Có thể mở rộng dừng lỗ hoặc thêm bộ lọc.
  2. Sự biến động cao có thể kích hoạt dừng lỗ sớm nên chọn các sản phẩm biến động thấp hơn.
  3. Dữ liệu backtest không đủ có thể không phản ánh điều kiện thị trường thực tế.

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

Chiến lược có thể được tối ưu hóa hơn nữa trong các lĩnh vực sau:

  1. Thêm Volume, MACD và các bộ lọc khác để cải thiện chất lượng tín hiệu
  2. Tối ưu hóa chiến lược dừng lỗ và lấy lợi nhuận, điều chỉnh mức năng động
  3. Tăng hiệu quả giữ vị trí, kết hợp với xu hướng và các yếu tố khác để giảm giao dịch không hiệu quả
  4. Kiểm tra các sản phẩm giao dịch khác nhau để tìm các lựa chọn thay thế biến động thấp hơn

Kết luận

Chiến lược thử nghiệm ngược của Bearish Harami có logic rõ ràng, dễ hiểu, kết quả kiểm tra lại tốt và rủi ro có thể kiểm soát được. Nó có chỗ cho các điều chỉnh và tối ưu hóa giao dịch trực tiếp. Nhìn chung các tín hiệu giao dịch đáng tin cậy và đáng để tối ưu hóa và xác minh thêm trong giao dịch trực tiếp.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-19 23:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 16/01/2019 
//    This is a bearish reversal pattern formed by two candlesticks in which a short 
//    real body is contained within the prior session's long real body. Usually the 
//    second real body is the opposite color of the first real body. The Harami pattern 
//    is the reverse of the Engulfing pattern. 
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
strategy(title = "Bearish Harami Backtest", overlay = true)
input_takeprofit = input(20, title="Take Profit pip")
input_stoploss = input(10, title="Stop Loss pip")
input_minsizebody = input(3, title="Min. Size Body pip")
barcolor(abs(close- open) >= input_minsizebody ? close[1] > open[1] ? open > close ? open <= close[1] ? open[1] <= close ? open - close < close[1] - open[1] ? yellow :na :na : na : na : na : na)
pos = 0.0
barcolor(nz(pos[1], 0) == -1 ? red: nz(pos[1], 0) == 1 ? green : blue )
posprice = 0.0
posprice := abs( close - open) >= input_minsizebody? close[1] > open[1] ? open > close ? open <= close[1] ? open[1] <= close ? open - close < close[1] - open[1] ? close :nz(posprice[1], 0) :nz(posprice[1], 0) : nz(posprice[1], 0) : nz(posprice[1], 0) : nz(posprice[1], 0): nz(posprice[1], 0)
pos := iff(posprice > 0, -1, 0)
if (pos == 0) 
    strategy.close_all()
if (pos == -1)
    strategy.entry("Short", strategy.short)
posprice := iff(low <= posprice - input_takeprofit and posprice > 0, 0 ,  nz(posprice, 0))
posprice := iff(high >= posprice + input_stoploss and posprice > 0, 0 ,  nz(posprice, 0))


Thêm nữa