Chiến lược giao dịch định lượng dựa trên đường cong Coppock

Tác giả:ChaoZhang, Ngày: 2023-11-13 11:44:55
Tags:

img

Tổng quan

Chiến lược này sử dụng chỉ số kỹ thuật đường cong Coppock ít được biết đến để thực hiện giao dịch định lượng. Đường cong Coppock được lấy bằng cách lấy trung bình động cân của tỷ lệ thay đổi (ROC) của chỉ số thị trường như S & P 500 hoặc tương đương giao dịch như SPY ETF. Các tín hiệu mua được tạo ra khi đường cong Coppock vượt qua trên không và bán tín hiệu khi nó vượt qua dưới. Một dấu hiệu dừng lỗ theo dõi tùy chọn có sẵn để khóa lợi nhuận. Chiến lược sử dụng đường cong $ SPY Coppock như một đại diện để tạo ra các tín hiệu giao dịch trên các ETF và cổ phiếu khác.

Nguyên tắc

Chiến lược sử dụng đường cong Coppock như là chỉ số kỹ thuật để tạo ra tín hiệu giao dịch.

Cờ Coppock = WMA 10 giai đoạn (ROC 14 giai đoạn + ROC 11 giai đoạn)

Trong đó tỷ lệ thay đổi ROC được tính như sau: (Close Current - Close N periods ago) /Close N periods ago

Chiến lược tính toán đường cong Coppock dựa trên giá đóng của $SPY. Các tín hiệu mua được tạo ra khi đường cong vượt qua trên 0 và bán tín hiệu khi nó vượt qua dưới.

Ưu điểm

  • Sử dụng chỉ số đường cong Coppock độc đáo mà có sức mạnh dự đoán tốt hơn so với các chỉ số thông thường như trung bình động
  • Các tham số có thể cấu hình để tối ưu hóa như thời gian WMA, thời gian ROC vv
  • Sử dụng $SPY làm nguồn tín hiệu có đại diện thị trường mạnh
  • Tùy chọn dừng lỗ theo dõi để khóa lợi nhuận và giảm rút tiền

Rủi ro

  • Cờ Coppock không phải là một chỉ số được sử dụng rộng rãi, hiệu quả của nó cần xác nhận
  • Có thể có sự chậm trễ tín hiệu, các thông số cần được tối ưu hóa
  • Đặt lỗ quá rộng có thể bỏ lỡ cơ hội rút lui
  • Dựa vào chỉ số duy nhất có thể tạo ra tín hiệu sai

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

  • Kiểm tra các kết hợp thông số tối ưu trên các thị trường và cổ phiếu khác nhau
  • Kết hợp với các chỉ số khác để lọc các tín hiệu sai, ví dụ: khối lượng
  • Tối ưu hóa năng động tỷ lệ phần trăm dừng lỗ
  • Xem xét các tín hiệu nhập cảnh khác như số lượng thanh hoặc đột phá giá

Kết luận

Chiến lược này sử dụng các đặc điểm hình dạng đường cong độc đáo của đường cong Coppock để tạo ra các tín hiệu giao dịch. So với các chỉ số thông thường, đường cong Coppock có sức dự đoán mạnh hơn. Nhưng như một chỉ số độc lập, độ tin cậy của nó cần xác thực.


/*backtest
start: 2023-10-13 00:00:00
end: 2023-11-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © RolandoSantos

//@version=4
strategy(title = "Coppock Curve", shorttitle = "Copp Curve Strat", default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000)

///trail stop
longTrailPerc = input(title="Trail Long Loss (%)", minval=0.0, step=0.1, defval=100) * 0.01

// Determine trail stop loss prices
longStopPrice = 0.0

longStopPrice := if (strategy.position_size > 0)
    stopValue = close * (1 - longTrailPerc)
    max(stopValue, longStopPrice[1])
else
    0
//Use SPY for Copp Curve entries and exits//
security = input("SPY")
ticker = security(security, "D", close)

///Copp Curve////
wmaLength = input(title="WMA Length", type=input.integer, defval=10)
longRoCLength = input(title="Long RoC Length", type=input.integer, defval=14)
shortRoCLength = input(title="Short RoC Length", type=input.integer, defval=11)
source = ticker
curve = wma(roc(source, longRoCLength) + roc(source, shortRoCLength), wmaLength)

///Lower Band Plot///
band1 = hline(0)
band0 = hline(100)
band2 = hline(-100)
fill(band1, band0, color=color.green, transp=90)
fill(band2, band1, color=color.red, transp=90)
plot(curve, color=color.white)

///Trade Conditions///
Bull = curve > 0
Bear = curve < 0

///Entries and Exits//
if (Bull)
    strategy.entry("Long", strategy.long, comment = "LE")
    

if (Bear)
    strategy.close("Long", qty_percent=100, comment="close")
    
// Submit exit orders for trail stop loss price
if (strategy.position_size > 0)
    strategy.exit(id="Long Trail Stop", stop=longStopPrice)
    


Thêm nữa