
Chiến lược này được sử dụng để giao dịch chứng khoán bằng cách kết hợp nhiều mô hình hình nón. Nó kết hợp mô hình đường gói, mô hình nón trống và mô hình hình chữ thập để nắm bắt cơ hội giao dịch trong các điều kiện thị trường khác nhau.
Lập luận cốt lõi của chiến lược này là xây dựng một số quy tắc phán đoán hình dạng hình nón, sau đó tổng hợp các quy tắc này để tạo ra tín hiệu giao dịch.
Đầu tiên, nó xác định một số biến cơ bản để mô tả các thuộc tính của dây thừng, chẳng hạn như kích thước thực thể của dây thừng, giá mở, giá đóng, v.v.
Sau đó, nó xác định 3 loại thanh giao dịch dựa trên mối quan hệ giữa giá đóng cửa và giá mở cửa của thanh: 1 đại diện cho thanh, -1 đại diện cho thanh giảm, 0 đại diện cho thanh không mở và thanh không giảm.
Dựa trên đó, ba quy tắc phán đoán hình dạng hình nón được xây dựng:
Mô hình đường gói (Engulfing Pattern): đường K hiện tại bao quanh đường K trên, tạo ra tín hiệu mua hoặc bán.
Mô hình Harami: K-line trên bao quanh K-line hiện tại, tạo ra tín hiệu mua hoặc bán.
Mô hình chữ thập Harami: kết hợp giữa nón trống và chữ thập tạo ra tín hiệu mua hoặc bán.
Theo các quy tắc hình dạng hình tròn này, thời gian mua và bán có thể được xác định. Và kết hợp với một số điều kiện bổ sung, chẳng hạn như giới hạn phạm vi thời gian giao dịch, để lọc các tín hiệu giao dịch không phù hợp.
Trong phần giao dịch, trước tiên sẽ đánh giá tình trạng giữ vị trí, nếu ngược lại với hướng tín hiệu, sẽ tháo vị trí trước, sau đó mở vị trí theo hướng tín hiệu.
Nhiều hình thức kết hợp, ổn định. Một hình thức đơn có thể bị ảnh hưởng nhiều bởi môi trường thị trường cụ thể, hình thức kết hợp có thể tăng sự ổn định.
Xác nhận hình dạng theo cùng hướng, đánh giá tổng hợp, tránh sai lầm. Các mô hình hình dạng khác nhau đánh giá xu hướng từ các góc độ khác nhau, có thể xác nhận tín hiệu với nhau.
Các tham số có thể điều chỉnh, thích ứng. Người dùng có thể tự do kết hợp các mô hình hình dạng khác nhau, điều chỉnh các tham số như phạm vi thời gian giao dịch, linh hoạt để đáp ứng sự thay đổi của thị trường.
Logic giao dịch hoàn hảo. Kết hợp với phán đoán giữ vị thế và logic thoát lỗ, có thể kiểm soát rủi ro hiệu quả.
Sự kết hợp nhiều tham số làm tăng sự phức tạp. Cần kiểm tra sự phù hợp của các tham số, và các tham số không phù hợp có thể làm giảm hiệu quả.
Cài đặt tham số shape phụ thuộc vào kinh nghiệm. Các tham số shape như kích thước thực thể phù hợp có cần phải tích lũy kinh nghiệm để điều chỉnh không.
Rủi ro của việc nắm giữ một vị trí đơn phương. Chỉ làm nhiều hoặc chỉ làm giảm sẽ hạn chế không gian kiếm lợi nhuận. Bạn có thể làm nhiều việc làm giảm cùng một lúc thông qua cài đặt tham số.
Có thể bỏ lỡ điểm đảo ngược xu hướng. Chiến lược này chủ yếu dựa trên nhận dạng hình dạng, không thể đánh giá hiệu quả sự đảo ngược xu hướng. Có thể kết hợp với các chỉ số khác để đánh giá thời gian.
Tăng các chiến lược dừng lỗ để giảm rủi ro của việc nắm giữ vị trí đơn phương.
Kết hợp với các chỉ số kỹ thuật khác để xác định xu hướng lớn và tránh giao dịch ngược như MACD, Bollinger Band.
Kiểm tra các tham số ưa thích của các giống khác nhau, tạo ra các kết hợp hình dạng phù hợp với các giống khác nhau.
Thêm các thuật toán học máy để hỗ trợ tối ưu hóa tham số và nhận dạng hình dạng thông qua AI.
Chiến lược này xây dựng một hệ thống giao dịch đường ngắn tương đối ổn định và đáng tin cậy bằng cách sử dụng tích hợp các lợi thế của nhiều hình thức đan. Tuy nhiên, một số thiết lập tham số và kiểm soát rủi ro vẫn cần được tối ưu hóa hơn nữa để thích ứng với môi trường thị trường phức tạp hơn. Nhìn chung, chiến lược này hợp lý, dựa trên tích lũy đủ kinh nghiệm và dữ liệu, tối ưu hóa thông minh thông qua các phương tiện học máy, triển vọng rộng rãi.
/*backtest
start: 2022-10-10 00:00:00
end: 2023-10-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=3
strategy(title = "Noro's CandleModels Tests", shorttitle = "CandleModels tests", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
eng = input(true, defval = true, title = "Model Engulfing")
har = input(true, defval = true, title = "Model Harami")
harc = input(true, defval = true, title = "Model Harami Cross")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
rev = input(false, defval = false, title = "Reversive trading")
//Body
body = abs(close - open)
abody = sma(body, 10)
//MinMax Bars
min = min(close, open)
max = max(close, open)
//Signals
bar = close > open ? 1 : close < open ? -1 : 0
doji = body < abody / 10
up1 = eng and bar == 1 and bar[1] == -1 and min <= min[1] and max >= max[1]
dn1 = eng and bar == -1 and bar[1] == 1 and min <= min[1] and max >= max[1]
up2 = har and bar == 1 and bar[1] == -1 and min >= min[1] and max <= max[1]
dn2 = har and bar == -1 and bar[1] == 1 and min >= min[1] and max <= max[1]
up3 = harc and doji and bar[1] == -1 and low >= min[1] and high <= max[1]
dn3 = harc and doji and bar[1] == 1 and low >= min[1] and high <= max[1]
exit = ((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and body > abody / 2 and rev == false
//Trading
if up1 or up2 or up3
if strategy.position_size < 0
strategy.close_all()
strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if dn1 or dn2 or dn3
if strategy.position_size > 0
strategy.close_all()
strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
strategy.close_all()