images
09/03/2021 10:53 am

Gấu mèo tới Phố Wall - Phần 1: The beginning: Portfolio Return

Trong tay lúc này chẳng có gì ngoài mấy skill python. Nghĩ đến đấy nó chợt nảy ra một ý, sao mình không thử dùng python vào đầu tư nhỉ…

“Ai rồi cũng sẽ khác!”


Hà Nội giờ vắng hoe, mọi người về quê gần hết để lại những giây phút yên bình hiếm hoi.

Lúc này trong quán cafe chỉ còn nó với một đôi bạn trẻ bàn bên cạnh.

Đang đọc sách, thế nhưng Gấu Mèo vẫn hóng hớt được cái vẻ đượm buồn của cậu trai khi nói câu nói kia. 


Tự nhiên nó nghĩ về cái thân nó, tới Hà Nội bao năm rồi, có khác gì không?

Vẫn thích ngồi đọc sách trong góc mấy quán cafe.

Vẫn khoái mấy phim truyền hình US UK mặc dù chả có thời gian mà xem

Vẫn nghiền đá bóng 

Vẫn ngồi code thâu đêm

Mà đau nữa là vẫn thiếu tiền!


Trong tay lúc này chẳng có gì ngoài mấy skill python. Nghĩ đến đấy nó chợt nảy ra một ý, sao mình không thử dùng python vào đầu tư nhỉ…

Nó bèn bảo Obbi lấy cho nó thông tin của vài mã để nó tính thử xem. Mấy phút sau thì Obbi gửi cho nó file portfolios.csv 


Trước hết là load thông tin lên để xem qua:


import pandas as pd

prices = pd.read_csv('data/portfolio.csv', parse_dates=True, index_col='date')

prices.head()



*  Chỗ này khi đọc file csv Gấu Mèo có thêm option parse_dates=True, index_col='date' để chọn trường “date” làm index tiện cho việc tính toán dạng time series.


Gấu Mèo bỗng dưng tò mò, nó muốn xem kỹ hơn cái khoảng 2018-2019, lúc nó được Gấu Chó phím cho mua cổ phiếu của Amazon. 


Thế nên nó lọc thông tin ra, chỉ lấy ngày 01/01/2018 tới 31/12/2019


asset_prices = prices.loc['2018-01-01':'2019-12-31']

asset_prices


Sau đấy vẽ chart ra:


import matplotlib.pyplot as plt

asset_prices.plot().set_ylabel("Closing Prices, USD")

plt.show()


Kết quả là:



Và giờ xem thử nếu đầu tư các mã này thì return (lãi lỗ) như thế nào nhé!


asset_prices.pct_change()



Hàm pct_change sẽ trả về phần trăm thay đổi so với row ở ngay trước nó. Bởi vậy mà dòng đầu tiên trong kết quả là NaN. Các dòng tiếp theo sẽ cho biết sự thay đổi giá trong từng ngày đối với từng mã. Còn nếu như bạn muốn so sánh xa hơn, trước nhiều ngày chứ không phải 1 ngày như nên thì chỉ cần điều chỉnh periods là được. Chi tiết hơn bạn có thể xem tại https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.pct_change.html 


Và giả sử như lúc đấy nó đầu tư với tỷ lệ 10% AAPL, 60% AMZN, 10% FB, 10% GOOG, 10 % NFLX thì kết quả thế nào 


weights = (0.1, 0.6, 0.1, 0.1, 0.1)

asset_returns = asset_prices.pct_change()

portfolio_returns = asset_returns.dot(weights)

portfolio_returns.head()



Vẽ chart ra thì được thế này:


portfolio_returns.plot().set_ylabel("Daily Return, %")

plt.show()



Gấu Mèo ngồi thử tiếp các cách phân bổ tài sản khác nhau bằng cách thay đổi giá trị của weights. 


Cái chart thay đổi làm nó cứ nghĩ là mình sắp tìm ra điều gì đó rồi.

Thế nhưng nó chẳng tìm được gì. 

Mà cái cách thử này thì đúng là chả có tí phương pháp nào cả.


Gấu Mèo lại nhắn Obbi, tìm cách để ra được weights thật ngon. 

Obbi bảo nó chả có cái weights nào mà ngon hoàn toàn đâu, có chăng chỉ có phương pháp tìm weights để giảm thiểu rủi ro. Mà trước hết là phải tính được Asset covariance & portfolio volatility đã. 


Ơ muốn làm mình khác đi mà chả dễ tí nào cả. Nhưng thôi, lần này sẽ cố. 

Này thì Asset covariance, này thì portfolio volatility, phen này ông quyết lên thư viện, rồi tới công ty chứng khoán học cho bằng hết, rồi mà xem...


Mời các bạn đón đọc Phần 2 nhé!


Các bạn có thể tải dữ liệu ở: https://bit.ly/3quO2yG 


Để load và xử lý dữ liệu dạng bảng các bạn có thể tham khảo thêm:


Làm quen việc Xử lý dữ liệu với Pandas - Phần 1 


Làm quen việc Xử lý dữ liệu với Pandas - Phần 2


- Tech Zone -

Thư giãn chút nào!!!

Bài viết liên quan