Hướng dẫn cta strategy python - trăn chiến lược cta

---------------------------------------------------------- ---------------------------------------------------------- -----

Tuyên bố miễn trừ trách nhiệm

Tôi từ chối chấp nhận bất kỳ trách nhiệm nào đối với những tổn thất mà bạn phải chịu khi áp dụng chiến lược này. Điểm của bài tập này là chứng minh tầm thường của việc thực hiện xu hướng tương lai theo chiến lược. Chiến lược trong bài viết này đã được tối ưu hóa cho số lượng dòng. Tôi không khuyên bạn nên giao dịch chiến lược này! Bạn được mời hầu hết để nghiên cứu chiến lược và tôi hy vọng nó sẽ cung cấp một điểm khởi đầu hữu ích cho nghiên cứu của bạn.research.

---------------------------------------------------------- ---------------------------------------------------------- -----

Cập nhật

23/03: Tôi đã chuyển giá nhật ký bây giờ vì chúng là tổng số tiền lãi tích lũy. Điều này đơn giản hóa phân tích nhưng cũng sửa chữa cho một vấn đề trong thuật ngữ tỷ lệ. Tôi đã sửa lỗi P & L theo bước này. Để biết chi tiết, hãy kiểm tra kho lưu trữ github của tôi.

---------------------------------------------------------- ---------------------------------------------------------- -----

Vào năm 2014, tôi đã rời khỏi thế giới của CTA, tương lai và theo xu hướng. Giao dịch dao động trên tương lai trở nên nhàm chán vào cuối ngày. Gần đây mặc dù tôi đã ăn trưa với một CEO trẻ thú vị nói với tôi một cách tự hào rằng công ty của anh ấy đã quản lý để tạo ra một chiến lược tương lai được quản lý chỉ với 26 dòng mã. Nhận xét này đã làm tôi quan tâm.

Cảnh báo: Nếu bạn đang tiếp thị hoặc bán hàng và bạn đã quen với ý tưởng rằng mọi người khoe khoang về cơ sở mã lớn của họ, hãy để tôi nói với bạn rằng ít mã thường tốt hơn.: If you are in marketing or sales and you are used to the idea that people brag about their large code base let me tell you that less code is usually better.

Bạn có thể biết rằng việc đếm các dòng mã là một số liệu đáng ngờ nhưng tôi cảm thấy bị thách thức và tôi nghĩ rằng tôi có thể làm tốt hơn rất nhiều (ví dụ: ít hơn) so với 26 dòng mã. Có một tờ giấy nhỏ tuyệt đẹp của Nick Trefethen, trong đó anh ta đang thảo luận về giá trị của mã được giữ ngắn, gọn gàng và chạy nhanh, xem https://people.maths.ox.ac.uk/trefethen/publication/pdf/2005_114. PDF

Tôi đã cho mình một vài hạn chế:

* Ngôn ngữ được lựa chọn là Python.

* Không sử dụng bất kỳ thư viện bên thứ 3 nào khác ngoài gấu trúc.pandas.

* Tất cả dữ liệu nằm trong tệp CSV để cho phép tất cả các bạn lặp lại các thử nghiệm của tôi.

* Tất cả mã và dữ liệu sẽ có sẵn trên GitHub.

* Mã có thể đọc được

Rõ ràng, tôi không muốn làm phiền mọi người bằng cách cho đi bất kỳ loại nước sốt bí mật nào ở đây. Do đó, tôi quyết định ở gần một bài báo tuyệt vời được xuất bản bởi Man AHL với các chiến lược thực sự cực kỳ gần với những gì được sử dụng trong CTA hiện đại. Bài viết có sẵn tại SSRN: https://ssrn.com/abstract=2695101. Kudos lớn cho các tác giả! Thật tuyệt vời khi các quỹ phòng hộ trở nên minh bạch hơn rất nhiều về các chiến lược của họ được sử dụng trong thực tế.

Eh voila, đây là xu hướng nhỏ và rất đơn giản của tôi theo chiến lược cho tương lai:

import pandas as pd
import numpy as np



if __name__ == '__main__':
    
    fut = pd.read_csv("data/prices.csv", index_col=0, parse_dates=True).ffill().truncate(before=pd.Timestamp("1990-01-01"))
    
    volatility = np.log(fut).diff().ewm(com=32).std()
    
    prices = (np.log(fut).diff() / volatility).clip(-4.2, 4.2).cumsum()

    
    def osc(prices, fast=32, slow=96):
        f,g = 1 - 1/fast, 1-1/slow
        return (prices.ewm(span=2*fast-1).mean() - prices.ewm(span=2*slow-1).mean())/np.sqrt(1.0 / (1 - f * f) - 2.0 / (1 - f * g) + 1.0 / (1 - g * g))

    
    CurrencyPosition = (50000*np.tanh(osc(prices, fast=16, slow=48)) / volatility).clip(-5e7, 5e7)

    
    Profit = (fut.pct_change() * CurrencyPosition.shift(periods=1)).sum(axis=1)

    
    (1 + Profit / 7e7).cumprod().plot(logy=True, grid=True)

Tôi đang đếm 8 dòng mã và chúng tôi có thể đã hợp nhất 3 dòng cuối cùng thành một con quái vật dài. Biểu đồ điều hướng trên đầu bài viết này đã được sản xuất với chính xác mã này. Tôi đang giao dịch 49 tương lai khác nhau. Một danh sách chúng sẽ được cung cấp trong repo GitHub.

Mã áp dụng một thủ thuật phổ biến. Tôi tính toán các lợi nhuận được điều chỉnh biến động và thu hút chúng. Điều này mở ra cánh cửa cho các mô hình DCC (Engle) nhưng chúng ta sẽ bỏ qua các mối tương quan ở đây (như hầu hết các CTA làm). Chúng tôi sử dụng những lợi nhuận homoskedastic đó để tính toán một chuỗi giá nhân tạo làm cơ sở cho tín hiệu dao động của chúng tôi.

Bộ tạo dao động là sự khác biệt quy mô của hai mức trung bình chuyển động tác động theo giá đó. Tỷ lệ được chọn sao cho L2-Norm của các hệ số cơ bản là 1. Sau đó, chúng tôi áp dụng hàm phản ứng TOSH. & NBSP; Ở đây chúng tôi đi chệch khỏi giấy AHL.

Để giữ ngắn gọn mã của tôi, tôi sử dụng các vị trí tiền mặt và trả lại để tránh việc sử dụng các giá trị lô và các giá trị điểm đầy đủ. Do đó tôi phải điều chỉnh theo tỷ lệ thay vì chênh lệch. Thật tầm thường khi tải xuống giá từ Bloomberg đã được điều chỉnh lại theo tỷ lệ. Tôi đã thực hiện tất cả các hợp đồng 3 ngày trước khi thông báo. Các bước kịch tính như vậy chắc chắn là khả thi trong một bài kiểm tra nhưng cần nhiều sự chăm sóc hơn trong giao dịch trực tiếp. Tôi đã từng lớn lên với việc điều chỉnh tương lai bằng sự khác biệt nhưng trên thực tế, việc điều chỉnh theo tỷ lệ cũng tránh được tất cả những cơn đau đầu gây ra bởi sự không phù hợp về quy mô giữa giá trị điểm đầy đủ và giá thực tế. Đây là một vấn đề khó chịu khi dựa vào các nguồn dữ liệu khác nhau cho cả hai. Điều chỉnh theo tỷ lệ đá!

Tôi không nhận được chi phí giao dịch, hiệu ứng lăn, hiệu ứng FX và trượt (hoặc sai lầm). Tôi giao dịch các hợp đồng phân số ở gần. Tất cả các bước đó là đơn giản hóa thô nhưng khá phổ biến và gần đúng trong toàn bộ ngành.

Tôi làm rất nhiều sự chiến thắng nhưng ở nhà tại Thụy Sĩ, tôi nên nói rằng tôi áp dụng một chức năng Huber. Huber là vị thần thống kê Thụy Sĩ.

Tất cả các hằng số tôi đang sử dụng đã rơi ra khỏi giấy AHL hoặc đã được kéo ra khỏi không khí mỏng. Không ai trong số họ đã được tối ưu hóa.

Cuối cùng, lưu ý sự vắng mặt của bất kỳ trí tuệ nhân tạo nào từ mã của tôi. Tuy nhiên, hãy gọi nó là học máy ...

Đi đâu tiếp theo?

Quay trở lại những ngày đầu của sự nghiệp, tôi đã sử dụng thành công các chương trình như vậy với lập trình lồi (bậc hai). Sau đó, có thể làm chậm hoạt động giao dịch, xử phạt các động tác lớn, nhắm đến rủi ro liên tục (ví dụ: giảm độ biến động của biến động = kurtosis), tăng lợi nhuận và tỷ lệ sắc nét, v.v.

Chúng tôi cũng sẽ đề cập rằng chúng tôi có thể xây dựng các chỉ số vượt trội hơn nhiều bằng cách kết hợp nhiều bộ dao động và các chỉ số tiêu chuẩn khác bằng cách sử dụng hồi quy thưa thớt (giữa các nhóm tài sản).

Bản tóm tắt

Mục tiêu của tôi là trình bày một chiến lược theo xu hướng tương lai điển hình bằng cách sử dụng ít hơn 10 dòng mã. Tin tốt là trong giao dịch trực tiếp, chúng tôi không có những hạn chế như vậy. Tuy nhiên, chúng tôi có thể đi và xây dựng các ý tưởng được trình bày ở đây ...

Tuy nhiên, đừng cho rằng chiến lược này quá đơn giản và cách xa các thuật toán hiện tại được sử dụng trong ngành công nghiệp. Tôi sẽ yêu cầu phân tích thêm để cho biết chúng tôi đã đến gần như thế nào nhưng chúng tôi sẽ để nó thực sự cho người đọc quan tâm ;-)

Có phải tất cả là một sự quá lớn? Khó nói. Về cơ bản, chúng tôi áp dụng một chiến lược đã làm việc trong nhiều thập kỷ. Nó vượt xa phạm vi của bài viết này để lập luận liệu việc theo xu hướng sẽ tiếp tục kiếm tiền. Chắc chắn có một xu hướng đối với phí thấp hơn và biến động mục tiêu cho CTA.