
Chiến lược này là một hệ thống giao dịch dựa trên nhiều chỉ số kỹ thuật, kết hợp các chỉ số trung bình di chuyển (EMA) chéo, giá tham chiếu điểm trung tâm (CPR), bộ lọc khối lượng giao dịch và thiết lập dừng / dừng tự động. Lập luận cốt lõi của chiến lược là xác định xu hướng thị trường thông qua chéo của đường ngắn và đường chậm của EMA, đồng thời sử dụng CPR làm điểm tham chiếu giá bổ sung để xác nhận tín hiệu và xác nhận sự hoạt động của thị trường thông qua bộ lọc khối lượng giao dịch, cuối cùng thiết lập phần trăm dừng và dừng cố định để quản lý rủi ro và khóa lợi nhuận.
Logic giao dịch cốt lõi của chiến lược này dựa trên một số thành phần quan trọng sau:
Hệ thống chéo EMAChiến lược sử dụng đường trung bình chuyển động chỉ số 20 chu kỳ và 50 chu kỳ (EMA) làm chỉ số xu hướng chính. Khi EMA nhanh (EMA 20 chu kỳ) vượt qua EMA chậm (EMA 50 chu kỳ), tạo ra tín hiệu đa; Khi EMA nhanh vượt qua EMA chậm (EMA 50 chu kỳ), tạo ra tín hiệu ngắn.
CPR (Central Point Reference Price) xác nhậnChiến lược đưa ra chỉ số CPR như một công cụ xác định mức giá. CPR bao gồm ba mức giá quan trọng: điểm trung tâm ((Pivot), trung tâm dưới ((BC) và trung tâm trên ((TC)). Các mức này được tính dựa trên mức cao, thấp và giá đóng cửa của ngày trước. Trong nhiều trường hợp, chiến lược yêu cầu giá phải nằm trên điểm trung tâm; trong trường hợp trống, giá phải nằm dưới điểm trung tâm.
Bộ lọc khối lượng giao dịch: Để tránh giao dịch khi khối lượng giao dịch không đủ, chiến lược đặt điều kiện khối lượng giao dịch phải lớn hơn khối lượng giao dịch trung bình 20 ngày. khối lượng giao dịch cao thường biểu thị sự tham gia của thị trường cao, tăng độ tin cậy của biến động giá. Người dùng có thể chọn để bật bộ lọc này.
Tự động dừng / dừng: Chiến lược đặt phần trăm dừng và dừng cố định dựa trên giá vào. Theo cài đặt mặc định, dừng nằm ở mức 1,5% dưới giá vào và dừng ở mức 3% trên giá vào. Điều này làm cho tỷ lệ lợi nhuận rủi ro là 1:2, phù hợp với nguyên tắc quản lý rủi ro lành mạnh. Các tham số này có thể được điều chỉnh thông qua điều khiển đầu vào.
Hình ảnh tín hiệuChiến lược hiển thị trực quan các tín hiệu mua và bán dưới dạng thẻ và hình dạng trên biểu đồ, cho phép các nhà giao dịch nhìn thấy rõ điểm vào.
Logic thực hiện giao dịch rất đơn giản: khi đáp ứng nhiều điều kiện (thông qua EMA, giá cao hơn điểm trung tâm, điều kiện khối lượng giao dịch được đáp ứng), chiến lược sẽ vào vị trí nhiều đầu, đồng thời đặt lệnh dừng lỗ và dừng. Khi đáp ứng các điều kiện trống (thông qua EMA, giá thấp hơn điểm trung tâm, điều kiện khối lượng giao dịch được đáp ứng), chiến lược sẽ vào vị trí trống, cũng đặt lệnh dừng lỗ và dừng tương ứng.
Cơ chế xác nhận đa dạngChiến lược kết hợp các chỉ số xu hướng (EMA), chỉ số mức giá (CPR) và chỉ số khối lượng giao dịch để tạo thành một hệ thống xác nhận đa dạng. Điều này làm giảm khả năng có tín hiệu giả và tăng độ tin cậy giao dịch. Chỉ số đơn lẻ có thể tạo ra tín hiệu sai, nhưng xác nhận nhiều loại chỉ số khác nhau làm tăng khả năng giao dịch thành công.
Khả năng thích nghiBằng các tham số có thể điều chỉnh (như độ dài EMA, tỷ lệ dừng, tỷ lệ dừng và việc sử dụng bộ lọc khối lượng giao dịch), chiến lược có thể thích ứng với các môi trường thị trường khác nhau và sở thích rủi ro của các nhà giao dịch. Điều này làm cho chiến lược có thể áp dụng cho cả thị trường có tính biến động cao và thị trường tương đối ổn định.
Tích hợp quản lý rủi roChiến lược này tích hợp các cơ chế dừng và dừng tự động, điều mà nhiều chiến lược cơ bản thiếu. Điều này đảm bảo rằng mỗi giao dịch có mục tiêu rủi ro và lợi nhuận được xác định trước, tránh ảnh hưởng của quyết định cảm xúc đến kết quả giao dịch.
Tín hiệu giao dịch trực quanChiến lược: hiển thị tín hiệu giao dịch trực quan trên biểu đồ, cho phép các nhà giao dịch dễ dàng xác định điểm vào và thoát, giúp phản hồi và điều chỉnh chiến lược.
Mã đơn giản và hiệu quảCấu trúc mã chiến lược rõ ràng, mô-đun logic, dễ hiểu và sửa đổi. Điều này cho phép ngay cả các thương nhân có kinh nghiệm lập trình hạn chế cũng có thể hiểu cách chiến lược hoạt động và điều chỉnh theo nhu cầu của mình.
Khả năng sử dụng rộng rãiChiến lược có thể áp dụng cho các loại giao dịch khác nhau, bao gồm cả hợp đồng tương lai và cổ phiếu, không cần điều chỉnh đặc biệt cho một thị trường cụ thể. Tính phổ biến này cho phép chiến lược duy trì hiệu suất tương đối ổn định trong các môi trường thị trường khác nhau.
Tín hiệu chéo giảChiến lược giao dịch EMA có thể tạo ra nhiều tín hiệu giao dịch giả trong thị trường ngang hoặc biến động, dẫn đến giao dịch thua lỗ liên tục. Mặc dù CPR và bộ lọc khối lượng giao dịch giúp giảm các tín hiệu giả này, nhưng đây vẫn là một rủi ro đáng kể trong thị trường thiếu xu hướng rõ ràng. Giải pháp là tạm dừng giao dịch trong thị trường ngang hoặc thêm các chỉ số xác nhận xu hướng bổ sung.
Hạn chế của dừng cố địnhChiến lược: Sử dụng dừng phần trăm cố định dựa trên giá nhập, điều này có thể không phù hợp với tất cả các điều kiện thị trường và biến động. Trong thị trường biến động cao, dừng phần trăm cố định có thể quá chặt chẽ; trong thị trường biến động thấp, có thể quá thoải mái. Một giải pháp có thể là sử dụng dừng động dựa trên ATR (trung bình phạm vi thực tế) để thích ứng tốt hơn với biến động của thị trường.
Điểm trượt và rủi ro thực hiệnChiến lược: Giả sử rằng tất cả các lệnh có thể được thực hiện theo giá định, nhưng giao dịch thực tế có thể bị trượt và chậm thực hiện, đặc biệt là trong thị trường có tính thanh khoản hạn chế. Điều này có thể dẫn đến kết quả giao dịch thực tế khác với kết quả đo lường. Để giảm thiểu rủi ro này, bạn có thể sử dụng các thiết lập bảo thủ trong giao dịch thực tế, chẳng hạn như tăng phạm vi dừng lỗ hoặc giảm quy mô vị trí.
Tối ưu hóa quá mứcHiệu suất của chiến lược phụ thuộc rất nhiều vào các tham số được chọn (dài EMA, tỷ lệ dừng / dừng, v.v.). Các tham số tối ưu hóa quá mức có thể dẫn đến tình huống hoạt động tốt trong phản hồi nhưng hoạt động kém trong giao dịch thực tế. Giải pháp là sử dụng chu kỳ phản hồi dài hơn và kiểm tra sức mạnh của chiến lược trong nhiều điều kiện thị trường.
Hạn chế của CPRChiến lược: Sử dụng dữ liệu đường ngày để tính toán CPR, có thể không đủ linh hoạt hoặc phản ứng nhanh chóng trong giao dịch trong ngày hoặc trong khung thời gian ngắn hơn. Một giải pháp có thể là điều chỉnh chu kỳ tính toán CPR theo khung thời gian được sử dụng.
Tín hiệu giao dịch giảChỉ dựa vào khối lượng giao dịch cao hơn giá trị trung bình 20 ngày có thể không đủ để đánh giá chính xác sự hoạt động của thị trường. Một số ngày giao dịch bất thường có thể có khối lượng giao dịch tăng đột biến, nhưng không đại diện cho sự xác nhận xu hướng thực sự.
Cải thiện cơ chế nhận diện xu hướngChiến lược hiện tại chủ yếu dựa trên EMA để xác định xu hướng chéo, bạn có thể xem xét thêm các chỉ số xu hướng bổ sung, chẳng hạn như ADX (chỉ số hướng trung bình), để đảm bảo giao dịch chỉ trong thị trường xu hướng mạnh. Điều này sẽ giúp lọc các tín hiệu giả trong thị trường ngang, nâng cao chất lượng giao dịch thay vì số lượng. Trên thực hiện mã, bạn có thể thêm điều kiện ADX> 25 làm bộ lọc giao dịch bổ sung.
Động lực dừng và dừng: Thay thế các điểm dừng và dừng cố định bằng các chỉ số biến động như ATR để thích ứng tốt hơn với sự biến động của các môi trường thị trường khác nhau. Ví dụ: có thể đặt điểm dừng là 2 lần ATR và đặt điểm dừng là 4 lần ATR để duy trì tỷ lệ lợi nhuận rủi ro tương tự nhưng thích ứng tốt hơn với điều kiện thị trường.
Tăng cường phân tích khối lượng giao dịch: Có thể cải thiện bộ lọc khối lượng giao dịch để nó không chỉ xem xét kích thước khối lượng giao dịch mà còn xem xét xu hướng khối lượng giao dịch và mối quan hệ giá - khối lượng giao dịch. Ví dụ, có thể thêm điều kiện yêu cầu khối lượng giao dịch tăng phù hợp với hướng đi của giá, hoặc sử dụng các chỉ số khối lượng giao dịch phức tạp hơn như OBV (độ năng lượng).
Tối ưu hóa thời gian nhập họcChiến lược hiện tại có thể xem xét thêm các điều kiện xác nhận khi xảy ra giao thoa, chẳng hạn như chờ đợi giá quay trở lại mức hỗ trợ / kháng cự quan trọng hoặc chờ xác nhận 1-2 chu kỳ để giảm nguy cơ phá vỡ giả. Điều này có thể được thực hiện bằng cách trì hoãn tín hiệu vào hoặc thêm xác nhận mô hình giá.
Thêm bộ lọc môi trường thị trường: Có thể thêm logic đánh giá môi trường thị trường, ví dụ như đánh giá trạng thái thị trường hiện tại thông qua các chỉ số biến động (như VIX hoặc ATR) và sử dụng các thiết lập tham số khác nhau hoặc thậm chí tạm dừng giao dịch trong các môi trường thị trường khác nhau. Ví dụ, trong thị trường biến động cao, có thể cần có mức dừng rộng hơn và kích thước vị trí thận trọng hơn.
Hình ảnh thiếu khối lượng giao dịch: Để tăng khả năng áp dụng chiến lược trong thị trường không có dữ liệu khối lượng giao dịch hoặc dữ liệu khối lượng giao dịch không đáng tin cậy, một phiên bản tùy chọn không cần khối lượng giao dịch có thể được phát triển, ví dụ như sử dụng phạm vi biến động giá hoặc các chỉ số kỹ thuật khác để thay thế xác nhận khối lượng giao dịch.
Thêm bộ lọc thời gianXem xét thêm các điều kiện lọc thời gian, tránh giao dịch trong thời gian có biến động cao trước và sau khi thị trường mở cửa hoặc tránh thời gian công bố dữ liệu kinh tế quan trọng. Điều này có thể được thực hiện bằng cách kiểm tra thời gian giao dịch hiện tại và thiết lập cửa sổ thời gian cho phép giao dịch.
Chiến lược giao dịch dựa trên EMA chéo, CPR và lọc khối lượng giao dịch cung cấp một khung hệ thống giao dịch toàn diện, kết hợp theo dõi xu hướng, xác nhận mức giá và xác minh khối lượng giao dịch, cùng với chức năng quản lý rủi ro được xây dựng. Ưu điểm cốt lõi của chiến lược là cơ chế xác nhận nhiều lần và cài đặt dừng / dừng tự động, giúp tăng độ tin cậy và kỷ luật giao dịch.
Tuy nhiên, giống như tất cả các chiến lược giao dịch, nó cũng phải đối mặt với một số thách thức, chẳng hạn như rủi ro tín hiệu sai và giới hạn của các tham số cố định. Bằng các hướng tối ưu hóa được đề xuất ở trên, đặc biệt là cải thiện nhận diện xu hướng, điều chỉnh dừng / dừng động và lọc môi trường thị trường được tăng cường, sức mạnh và khả năng thích ứng của chiến lược có thể được nâng cao hơn nữa.
Đối với các nhà giao dịch, chiến lược này cung cấp một điểm khởi đầu tốt, có thể được điều chỉnh tùy chỉnh theo phong cách giao dịch cá nhân và sở thích của thị trường. Quan trọng nhất, bất kể chiến lược được sửa đổi như thế nào, nên luôn luôn duy trì nguyên tắc quản lý rủi ro tốt, tránh các tham số tối ưu hóa quá mức và thực hiện kiểm tra và xác minh giao dịch mô phỏng đầy đủ trước khi giao dịch thực.
/*backtest
start: 2024-05-20 00:00:00
end: 2025-05-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDC"}]
*/
//@version=6
strategy("Backtest: EMA + CPR + Volume + SL/Target", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=1)
// === INPUTS === //
emaFastLen = input.int(20, title="Fast EMA (20)")
emaSlowLen = input.int(50, title="Slow EMA (50)")
showCPR = input.bool(true, title="Show CPR?")
slPct = input.float(1.5, title="Stop Loss %") / 100
tpPct = input.float(3.0, title="Target %") / 100
useVolume = input.bool(true, title="Use Volume Filter?")
// === EMAs === //
emaFast = ta.ema(close, emaFastLen)
emaSlow = ta.ema(close, emaSlowLen)
bullishCross = ta.crossover(emaFast, emaSlow)
bearishCross = ta.crossunder(emaFast, emaSlow)
plot(emaFast, color=color.orange, title="EMA 20")
plot(emaSlow, color=color.blue, title="EMA 50")
// === CPR === //
prevHigh = request.security(syminfo.tickerid, "D", high[1])
prevLow = request.security(syminfo.tickerid, "D", low[1])
prevClose = request.security(syminfo.tickerid, "D", close[1])
pivot = (prevHigh + prevLow + prevClose) / 3
bc = (prevHigh + prevLow) / 2
tc = (pivot * 2) - bc
plot(showCPR ? pivot : na, color=color.gray, title="Pivot")
plot(showCPR ? bc : na, color=color.gray, title="CPR BC")
plot(showCPR ? tc : na, color=color.gray, title="CPR TC")
// === Volume Filter === //
volOK = not useVolume or (volume > ta.sma(volume, 20))
// === BUY / SELL CONDITIONS === //
longCondition = bullishCross and close > pivot and volOK
shortCondition = bearishCross and close < pivot and volOK
// === TRADE EXECUTION === //
if (longCondition)
strategy.entry("BUY", strategy.long)
strategy.exit("TP/SL", from_entry="BUY", stop=close * (1 - slPct), limit=close * (1 + tpPct))
if (shortCondition)
strategy.entry("SELL", strategy.short)
strategy.exit("TP/SL", from_entry="SELL", stop=close * (1 + slPct), limit=close * (1 - tpPct))
// === VISUAL SIGNALS === //
plotshape(longCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(shortCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")