0
tập trung vào
78
Người theo dõi

Đạt được sự sắp xếp có trật tự các chiến lược cổ phiếu cân bằng dài hạn và ngắn hạn

Được tạo ra trong: 2019-08-24 10:05:53, cập nhật trên: 2024-12-19 00:25:02
comments   0
hits   2265

Đạt được sự sắp xếp có trật tự các chiến lược cổ phiếu cân bằng dài hạn và ngắn hạn

Trong bài viết trước (https://www.fmz.com/digest-topic/4187), chúng tôi đã giới thiệu các chiến lược giao dịch theo cặp và trình bày cách sử dụng dữ liệu và phân tích toán học để tạo và tự động hóa các chiến lược giao dịch.

Chiến lược cân bằng dài hạn-ngắn hạn là sự mở rộng tự nhiên của chiến lược giao dịch theo cặp áp dụng cho một rổ mục tiêu giao dịch. Phương pháp này đặc biệt phù hợp với các thị trường giao dịch có nhiều loại hình và mối quan hệ tương hỗ, chẳng hạn như thị trường tiền kỹ thuật số và thị trường hàng hóa tương lai.

Nguyên tắc cơ bản

Chiến lược cân bằng dài hạn-ngắn hạn là mua và bán một rổ mục tiêu giao dịch cùng một lúc. Giống như giao dịch theo cặp, hãy xác định mục tiêu đầu tư nào rẻ và mục tiêu nào đắt. Sự khác biệt là chiến lược cân bằng vốn chủ sở hữu dài hạn-ngắn hạn sẽ sắp xếp tất cả các mục tiêu đầu tư vào một nhóm lựa chọn cổ phiếu để xác định mục tiêu đầu tư nào tương đối rẻ. Hoặc đắt. Sau đó, nó sẽ mua vào n khoản đầu tư hàng đầu dựa trên thứ hạng và bán ra n khoản đầu tư cuối cùng với số tiền bằng nhau (tổng giá trị của các vị thế mua = tổng giá trị của các vị thế bán).

Bạn còn nhớ lúc trước chúng ta đã nói rằng giao dịch theo cặp là chiến lược trung lập với thị trường không? Điều tương tự cũng đúng đối với chiến lược cổ phiếu cân bằng dài hạn-ngắn hạn, vì số lượng vị thế dài hạn và ngắn hạn bằng nhau đảm bảo rằng chiến lược sẽ duy trì tính trung lập của thị trường (không bị ảnh hưởng bởi những biến động của thị trường). Chiến lược này cũng có tính thống kê mạnh mẽ; bằng cách xếp hạng các khoản đầu tư và nắm giữ nhiều vị thế, bạn có thể đưa mô hình xếp hạng của mình vào nhiều mức độ rủi ro, thay vì chỉ chịu rủi ro một lần. Tất cả những gì bạn đang đặt cược là chất lượng của chương trình xếp hạng của bạn.

Hệ thống xếp hạng là gì?

Chương trình xếp hạng là mô hình phân bổ mức độ ưu tiên cho từng mục tiêu đầu tư dựa trên hiệu suất dự kiến ​​của mục tiêu đó. Các yếu tố có thể là yếu tố giá trị, chỉ số kỹ thuật, mô hình định giá hoặc kết hợp tất cả các yếu tố trên. Ví dụ, bạn có thể sử dụng số liệu động lực để xếp hạng danh sách các khoản đầu tư theo xu hướng: các khoản đầu tư có động lực cao nhất dự kiến ​​sẽ tiếp tục hoạt động tốt và nhận được thứ hạng cao nhất; các khoản đầu tư có động lực thấp nhất sẽ hoạt động kém nhất và có lợi nhuận thấp nhất.

Sự thành công của chiến lược này phụ thuộc gần như hoàn toàn vào sơ đồ xếp hạng được sử dụng, nghĩa là sơ đồ xếp hạng của bạn có thể tách biệt các khoản đầu tư hiệu suất cao khỏi các khoản đầu tư hiệu suất thấp, hiện thực hóa tốt hơn lợi nhuận của chiến lược mục tiêu đầu tư dài hạn-ngắn hạn. Vì vậy, việc xây dựng một chương trình xếp hạng là rất quan trọng.

Làm thế nào để xây dựng kế hoạch xếp hạng?

Khi đã có một chương trình xếp hạng, rõ ràng là chúng ta muốn có thể hưởng lợi từ nó. Chúng tôi thực hiện điều này bằng cách đầu tư cùng một số tiền để mua các khoản đầu tư được xếp hạng cao nhất và bán các khoản đầu tư được xếp hạng thấp nhất. Điều này đảm bảo rằng chiến lược này chỉ kiếm được tiền theo tỷ lệ với chất lượng thứ hạng của nó và sẽ “trung lập với thị trường”.

Giả sử bạn đang xếp hạng tất cả các khoản đầu tư m, có n đô la để đầu tư và muốn nắm giữ tổng cộng 2p (trong đó m> 2p). Nếu khoản đầu tư có thứ hạng 1 được dự kiến ​​sẽ có hiệu suất kém nhất thì khoản đầu tư có thứ hạng m được dự kiến ​​sẽ có hiệu suất tốt nhất:

  • Bạn sắp xếp các mục tiêu đầu tư như sau: 1, …, p và mục tiêu đầu tư USD ngắn hạn 2/2p

  • Bạn sắp xếp các mục tiêu đầu tư như sau: m-p,……,m, và đầu tư dài hạn vào n/2p đô la mục tiêu đầu tư

Để ý:Vì giá của mục tiêu đầu tư do giá tăng không phải lúc nào cũng chia đều n/2p và một số mục tiêu đầu tư phải được mua theo số nguyên nên sẽ có một số thuật toán không chính xác và thuật toán phải càng gần với con số này càng tốt. Đối với chiến lược chạy với n = 100000 và p = 500, chúng ta thấy:

n/2p = 1000001000 = 100

Điều này có thể gây ra vấn đề lớn đối với giá có phân số lớn hơn 100 (chẳng hạn như thị trường hàng hóa tương lai), vì bạn không thể mở vị thế với giá phân số (vấn đề này không tồn tại trên thị trường tiền điện tử). Chúng tôi giảm thiểu tình trạng này bằng cách giảm giao dịch giá lẻ hoặc tăng vốn.

Hãy cùng xem một ví dụ giả định.

  • Xây dựng môi trường nghiên cứu của chúng tôi trên Nền tảng định lượng Inventor

Trước hết, để công việc được trôi chảy, chúng ta cần xây dựng môi trường nghiên cứu của mình. Trong bài viết này, chúng tôi sử dụng Inventor Quantitative Platform (FMZ.COM) để xây dựng môi trường nghiên cứu, chủ yếu là để chúng tôi có thể sử dụng API thuận tiện và nhanh chóng giao diện và đóng gói nền tảng này sau. Hệ thống Docker hoàn chỉnh.

Trong tên chính thức của Inventor Quantitative Platform, hệ thống Docker này được gọi là hệ thống lưu trữ.

Để biết thêm thông tin về cách triển khai máy chủ và rô-bốt, vui lòng tham khảo bài viết trước của tôi: https://www.fmz.com/bbs-topic/4140

Bạn đọc muốn mua máy chủ triển khai điện toán đám mây riêng có thể tham khảo bài viết này: https://www.fmz.com/bbs-topic/2848

Sau khi triển khai thành công dịch vụ điện toán đám mây và hệ thống máy chủ, chúng ta sẽ cài đặt công cụ Python mạnh mẽ nhất: Anaconda

Để có được tất cả các môi trường chương trình có liên quan cần thiết cho bài viết này (thư viện phụ thuộc, quản lý phiên bản, v.v.), cách dễ nhất là sử dụng Anaconda. Đây là hệ sinh thái khoa học dữ liệu Python được đóng gói và trình quản lý phụ thuộc.

Để biết phương pháp cài đặt Anaconda, vui lòng tham khảo hướng dẫn chính thức của Anaconda: https://www.anaconda.com/distribution/

Bài viết này cũng sẽ sử dụng numpy và pandas, hai thư viện rất phổ biến và quan trọng trong khoa học tính toán Python.

Đối với công việc cơ bản trên, bạn cũng có thể tham khảo bài viết trước của tôi, trong đó giới thiệu cách thiết lập môi trường Anaconda và hai thư viện numpy và pandas. Để biết chi tiết, vui lòng xem: https://www.fmz.com/digest- chủ đề/4169

Chúng tôi tạo ra các khoản đầu tư và các yếu tố ngẫu nhiên rồi xếp hạng chúng. Giả sử rằng lợi nhuận tương lai của chúng ta thực sự phụ thuộc vào các giá trị yếu tố này.

import numpy as np
import statsmodels.api as sm
import scipy.stats as stats
import scipy
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
## PROBLEM SETUP ##
# Generate stocks and a random factor value for them
stock_names = ['stock ' + str(x) for x in range(10000)]
current_factor_values = np.random.normal(0, 1, 10000)
# Generate future returns for these are dependent on our factor values
future_returns = current_factor_values + np.random.normal(0, 1, 10000)
# Put both the factor values and returns into one dataframe
data = pd.DataFrame(index = stock_names, columns=['Factor Value','Returns'])
data['Factor Value'] = current_factor_values
data['Returns'] = future_returns
# Take a look
data.head(10)

Đạt được sự sắp xếp có trật tự các chiến lược cổ phiếu cân bằng dài hạn và ngắn hạn

Bây giờ chúng ta đã có các giá trị yếu tố và lợi nhuận, chúng ta có thể xem điều gì xảy ra nếu chúng ta xếp hạng các khoản đầu tư dựa trên các giá trị yếu tố rồi mở các vị thế mua và bán.

# Rank stocks
ranked_data = data.sort_values('Factor Value')
# Compute the returns of each basket with a basket size 500, so total (10000/500) baskets
number_of_baskets = int(10000/500)
basket_returns = np.zeros(number_of_baskets)
for i in range(number_of_baskets):
    start = i * 500
    end = i * 500 + 500 
    basket_returns[i] = ranked_data[start:end]['Returns'].mean()
# Plot the returns of each basket
plt.figure(figsize=(15,7))
plt.bar(range(number_of_baskets), basket_returns)
plt.ylabel('Returns')
plt.xlabel('Basket')
plt.legend(['Returns of Each Basket'])
plt.show()

Đạt được sự sắp xếp có trật tự các chiến lược cổ phiếu cân bằng dài hạn và ngắn hạn

Chiến lược của chúng tôi là đầu tư dài hạn vào khoản đầu tư được xếp hạng đầu tiên trong rổ mục tiêu đầu tư và bán khống mục tiêu đầu tư được xếp hạng thứ mười. Phần thưởng của chiến lược này là:

basket_returns[number_of_baskets-1] - basket_returns[0]

Kết quả là: 4.172

Hãy đầu tư vào mô hình xếp hạng của chúng tôi để phân biệt các khoản đầu tư có hiệu suất cao với các khoản đầu tư có hiệu suất thấp.

Trong phần còn lại của bài viết này, chúng ta sẽ thảo luận về cách đánh giá các chương trình xếp hạng. Lợi ích của việc kiếm tiền từ giao dịch chênh lệch giá dựa trên thứ hạng là nó không bị ảnh hưởng bởi sự hỗn loạn của thị trường mà thay vào đó có thể tận dụng nó.

Hãy cùng xem xét một ví dụ thực tế.

Chúng tôi tải dữ liệu của 32 cổ phiếu từ các lĩnh vực khác nhau trong S&P 500 và cố gắng xếp hạng chúng.

from backtester.dataSource.yahoo_data_source import YahooStockDataSource
from datetime import datetime
startDateStr = '2010/01/01'
endDateStr = '2017/12/31'
cachedFolderName = '/Users/chandinijain/Auquan/yahooData/'
dataSetId = 'testLongShortTrading'
instrumentIds = ['ABT','AKS','AMGN','AMD','AXP','BK','BSX',
                'CMCSA','CVS','DIS','EA','EOG','GLW','HAL',
                'HD','LOW','KO','LLY','MCD','MET','NEM',
                'PEP','PG','M','SWN','T','TGT',
                'TWX','TXN','USB','VZ','WFC']
ds = YahooStockDataSource(cachedFolderName=cachedFolderName,
                            dataSetId=dataSetId,
                            instrumentIds=instrumentIds,
                            startDateStr=startDateStr,
                            endDateStr=endDateStr,
                            event='history')
price = 'adjClose'

Chúng ta hãy sử dụng chỉ báo động lượng chuẩn hóa trong khoảng thời gian một tháng làm cơ sở để xếp hạng

## Define normalized momentum
def momentum(dataDf, period):
    return dataDf.sub(dataDf.shift(period), fill_value=0) / dataDf.iloc[-1]
## Load relevant prices in a dataframe
data = ds.getBookDataByFeature()[‘Adj Close’]
#Let's load momentum score and returns into separate dataframes
index = data.index
mscores = pd.DataFrame(index=index,columns=assetList)
mscores = momentum(data, 30)
returns = pd.DataFrame(index=index,columns=assetList)
day = 30

Bây giờ chúng ta sẽ phân tích hành vi của cổ phiếu và xem cổ phiếu của chúng ta hoạt động như thế nào trên thị trường trong các yếu tố xếp hạng mà chúng ta đã chọn.

Phân tích dữ liệu

Hành vi của cổ phiếu

Hãy cùng xem rổ cổ phiếu được chúng tôi lựa chọn hoạt động như thế nào trong mô hình xếp hạng của chúng tôi. Để làm được điều này, chúng ta hãy tính toán lợi nhuận kỳ hạn một tuần cho tất cả các cổ phiếu. Sau đó, chúng ta có thể xem xét mối tương quan giữa lợi nhuận kỳ vọng 1 tuần của mỗi cổ phiếu với đà tăng trưởng 30 ngày trước đó. Cổ phiếu có tương quan dương là cổ phiếu đi theo xu hướng, còn cổ phiếu có tương quan âm là cổ phiếu đang quay về giá trị trung bình.

# Calculate Forward returns
forward_return_day = 5
returns = data.shift(-forward_return_day)/data -1
returns.dropna(inplace = True)
# Calculate correlations between momentum and returns
correlations = pd.DataFrame(index = returns.columns, columns = [‘Scores’, ‘pvalues’])
mscores = mscores[mscores.index.isin(returns.index)]
for i in correlations.index:
    score, pvalue = stats.spearmanr(mscores[i], returns[i])
    correlations[‘pvalues’].loc[i] = pvalue
    correlations[‘Scores’].loc[i] = score
correlations.dropna(inplace = True)
correlations.sort_values(‘Scores’, inplace=True)
l = correlations.index.size
plt.figure(figsize=(15,7))
plt.bar(range(1,1+l),correlations[‘Scores’])
plt.xlabel(‘Stocks’)
plt.xlim((1, l+1))
plt.xticks(range(1,1+l), correlations.index)
plt.legend([‘Correlation over All Data’])
plt.ylabel(‘Correlation between %s day Momentum Scores and %s-day forward returns by Stock’%(day,forward_return_day));
plt.show()

Đạt được sự sắp xếp có trật tự các chiến lược cổ phiếu cân bằng dài hạn và ngắn hạn

Tất cả cổ phiếu của chúng tôi đều có xu hướng quay trở lại ở một mức độ nào đó! (Rõ ràng vũ trụ mà chúng ta lựa chọn hoạt động theo cách này) Điều này cho chúng ta biết rằng nếu một cổ phiếu được xếp hạng cao trong phân tích động lượng, chúng ta nên mong đợi nó sẽ hoạt động kém hiệu quả vào tuần tới.

Sự tương quan giữa Xếp hạng Điểm Động lượng và Lợi nhuận

Tiếp theo, chúng ta cần xem xét mối tương quan giữa điểm xếp hạng của chúng ta và lợi nhuận kỳ vọng chung của thị trường, tức là mối quan hệ giữa dự đoán lợi nhuận kỳ vọng và các yếu tố xếp hạng của chúng ta. Mức độ tương quan cao hơn có thể dự đoán lợi nhuận tương đối kém hơn hay ngược lại không?

Để thực hiện điều này, chúng tôi tính toán mối tương quan hàng ngày giữa động lực 30 ngày và lợi nhuận kỳ hạn 1 tuần cho tất cả cổ phiếu.

correl_scores = pd.DataFrame(index = returns.index.intersection(mscores.index), columns = [‘Scores’, ‘pvalues’])
for i in correl_scores.index:
    score, pvalue = stats.spearmanr(mscores.loc[i], returns.loc[i])
    correl_scores[‘pvalues’].loc[i] = pvalue
    correl_scores[‘Scores’].loc[i] = score
correl_scores.dropna(inplace = True)
l = correl_scores.index.size
plt.figure(figsize=(15,7))
plt.bar(range(1,1+l),correl_scores[‘Scores’])
plt.hlines(np.mean(correl_scores[‘Scores’]), 1,l+1, colors=’r’, linestyles=’dashed’)
plt.xlabel(‘Day’)
plt.xlim((1, l+1))
plt.legend([‘Mean Correlation over All Data’, ‘Daily Rank Correlation’])
plt.ylabel(‘Rank correlation between %s day Momentum Scores and %s-day forward returns’%(day,forward_return_day));
plt.show()

Đạt được sự sắp xếp có trật tự các chiến lược cổ phiếu cân bằng dài hạn và ngắn hạn

Sự tương quan hàng ngày khá nhiễu nhưng rất nhỏ (điều này nằm trong dự đoán vì chúng tôi đã nói rằng tất cả cổ phiếu sẽ trở lại giá trị trung bình). Chúng tôi cũng xem xét mối tương quan trung bình hàng tháng của lợi nhuận kỳ hạn 1 tháng.

monthly_mean_correl =correl_scores['Scores'].astype(float).resample('M').mean()
plt.figure(figsize=(15,7))
plt.bar(range(1,len(monthly_mean_correl)+1), monthly_mean_correl)
plt.hlines(np.mean(monthly_mean_correl), 1,len(monthly_mean_correl)+1, colors='r', linestyles='dashed')
plt.xlabel('Month')
plt.xlim((1, len(monthly_mean_correl)+1))
plt.legend(['Mean Correlation over All Data', 'Monthly Rank Correlation'])
plt.ylabel('Rank correlation between %s day Momentum Scores and %s-day forward returns'%(day,forward_return_day));
plt.show()

Đạt được sự sắp xếp có trật tự các chiến lược cổ phiếu cân bằng dài hạn và ngắn hạn

Chúng ta có thể thấy rằng mối tương quan trung bình một lần nữa lại có giá trị âm nhưng cũng thay đổi rất nhiều theo từng tháng.

Lợi nhuận trung bình của giỏ cổ phiếu

Chúng tôi đã tính toán lợi nhuận cho một nhóm cổ phiếu lấy từ bảng xếp hạng của chúng tôi. Nếu chúng ta xếp hạng tất cả các cổ phiếu rồi chia chúng thành n nhóm thì lợi nhuận trung bình của mỗi nhóm sẽ là bao nhiêu?

Bước đầu tiên là tạo một hàm cung cấp lợi nhuận trung bình và hệ số xếp hạng cho mỗi giỏ hàng được đưa ra vào mỗi tháng.

def compute_basket_returns(factor, forward_returns, number_of_baskets, index):
data = pd.concat([factor.loc[index],forward_returns.loc[index]], axis=1)
    # Rank the equities on the factor values
    data.columns = ['Factor Value', 'Forward Returns']
    data.sort_values('Factor Value', inplace=True)
    # How many equities per basket
    equities_per_basket = np.floor(len(data.index) / number_of_baskets)
basket_returns = np.zeros(number_of_baskets)
# Compute the returns of each basket
    for i in range(number_of_baskets):
        start = i * equities_per_basket
        if i == number_of_baskets - 1:
            # Handle having a few extra in the last basket when our number of equities doesn't divide well
            end = len(data.index) - 1
        else:
            end = i * equities_per_basket + equities_per_basket
        # Actually compute the mean returns for each basket
        #s = data.index.iloc[start]
        #e = data.index.iloc[end]
        basket_returns[i] = data.iloc[int(start):int(end)]['Forward Returns'].mean()
        
    return basket_returns

Chúng tôi tính toán lợi nhuận trung bình cho mỗi giỏ hàng khi xếp hạng cổ phiếu dựa trên điểm số này. Điều này sẽ giúp chúng ta hiểu rõ hơn về mối quan hệ của họ trong một thời gian dài.

number_of_baskets = 8
mean_basket_returns = np.zeros(number_of_baskets)
resampled_scores = mscores.astype(float).resample('2D').last()
resampled_prices = data.astype(float).resample('2D').last()
resampled_scores.dropna(inplace=True)
resampled_prices.dropna(inplace=True)
forward_returns = resampled_prices.shift(-1)/resampled_prices -1
forward_returns.dropna(inplace = True)
for m in forward_returns.index.intersection(resampled_scores.index):
    basket_returns = compute_basket_returns(resampled_scores, forward_returns, number_of_baskets, m)
    mean_basket_returns += basket_returns
mean_basket_returns /= l    
print(mean_basket_returns)
# Plot the returns of each basket
plt.figure(figsize=(15,7))
plt.bar(range(number_of_baskets), mean_basket_returns)
plt.ylabel('Returns')
plt.xlabel('Basket')
plt.legend(['Returns of Each Basket'])
plt.show()

Đạt được sự sắp xếp có trật tự các chiến lược cổ phiếu cân bằng dài hạn và ngắn hạn

Có vẻ như chúng ta có thể phân biệt được người có hiệu suất cao với người có hiệu suất thấp.

Sự nhất quán lan truyền (cơ sở)

Tất nhiên, đây chỉ là những mối quan hệ trung bình. Để hiểu được mức độ nhất quán của mối quan hệ và liệu chúng ta có sẵn sàng thỏa thuận hay không, chúng ta nên thay đổi cách tiếp cận và thái độ theo thời gian. Tiếp theo, chúng ta sẽ xem xét mức chênh lệch hàng tháng (cơ sở) của họ trong hai năm trước. Chúng ta có thể thấy nhiều thay đổi hơn và thực hiện phân tích sâu hơn để xác định xem điểm số động lượng này có thể giao dịch được hay không.

total_months = mscores.resample('M').last().index
months_to_plot = 24
monthly_index = total_months[:months_to_plot+1]
mean_basket_returns = np.zeros(number_of_baskets)
strategy_returns = pd.Series(index = monthly_index)
f, axarr = plt.subplots(1+int(monthly_index.size/6), 6,figsize=(18, 15))
for month in range(1, monthly_index.size):
    temp_returns = forward_returns.loc[monthly_index[month-1]:monthly_index[month]]
    temp_scores = resampled_scores.loc[monthly_index[month-1]:monthly_index[month]]
    for m in temp_returns.index.intersection(temp_scores.index):
        basket_returns = compute_basket_returns(temp_scores, temp_returns, number_of_baskets, m)
        mean_basket_returns += basket_returns
    
    strategy_returns[monthly_index[month-1]] = mean_basket_returns[ number_of_baskets-1] - mean_basket_returns[0]
    
    mean_basket_returns /= temp_returns.index.intersection(temp_scores.index).size
    
    r = int(np.floor((month-1) / 6))
    c = (month-1) % 6
    axarr[r, c].bar(range(number_of_baskets), mean_basket_returns)
    axarr[r, c].xaxis.set_visible(False)
    axarr[r, c].set_title('Month ' + str(month))
plt.show()

Đạt được sự sắp xếp có trật tự các chiến lược cổ phiếu cân bằng dài hạn và ngắn hạn

plt.figure(figsize=(15,7))
plt.plot(strategy_returns)
plt.ylabel(‘Returns’)
plt.xlabel(‘Month’)
plt.plot(strategy_returns.cumsum())
plt.legend([‘Monthly Strategy Returns’,’Cumulative Strategy Returns’])
plt.show()

Đạt được sự sắp xếp có trật tự các chiến lược cổ phiếu cân bằng dài hạn và ngắn hạn

Cuối cùng, hãy xem xét lợi nhuận nếu chúng ta mua rổ cuối cùng và bán rổ đầu tiên mỗi tháng (giả sử phân bổ vốn bằng nhau cho mỗi chứng khoán)

total_return = strategy_returns.sum()
ann_return = 100*((1 + total_return)**(12.0 /float(strategy_returns.index.size))-1)
print('Annual Returns: %.2f%%'%ann_return)

Lợi nhuận hàng năm: 5,03%

Chúng ta thấy rằng chúng ta có một hệ thống xếp hạng rất yếu, chỉ phân biệt một cách khiêm tốn các cổ phiếu có hiệu suất cao với các cổ phiếu có hiệu suất thấp. Hơn nữa, không có sự nhất quán trong bảng xếp hạng này và nó thay đổi rất nhiều theo từng tháng.

Tìm đúng sơ đồ xếp hạng

Để thực hiện chiến lược cổ phiếu cân bằng dài hạn-ngắn hạn, bạn thực sự chỉ cần xác định sơ đồ xếp hạng. Mọi thứ sau đó đều mang tính cơ học. Khi bạn có chiến lược cổ phiếu cân bằng dài hạn-ngắn hạn, bạn có thể hoán đổi các yếu tố xếp hạng khác nhau mà không cần thay đổi nhiều. Đây là một cách rất tiện lợi để nhanh chóng lặp lại các ý tưởng của bạn mà không phải lo lắng về việc chỉnh sửa toàn bộ mã mỗi lần.

Sơ đồ xếp hạng cũng có thể bắt nguồn từ hầu hết mọi mô hình. Nó không nhất thiết phải là mô hình nhân tố dựa trên giá trị, nó có thể là kỹ thuật học máy dự đoán lợi nhuận trước một tháng và xếp hạng chúng dựa trên dữ liệu đó.

Lựa chọn và đánh giá các chương trình xếp hạng

Sơ đồ xếp hạng là lợi thế của chiến lược cổ phiếu cân bằng dài hạn-ngắn hạn và cũng là thành phần quan trọng nhất. Việc lựa chọn một chương trình xếp hạng tốt là một dự án có hệ thống và không có câu trả lời đơn giản nào.

Một điểm khởi đầu tốt là chọn những công nghệ hiện có và xem liệu bạn có thể sửa đổi chúng một chút để có được lợi nhuận cao hơn hay không. Chúng ta sẽ thảo luận một vài điểm khởi đầu ở đây:

  • Sao chép và điều chỉnh:Chọn chủ đề thường được thảo luận và xem liệu bạn có thể thay đổi một chút để có lợi cho mình hay không. Thông thường, các yếu tố công khai sẽ không còn tín hiệu giao dịch nữa vì chúng đã bị loại khỏi thị trường hoàn toàn. Tuy nhiên, đôi khi chúng có thể chỉ dẫn bạn đi đúng hướng.

  • Mô hình định giá:Bất kỳ mô hình nào dự đoán được lợi nhuận trong tương lai đều có thể là một yếu tố và có khả năng được sử dụng để xếp hạng rổ mục tiêu giao dịch của bạn. Bạn có thể sử dụng bất kỳ mô hình định giá phức tạp nào và chuyển đổi nó thành một chương trình xếp hạng.

  • Các yếu tố dựa trên giá (chỉ số kỹ thuật):Các yếu tố dựa trên giá, như những yếu tố chúng ta đã thảo luận hôm nay, lấy thông tin về giá lịch sử của mỗi cổ phiếu và sử dụng thông tin đó để tạo ra giá trị yếu tố. Ví dụ có thể là chỉ báo trung bình động, chỉ báo động lượng hoặc chỉ báo biến động.

  • Sự hồi quy và động lượng:Điều đáng chú ý là một số yếu tố cho rằng một khi giá cả đã di chuyển theo một hướng thì chúng sẽ tiếp tục như vậy. Một số yếu tố thì ngược lại. Cả hai đều là mô hình hợp lệ trên các khung thời gian và tài sản khác nhau và điều quan trọng là phải nghiên cứu xem hành vi cơ bản là dựa trên động lượng hay hồi quy.

  • Các yếu tố cơ bản (Dựa trên giá trị):Đây là phương pháp kết hợp các giá trị cơ bản như PE, cổ tức, v.v. Giá trị cơ bản chứa đựng thông tin liên quan đến các sự kiện thực tế về một công ty và do đó có thể mạnh hơn giá theo nhiều cách.

Cuối cùng, việc phát triển các yếu tố dự đoán là một cuộc chạy đua vũ trang, trong đó bạn phải cố gắng đi trước một bước. Các yếu tố được đưa ra khỏi thị trường và có tuổi thọ nhất định, vì vậy bạn phải liên tục thực hiện công việc để xác định mức độ suy giảm của các yếu tố và những yếu tố mới nào có thể được sử dụng để thay thế chúng.

Những cân nhắc khác

  • Tần số cân bằng lại

Mỗi hệ thống xếp hạng dự đoán lợi nhuận trong một khung thời gian hơi khác nhau. Sự đảo ngược giá trung bình có thể dự đoán được trong vài ngày, trong khi các mô hình yếu tố dựa trên giá trị có thể dự đoán được trong vài tháng. Việc xác định khung thời gian mà mô hình dự báo và xác thực nó về mặt thống kê trước khi thực hiện chiến lược là rất quan trọng. Bạn chắc chắn không muốn quá phù hợp bằng cách cố gắng tối ưu hóa tần suất cân bằng lại của mình; bạn chắc chắn sẽ tìm thấy một tần suất vượt trội hơn những tần suất khác một cách ngẫu nhiên. Sau khi xác định được mốc thời gian mà sơ đồ xếp hạng của bạn dự đoán, hãy thử cân bằng lại ở tần suất xấp xỉ đó để tận dụng tối đa mô hình của bạn.

  • Năng lực vốn và chi phí giao dịch

Mỗi chiến lược đều có yêu cầu về vốn tối thiểu và tối đa, trong đó ngưỡng tối thiểu thường được xác định bởi chi phí giao dịch.

Giao dịch quá nhiều cổ phiếu sẽ dẫn đến chi phí giao dịch cao. Giả sử bạn muốn mua 1.000 cổ phiếu, mỗi lần tái cân bằng sẽ tốn chi phí vài nghìn đô la. Vốn cơ sở của bạn phải đủ cao để chi phí giao dịch chỉ chiếm một phần nhỏ trong lợi nhuận tạo ra từ chiến lược của bạn. Ví dụ, nếu vốn của bạn là 100.000 đô la và chiến lược của bạn kiếm được 1% (1.000 đô la) mỗi tháng, thì toàn bộ lợi nhuận đó sẽ bị chi phí giao dịch nuốt chửng. Bạn sẽ cần hàng triệu đô la vốn để thực hiện chiến lược này nhằm kiếm lợi nhuận từ hơn 1.000 cổ phiếu.

Ngưỡng tài sản tối thiểu chủ yếu phụ thuộc vào số lượng cổ phiếu được giao dịch. Tuy nhiên, công suất tối đa cũng rất cao và các chiến lược cổ phiếu cân bằng dài hạn-ngắn hạn có thể giao dịch hàng trăm triệu đô la mà không mất đi lợi thế. Điều này đúng vì chiến lược này được cân bằng lại tương đối ít khi xảy ra. Tổng số tài sản chia cho số lượng cổ phiếu được giao dịch sẽ cho giá trị đô la trên mỗi cổ phiếu rất thấp và bạn không phải lo lắng về khối lượng giao dịch của mình sẽ tác động đến thị trường. Giả sử bạn giao dịch 1.000 cổ phiếu, số tiền là 100.000.000 đô la. Nếu bạn cân bằng lại toàn bộ danh mục đầu tư của mình mỗi tháng, bạn sẽ chỉ giao dịch 100.000 đô la mỗi tháng cho mỗi cổ phiếu, không đủ để chiếm thị phần đáng kể đối với hầu hết các loại chứng khoán.