Trong bài viết này, bạn sẽ được nâng cao hiểu biết về Chiến Lược Mean Reversion Sử Dụng Python. Bạn sẽ khám phá việc triển khai chiến lược này thông qua phương pháp 1 trong 3 phương pháp khác nhau:
- Basic implementation
- Z-score implementation
- Statistical arbitrage implementation
Lưu ý: Thông tin được cung cấp trong bài viết này chỉ nhằm mục đích giáo dục và không nên được xem là lời khuyên đầu tư chuyên nghiệp. Quan trọng là bạn cần tự mình nghiên cứu và thận trọng khi đưa ra các quyết định đầu tư. Đầu tư có rủi ro và mọi quyết định đầu tư bạn đưa ra hoàn toàn là trách nhiệm của bạn.
Thuật toán Mean Reversion là gì?
Thuật toán Mean Reversion cho rằng giá cả có xu hướng quay trở lại giá trị trung bình dài hạn của chúng. Khi giá cổ phiếu lệch khỏi giá trị trung bình lịch sử, điều đó có nghĩa là tài sản đang bị mua quá mức hoặc bán quá mức
Lúc này, các tín hiệu giao dịch có thể được kích hoạt để bán khống hoặc mua tài sản với kỳ vọng rằng giá sẽ quay trở lại mức trung bình.
Trong phần tiếp theo, bạn sẽ tìm thấy các phương pháp triển khai khác nhau của Chiến Lược Giao Dịch Đảo Chiều Trung Bình Sử Dụng Python. Nhưng trước tiên, hãy tải bộ dữ liệu lên.
Chúng ta sẽ sử dụng lịch sử giá của Netflix:
def download_stock_data(ticker,timestamp_start,timestamp_end):
url=f"https://query1.finance.yahoo.com/v7/finance/download/{ticker}?period1={timestamp_start}&period2={timestamp_end}&interval
=1d&events=history&includeAdjustedClose=true"
df = pd.read_csv(url)
return df
datetime_start=dt.datetime(2022, 1, 1, 7, 35, 51)
datetime_end=dt.datetime.today()
# Convert to timestamp:
timestamp_start=int(datetime_start.timestamp())
timestamp_end=int(datetime_end.timestamp())
ticker='NFLX'
df = download_stock_data(ticker,timestamp_start,timestamp_end)
df = df.set_index('Date')
df.head()
Implementation N°1: Basic
Dưới đây là các bước thực hiện:
- Chúng ta tính giá trung bình động 20 ngày của cổ phiếu Netflix.
- Chúng ta tính chênh lệch giữa giá hiện tại và giá trung bình động này.
- Nếu chênh lệch dương, một lệnh bán sẽ được kích hoạt. Khi chênh lệch âm, một lệnh mua sẽ được kích hoạt.
Cụ thể:
- Nếu chênh lệch dương, có nghĩa là giá hiện tại cao hơn giá trung bình động 20 ngày. Điều này cho thấy tài sản đang bị mua quá mức và giá sẽ có xu hướng quay trở lại (giảm) giá trị trung bình này. Do đó, một lệnh bán sẽ được kích hoạt.
- Ngược lại, nếu chênh lệch âm, nghĩa là tài sản đang bị bán quá mức, giá sẽ có xu hướng tăng lên và đạt giá trị trung bình, vì vậy một lệnh mua sẽ được kích hoạt.
window = 20
df["ma_20"] = df["Adj Close"].rolling(window=window).mean()
df["diff"] = df["Adj Close"] - df["ma_20"]
df['signal'] = np.where(df["diff"] > 0, -1, 1)
figs=(8,4)
df[['Adj Close',"ma_20"]].plot(figsize=figs)
plt.title("Mean Reversion")
plt.show()
df['diff'].plot(figsize=figs)
#I multiplied the signal by 20 be able to show it clearly in the graph
(20*df['signal']).plot(figsize=figs, linestyle='--')
plt.title("Diff vs Signal")
plt.legend()
plt.show()
(df["Adj Close"]/df["ma_20"] ).plot(figsize=figs)
plt.title("Ratio=Close/ma_20")
plt.show()
Tôi đã vẽ biểu đồ giá so với giá trung bình động 20 ngày:
Tôi đã vẽ biểu đồ sự chênh lệch (giá – giá trung bình động 20 ngày) và cả tín hiệu mua bán. Biểu đồ này cho thấy khi nào lệnh mua và bán được kích hoạt:
Trong biểu đồ này, tôi đã vẽ tỷ lệ giữa giá và giá trung bình động. Mục tiêu là để xem tỷ lệ này dao động như thế nào. Nếu tỷ lệ này xung quanh mức 1, điều đó có nghĩa là giá đang quay trở lại giá trung bình động. Chúng ta có thể thấy rõ rằng có một sự nhảy vọt lớn vào tháng 4 năm 2022.
Limitation
Như bạn có thể thấy trong giai đoạn tháng 4 năm 2022, giá cổ phiếu đã giảm đáng kể và tiếp tục giảm trong nhiều tháng sau đó. Nếu chúng ta theo dõi triển khai cơ bản, một lệnh mua sẽ được kích hoạt. Việc mua vào thời điểm này sẽ dẫn đến những tổn thất lớn trong những ngày và tháng tiếp theo.
Đó là lý do tại sao cần phải kết hợp triển khai này với các chỉ báo khác, hoặc chọn một phương pháp tính toán khác.
Tham khảo:
https://machinelearning-basics.com/mean-reversion-trading-strategy-using-python/