
Chiến lược này là một chiến lược giao dịch định lượng hiệu quả dựa trên mô hình định lượng. Chiến lược này sử dụng mô hình khối lượng của Modelius làm mô hình cơ bản và được mở rộng và tối ưu hóa dựa trên đó. Chiến lược này có thể nắm bắt cơ hội giao dịch định lượng trong thị trường và tạo ra lợi nhuận ổn định.
Cốt lõi của chiến lược này là mô hình khối lượng của Modelius. Mô hình này sử dụng sự thay đổi của giá, khối lượng giao dịch để xác định cơ hội giao dịch định lượng trong thị trường. Cụ thể, chiến lược kết hợp với giá đóng, giá mở, giá cao nhất và giá thấp nhất để tính hướng của đường K hiện tại theo một số quy tắc.
Logic giao dịch cơ bản là, khi chỉ số phá vỡ từ giá trị âm đến giá trị dương, hãy làm nhiều hơn; khi chỉ số phá vỡ từ giá trị dương đến giá trị âm, hãy làm trắng. Ngoài ra, chiến lược cũng thiết lập dừng lỗ, dừng lỗ và theo dõi dừng lỗ để kiểm soát rủi ro.
Ưu điểm lớn nhất của chiến lược này là sử dụng mô hình khối lượng của Modelius để xác định hiệu quả các cơ hội giao dịch định lượng. So với các chỉ số kỹ thuật truyền thống, mô hình này chú ý nhiều hơn đến sự thay đổi khối lượng giao dịch, điều này rất hữu ích trong giao dịch định lượng tần suất cao hiện nay. Ngoài ra, các quy tắc nhập cảnh của chiến lược khá nghiêm ngặt, có thể tránh hiệu quả các cơ hội giao dịch định lượng bị bỏ lỡ đồng thời giảm thiểu khả năng sắp xếp không đúng thứ tự.
Rủi ro chính của chiến lược này là mô hình Modelius Volume tự nó không hoàn toàn tránh được tiếng ồn. Khi thị trường có biến động bất thường, nó có thể dẫn đến các tín hiệu giao dịch sai. Ngoài ra, các thiết lập tham số trong chiến lược cũng có thể ảnh hưởng đến kết quả cuối cùng.
Để kiểm soát rủi ro, các tham số có thể được điều chỉnh thích hợp và kết hợp với các chỉ số khác để đưa ra phán đoán hỗ trợ. Ngoài ra, cũng cần thiết lập vị trí dừng lỗ và dừng hợp lý.
Chiến lược này cũng có một số không gian tối ưu hóa. Ví dụ, bạn có thể xem xét kết hợp các thuật toán học máy để thiết lập các tham số tối ưu hóa động. Hoặc kết hợp các chỉ số như phân tích cảm xúc để nâng cao độ chính xác của quyết định. Ngoài ra, bạn cũng có thể nghiên cứu mối quan hệ giữa các giống khác nhau, xây dựng mô hình đánh giá đa giống.
Nhìn chung, chiến lược này sử dụng các lợi thế của mô hình định lượng Modelius Volume để thiết kế một chiến lược giao dịch định lượng có khả năng hoạt động mạnh mẽ. Có thể được tối ưu hóa bằng cách điều chỉnh tham số, mở rộng mô hình và học máy, để có được lợi nhuận ổn định tốt hơn trong giao dịch thực tế.
/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(title="strategy modelius volume model ", shorttitle="mvm",overlay=true, calc_on_order_fills=true, default_qty_type=strategy.percent_of_equity, default_qty_value=50, overlay=false)
method = input(defval="ATR", options=["ATR", "Traditional", "Part of Price"], title="Renko Assignment Method")
methodvalue = input(defval=14.0, type=float, minval=0, title="Value")
pricesource = input(defval="Close", options=["Close", "Open / Close", "High / Low"], title="Price Source")
useClose = pricesource == "Close"
useOpenClose = pricesource == "Open / Close" or useClose
useTrueRange = input(defval="Auto", options=["Always", "Auto", "Never"], title="Use True Range instead of Volume")
isOscillating=input(defval=true, type=bool, title="Oscillating")
normalize=input(defval=false, type=bool, title="Normalize")
vol = useTrueRange == "Always" or (useTrueRange == "Auto" and na(volume))? tr : volume
op = useClose ? close : open
hi = useOpenClose ? close >= op ? close : op : high
lo = useOpenClose ? close <= op ? close : op : low
if method == "ATR"
methodvalue := atr(round(methodvalue))
if method == "Part of Price"
methodvalue := close/methodvalue
currclose = na
prevclose = nz(currclose[1])
prevhigh = prevclose + methodvalue
prevlow = prevclose - methodvalue
currclose := hi > prevhigh ? hi : lo < prevlow ? lo : prevclose
direction = na
direction := currclose > prevclose ? 1 : currclose < prevclose ? -1 : nz(direction[1])
directionHasChanged = change(direction) != 0
directionIsUp = direction > 0
directionIsDown = direction < 0
barcount = 1
barcount := not directionHasChanged and normalize ? barcount[1] + barcount : barcount
vol := not directionHasChanged ? vol[1] + vol : vol
res = barcount > 1 ? vol/barcount : vol
x=isOscillating and directionIsDown ? -res : res
TP = input(0) * 10
SL = input(0) * 10
TS = input(1) * 10
TO = input(3) * 10
CQ = 100
TPP = (TP > 0) ? TP : na
SLP = (SL > 0) ? SL : na
TSP = (TS > 0) ? TS : na
TOP = (TO > 0) ? TO : na
longCondition = crossover(x,0)
if (longCondition)
strategy.entry("Long", strategy.long)
shortCondition = crossunder(x,0)
if (shortCondition)
strategy.entry("Short", strategy.short)
strategy.exit("Close Short", "Short", qty_percent=CQ, profit=TPP, loss=SLP, trail_points=TSP, trail_offset=TOP)
strategy.exit("Close Long", "Long", qty_percent=CQ, profit=TPP, loss=SLP, trail_points=TSP, trail_offset=TOP)