Hướng dẫn quantitative trading strategies python - chiến lược giao dịch định lượng python
Tìm kiếm nhiều hơn vào các chiến lược giao dịch định lượng và xác định lợi nhuận Bạn nên biết:
Tìm hiểu cả ba tương tác thông qua DataQuest.io Trong Python for Finance, Phần I, chúng tôi tập trung vào việc sử dụng Python và Pandas để
Một lời nhắc nhở, DataFrame chứa ba lần giá được làm sạch trên mạng có định dạng sau:
Chúng tôi cũng đã tính toán trung bình chuyển động của ba lần này như sau. Lưu ý rằng khi tính toán trung bình di chuyển $ m $ ngày, $ M-1 $ đầu tiên không hợp lệ, vì giá $ m $ là bắt buộc cho điểm dữ liệu trung bình di chuyển đầu tiên.
Chúng tôi cũng đã tính toán trung bình chuyển động của ba lần này như sau. Lưu ý rằng khi tính toán trung bình di chuyển $ m $ ngày, $ M-1 $ đầu tiên không hợp lệ, vì giá $ m $ là bắt buộc cho điểm dữ liệu trung bình di chuyển đầu tiên. Nan Dựa trên những kết quả này, mục tiêu cuối cùng của chúng tôi sẽ là thiết kế một chiến lược giao dịch đơn giản nhưng thực tế. Tuy nhiên, trước tiên chúng ta cần trải qua một số khái niệm cơ bản liên quan đến các chiến lược giao dịch định lượng, cũng như các công cụ và kỹ thuật trong quá trình này. Có một số cách người ta có thể diễn ra khi một chiến lược giao dịch được phát triển. Một cách tiếp cận sẽ là sử dụng chuỗi thời gian giá trực tiếp và làm việc với các số tương ứng với một số giá trị tiền tệ. Ví dụ, một nhà nghiên cứu có thể làm việc với chuỗi thời gian thể hiện giá của một cổ phiếu nhất định, như chuỗi thời gian chúng tôi đã sử dụng trong bài viết trước. Tương tự, nếu làm việc với các công cụ thu nhập cố định, ví dụ: Trái phiếu, người ta có thể sử dụng chuỗi thời gian thể hiện giá của trái phiếu theo tỷ lệ phần trăm của một giá trị tham chiếu đã cho, trong trường hợp này là giá trị mệnh của trái phiếu. Làm việc với loại chuỗi thời gian này có thể trực quan hơn vì mọi người đã quen với việc suy nghĩ về giá cả. Tuy nhiên, chuỗi thời gian giá có một số nhược điểm. Giá thường chỉ tích cực, khiến việc sử dụng các mô hình và phương pháp tiếp cận khó khăn hơn yêu cầu hoặc tạo ra số âm. Ngoài ra, chuỗi thời gian giá thường không cố định, đó là tính chất thống kê của chúng ít ổn định hơn theo thời gian. Một cách tiếp cận khác là sử dụng chuỗi thời gian tương ứng với các giá trị thực tế mà thay đổi giá trị tiền tệ của tài sản. Các chuỗi thời gian này có thể và thực hiện các giá trị âm và cả, các thuộc tính thống kê của chúng thường ổn định hơn so với các chuỗi thời gian giá. Các hình thức được sử dụng thường xuyên nhất được sử dụng là lợi nhuận tương đối được xác định là \ starting {phương trình} r _ {\ text {relative}} \ left (t \ right) = \ frac {p \ left (t \ right) - p \ left (t -1 \ right)} {p \ -1 \ right)} \ end {phương trình} và trả lại log được định nghĩa là $$ \ start {phương trình} r \ left (t \ right) = \ log \ left (\ frac {p \ left (t \ right) {phương trình} $$ trong đó $ p \ trái (t \ right) $ là giá của tài sản tại thời điểm $ t $. Ví dụ: nếu $ p \ left (t \ right) = 101 $ và $ p \ left (t-1 \ right) = 100 đô frac {101 - 100} {100} = 1 \%$. Có một số lý do tại sao việc trả lại log đang được sử dụng trong ngành và một số trong số chúng có liên quan đến các giả định lâu dài về hành vi của lợi nhuận tài sản và nằm ngoài phạm vi của chúng tôi. Tuy nhiên, những gì chúng ta cần chỉ ra là hai thuộc tính khá thú vị. Lấy lại log là phụ gia và điều này tạo điều kiện cho việc điều trị chuỗi thời gian của chúng tôi, lợi nhuận tương đối thì không. Chúng ta có thể thấy tính phụ thuộc của các lần trả lại log trong phương trình sau. \ started {phương trình} \ log \ left (\ frac {p \ left (t \ right)} {p \ left (t-1 \ right)} \ right) \ simeq \ log \ left (1 \ right) + \ frac {p \ left (t \ right)} {p \ left (t -1 \ reasuct Cả hai đều được tính toán tầm thường bằng cách sử dụng gấu trúc:
Vì returns log là phụ gia, chúng ta có thể tạo chuỗi thời gian của các bản sửa đổi đăng nhập tích lũy được xác định là \ started {phương trình} c \ left (t \ right) = \ sum_ {k = 1}^t r \ left (t \ right) \ end {phương trình} Các lần trả lại đăng nhập tích lũy và tổng lợi nhuận tương đối từ 2000/01/01 cho ba chuỗi thời gian có thể được nhìn thấy dưới đây. Lưu ý rằng mặc dù các khoản hoàn trả log rất dễ thao túng, các nhà đầu tư đã quen với việc sử dụng lợi nhuận tương đối. Ví dụ, khoản hoàn trả $ 1 $ 1 không có nghĩa là một nhà đầu tư đã tăng gấp đôi giá trị của danh mục đầu tư của mình. Lợi nhuận tương đối là $ 1 = 100 \%$ không! Chuyển đổi giữa return đăng nhập tích lũy $ c \ left (t \ reasuct - p \ left (t_o \ right)} {p \ left (t_o \ right)} $ rất đơn giản $$ C _ {\ text {Relative}} \ left (t \ right) = e^{c \ left (t \ right)} - 1 $$ Đối với những người đang tự hỏi nếu điều này là chính xác, đúng vậy. Nếu ai đó đã mua cổ phiếu AAPL trị giá $ 1000 $ 1000 $ 1000 vào tháng 1 năm 2000, thì danh mục đầu tư của anh ấy/của anh ấy sẽ trị giá hơn $ \ $ 30.000 $. Giá như chúng tôi có một cỗ máy thời gian ...
RESULT: Mục tiêu của chúng tôi là phát triển một chiến lược giao dịch đồ chơi, nhưng thuật ngữ "chiến lược giao dịch định lượng" thực sự có nghĩa là gì? Trong phần này, chúng tôi sẽ đưa ra một định nghĩa sẽ hướng dẫn chúng tôi trong mục tiêu dài hạn của chúng tôi. Giả sử chúng tôi có một số tiền nhất định, $ N $, mà chúng tôi quan tâm để đầu tư. Chúng tôi có một bộ tài sản $ K $ mà chúng tôi có thể mua và bán tự do bất kỳ số tiền tùy ý nào. Mục tiêu của chúng tôi là lấy trọng lượng $ w_i \ trái (t \ right), i = 1, \ ldots, k $ sao cho điều đó $$ w_i \ left (t \ right) \ in \ mathbb {r} \ \ text {và} \ \ sum_ {i = 1}^K do đó, một lượng đô la bằng $ w_i \ trái (t \ right) n $ được đầu tư tại thời điểm $ t $ trên tài sản $ i $. Điều kiện bất bình đẳng biểu thị $ \ sum_ {i = 1}^k w_i \ trái (t \ right) \ leq 1 $ mà số tiền tối đa chúng ta có thể đầu tư bằng với số tiền chúng ta có, đó là $ n $. Thí dụVí dụ: giả sử chúng ta chỉ có thể đầu tư vào các công cụ $ 2 $ và $ n = \ $ 1000 $. Mục tiêu là lấy được hai trọng số $ w_1 \ trái (t \ right) $ và $ w_2 \ left (t \ right) $. Nếu tại một số điểm $ w_1 \ left (t \ right) = 0,4 $ và $ w_2 \ left (t \ right) = 0.6 $, điều này có nghĩa là chúng tôi đã đầu tư $ w_1 \ left (t \ right) n = \ $ 400 $ Trong tài sản $ 1 $ và $ w_2 \ left (t \ right) n = \ $ 600 $ trong tài sản $ 2 $. Vì chúng tôi chỉ có $ \ $ 1000 $, chúng tôi chỉ có thể đầu tư vào đó có nghĩa là điều đó có nghĩa là $$ w_1 \ left (t \ right) n + w_2 \ left (t \ right) n \ leq n \ rightarrow w_1 \ left (t \ right) + w_2 \ left (t \ right) <1 $$. Lưu ý rằng vì chúng tôi đã cho phép $ w_i \ trái (t \ right) $ là bất kỳ số thực nào, chúng tôi ngụ ý rằng chúng tôi được phép có trọng số âm. Trọng lượng tiêu cực ngụ ý rằng chúng tôi đã bán một tài sản nhất định. Bán ngắn một tài sản có nghĩa là bán một tài sản mà chúng tôi hiện không nắm giữ và nhận được giá trị bằng tiền mặt. Bán ngắn khác với việc bán một tài sản mà chúng tôi đã sở hữu, được gọi là bán dài. Các cơ chế đằng sau điều này có thể phức tạp và thường phải chịu sự giám sát theo quy định. Tuy nhiên, ở cấp độ cao, nó liên quan đến việc vay tài sản từ bên thứ ba và sau đó bán nó cho người mua. Vì tại một số thời điểm, tài sản cần phải được trả lại cho bên mà nó được vay, nên vị trí ngắn cần phải được đóng lại. Điều này đạt được bằng cách mua lại tài sản từ người mua ban đầu hoặc bất kỳ người bán sẵn sàng nào khác. Với mục đích của bài viết này, người ta sẽ giả định rằng việc bán một tài sản ngắn có thể được thực hiện mà không có chi phí bổ sung, một giả định không đúng. Ghi chúThêm về bán dài so với bán ngắn ở đây. Giả sử rằng các trọng số có thể không bị ràng buộc là không thực tế. Ví dụ: dựa trên định nghĩa được đưa ra ở trên, chúng tôi có thể bán một lượng cổ phiếu AAPL có giá trị ngắn bằng $ N $. Điều này có nghĩa là, hiện tại, chúng tôi có thêm một đô la $ n $ để đầu tư từ việc bán ngắn. Do đó, cùng với đô la $ N $ ban đầu của chúng tôi, chúng tôi có thể mua cổ phiếu của MSFT trị giá $ 2N $ đô la. Trong khung của chúng tôi, điều này chuyển thành $ w _ {\ text {aapl}} =-1 $ và $ w _ {\ text {msft}} = 2 $. Về lý thuyết, các trọng số có thể lần lượt là -999 $ và $ 1000 $. Tuy nhiên, sự gia tăng các giá trị tuyệt đối của các trọng số dẫn đến sự gia tăng nguy cơ của danh mục đầu tư của chúng tôi vì lý do chúng tôi sẽ thấy thêm loạt hướng dẫn này. Do đó, khi phát triển chiến lược giao dịch của chúng tôi, các ngưỡng thích hợp sẽ được áp đặt trên các trọng số $ w_i \ trái (t \ right) $. Một lưu ý cuối cùng phải làm với tiền mặt. Bất kỳ danh mục đầu tư tại một số thời điểm sẽ bao gồm tiền mặt. Trong thiết lập đã nói ở trên nếu tại bất kỳ thời điểm nào $ w = \ sum_ {i = 1} ) N $ đô la tiền mặt. Tất nhiên, nếu $ w
AAPL MSFT Nếu bộ nhớ máy tính không phải là vấn đề, một cách rất nhanh để tính toán danh mục đầu tư cho tất cả các ngày, $ t = 1, \ ldots, t $ là như sau: Giả sử rằng $ \ mathbf {r} \ in \ mathbb {r}^{t \ Times K} $ là một ma trận, hàng $ t $ th trong đó là vectơ hàng $ \ vec {r} \ trái (t \ Phải)^t $. Tương tự, $ \ mathbf {w} \ in \ mathbb {r}^{t \ Times K} $ là một ma trận, hàng $ t $ th trong đó là vectơ hàng $ \ vec {w} \ trái (t \ Phải)^t $. Sau đó, nếu $ \ vec {r} _p = \ left [r_p \ left (1 \ right), \ ldots, r_p \ left (t \ right) \ right]^t \ in \ mathbf {r}^ 1} $ là một vectơ cột của tất cả các danh mục đầu tư, chúng tôi có 20 trong đó $ \ text {diag} \ left \ {a \ reasuction \} $ là đường chéo của ma trận $ \ mathbf {a} $. Việc chiết đường chéo là bắt buộc vì chỉ trong đường chéo, các vectơ trọng lượng và các vectơ quay lại được liên kết đúng theo thời gian. Để minh họa các khái niệm của phần trước, chúng ta hãy xem xét một chiến lược giao dịch rất đơn giản, trong đó nhà đầu tư chia các khoản đầu tư của mình như nhau giữa cả ba tài sản mà chúng tôi đã xem xét. Đó là:
Nếu bộ nhớ máy tính không phải là vấn đề, một cách rất nhanh để tính toán danh mục đầu tư cho tất cả các ngày, $ t = 1, \ ldots, t $ là như sau:
Giả sử rằng $ \ mathbf {r} \ in \ mathbb {r}^{t \ Times K} $ là một ma trận, hàng $ t $ th trong đó là vectơ hàng $ \ vec {r} \ trái (t \ Phải)^t $. Tương tự, $ \ mathbf {w} \ in \ mathbb {r}^{t \ Times K} $ là một ma trận, hàng $ t $ th trong đó là vectơ hàng $ \ vec {w} \ trái (t \ Phải)^t $. Sau đó, nếu $ \ vec {r} _p = \ left [r_p \ left (1 \ right), \ ldots, r_p \ left (t \ right) \ right]^t \ in \ mathbf {r}^ 1} $ là một vectơ cột của tất cả các danh mục đầu tư, chúng tôi có 0
120 trong đó $ \ text {diag} \ left \ {a \ reasuction \} $ là đường chéo của ma trận $ \ mathbf {a} $. Việc chiết đường chéo là bắt buộc vì chỉ trong đường chéo, các vectơ trọng lượng và các vectơ quay lại được liên kết đúng theo thời gian. RESULT: Để minh họa các khái niệm của phần trước, chúng ta hãy xem xét một chiến lược giao dịch rất đơn giản, trong đó nhà đầu tư chia các khoản đầu tư của mình như nhau giữa cả ba tài sản mà chúng tôi đã xem xét. Đó là: $$ w _ {\ text {aapl}} = w _ {\ text {msft}} = w _ {\ text {^gspc}} = \ frac {1} {3} $$ Trong trường hợp này, ma trận $ \ mathbf {w} $ sẽ là: 3Nan Do đó, lợi nhuận danh mục đầu tư được tính là: 2000-01-03 00:00:00 Xem Phần 3 của loạt bài này: Di chuyển chiến lược giao dịch trung bình. Học thêm
|