Chiến lược này tạo ra các tín hiệu giao dịch bằng cách tính tổng sự khác biệt giữa ROC và SMA. Nó thuộc về các chiến lược giao dịch ngắn hạn.
Chiến lược đầu tiên tính toán SMA với chiều dài l và ROC. Sau đó nó tính toán sự khác biệt k giữa giá đóng và SMA. Sau đó nó tổng hợp k cho s ngày và nhận được sum. Khi sum>0, nó đi dài. Khi sum<0, nó đi ngắn.
Cụ thể, trong mã:
Tính toán SMA với chiều dài l, lấy a.
Tính toán ROC với chiều dài l, lấy r.
Tính toán sự khác biệt giữa giá đóng và SMA: k = đóng - a.
Tổng hợp k cho s ngày, nhận được tổng.
Nếu sum>0, vị trí dài; nếu sum<0, vị trí ngắn.
Rút khi sum<0 cho dài, và sum>0 cho ngắn.
Chìa khóa là tổng hợp sự khác biệt k và sử dụng ký hiệu tổng cho tín hiệu giao dịch. Khi k > 0 trong những ngày gần đây, giá đang tăng, vì vậy hãy mua dài. Khi k < 0, giá đang giảm, vì vậy hãy mua ngắn.
Chiến lược giao dịch ngắn hạn đơn giản này có những lợi thế sau:
Các chỉ số được sử dụng đơn giản và dễ hiểu.
Việc lọc theo sự khác biệt của các chỉ số có thể tìm thấy các cơ hội giao dịch chính xác hơn.
Tóm lại sự khác biệt có thể nắm bắt tốt hơn xu hướng ngắn hạn.
Các thông số l và s có thể được điều chỉnh cho các chu kỳ khác nhau.
Logic là rõ ràng và dễ sửa đổi và tối ưu hóa.
Hiệu quả sử dụng vốn cao cho giao dịch ngắn hạn thường xuyên.
Ngoài ra còn có một số rủi ro:
Rủi ro cao hơn trong giao dịch ngắn hạn, tổn thất là có thể.
Các thông số không phù hợp có thể dẫn đến giao dịch quá mức hoặc bỏ lỡ cơ hội.
Khó thích nghi với sự đảo ngược xu hướng, không dừng lỗ có thể dẫn đến tổn thất lớn.
Việc điều chỉnh các thông số thường xuyên phụ thuộc rất nhiều vào kinh nghiệm của nhà giao dịch.
Tần suất giao dịch cao có thể làm tăng chi phí giao dịch và trượt.
Giải pháp:
Điều chỉnh các thông số đúng cách để giảm tần suất giao dịch.
Thêm các chỉ số xu hướng để xác định sự đảo ngược.
Tối ưu hóa dừng lỗ để kiểm soát lỗ giao dịch duy nhất.
Thêm tối ưu hóa tham số tự động để giảm sự phụ thuộc vào kinh nghiệm.
Tối ưu hóa mô hình thực hiện lệnh để giảm chi phí giao dịch.
Chiến lược có thể được tối ưu hóa thêm trong các khía cạnh sau:
Tối ưu hóa các phương pháp tính toán tham số, như các thuật toán di truyền, để làm cho các tham số thích nghi.
Thêm nhiều chỉ số và bộ lọc để cải thiện chất lượng tín hiệu.
Cải thiện chiến lược dừng lỗ, như dừng lỗ.
Tối ưu hóa các chiến lược quản lý tiền bạc như kiểm soát điểm rủi ro.
Tối ưu hóa mô hình thực thi lệnh với theo xu hướng, kiểm soát trượt vv
Thêm backtesting và các module tự động tối ưu hóa.
Thêm đánh giá định lượng về chất lượng tín hiệu.
Với những tối ưu hóa này, chiến lược này có thể trở thành một hệ thống giao dịch ngắn hạn toàn diện hơn, thông minh hơn, ổn định và có thể kiểm soát được.
Tóm lại, chiến lược này tạo ra các tín hiệu đơn giản từ các chỉ số, với logic rõ ràng và dễ thực hiện. Với việc tối ưu hóa thêm các thông số, dừng lỗ, quản lý tiền vv, nó có thể trở thành một chiến lược giao dịch định lượng có giá trị. Nhưng không có chiến lược nào là hoàn hảo. Các nhà giao dịch vẫn cần áp dụng nó một cách hợp lý dựa trên sở thích rủi ro cá nhân.
/*backtest start: 2023-10-06 00:00:00 end: 2023-11-05 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("Indicator Integrator Strat",default_qty_type = strategy.percent_of_equity, default_qty_value = 100,currency="USD",initial_capital=662, overlay=false) l = input(defval=170,title="Length for indicator") s = input(title="Length of summation",defval=18) a= sma(close,l) r=roc(close,l) k=close-a sum = 0 for i = 0 to s sum := sum + k[i] //plot(a,color=yellow,linewidth=2,transp=0) //bc = iff( sum > 0, white, teal) //plot(sum,color=bc, transp=20, linewidth=3,style=columns) //plot(sma(sum,3),color=white) //hline(0) inpTakeProfit = input(defval = 0, title = "Take Profit", minval = 0) inpStopLoss = input(defval = 0, title = "Stop Loss", minval = 0) inpTrailStop = input(defval = 0, title = "Trailing Stop Loss", minval = 0) inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0) useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na ////buyEntry = crossover(source, lower) ////sellEntry = crossunder(source, upper) if sum>0 strategy.entry("Long", strategy.long, oca_name="Long", comment="Long") else strategy.cancel(id="Long") if sum<0 strategy.entry("Short", strategy.short, oca_name="Short", comment="Short") else strategy.cancel(id="Short") strategy.initial_capital = 50000 plot(strategy.equity-strategy.initial_capital-strategy.closedtrades*.25/2, title="equity", color=red, linewidth=2) hline(0) //longCondition = sum>0 //exitlong = sum<0 //shortCondition = sum<0 //exitshort = sum>0 //strategy.entry(id = "Long", long=true, when = longCondition) //strategy.close(id = "Long", when = exitlong) //strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=exitlong) //strategy.entry(id = "Short", long=false, when = shortCondition) //strategy.close(id = "Short", when = exitshort) //strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=exitshort)