이전 기사(https://www.fmz.com/digest-topic/4187)에서는 페어 트레이딩 전략을 소개하고 데이터와 수학적 분석을 사용하여 트레이딩 전략을 생성하고 자동화하는 방법을 보여드렸습니다.
롱-숏 밸런스드 주식 전략은 거래 대상 바스켓에 적용할 수 있는 페어 트레이딩 전략의 자연스러운 확장 형태입니다. 이 모델은 디지털 화폐 시장이나 상품 선물 시장처럼 다양한 종류와 상호 연관성이 있는 거래 시장에 특히 적합합니다.
롱-숏 균형형 주식 전략은 동시에 거래 대상 바스켓에 대해 롱 포지션과 숏 포지션을 취하는 것입니다. 페어 트레이딩과 마찬가지로 어떤 투자 대상이 저렴하고 어떤 투자 대상이 비싼지 파악합니다. 차이점은 롱-숏 밸런스드 주식 전략은 모든 투자 대상을 주식 선택 풀로 분류하여 어떤 투자 대상이 비교적 저렴한지 파악한다는 것입니다. 또는 비싼지. 그런 다음 순위에 따라 상위 n개 투자에 롱 포지션을 취하고, 하위 n개 투자에 동일한 금액으로 숏 포지션을 취합니다(롱 포지션의 총 가치 = 숏 포지션의 총 가치).
앞서 페어 트레이딩이 시장 중립적 전략이라고 말했던 걸 기억하시나요? 롱-숏 균형 주식 전략에도 동일하게 적용되는데, 롱 포지션과 숏 포지션의 규모가 동일하기 때문에 전략이 시장 중립(시장 변동에 영향을 받지 않음)을 유지할 수 있습니다. 이 전략은 통계적으로도 강력합니다. 투자를 순위 매기고 여러 포지션을 취함으로써 순위 모델을 단 한 번의 위험 노출만이 아닌 여러 노출에 노출시킬 수 있습니다. 당신이 베팅하는 것은 단지 순위 매기기 방식의 질뿐입니다.
순위 체계는 예상 성과에 따라 각 투자 대상에 우선순위를 지정하는 모델입니다. 이러한 요인에는 가치 요인, 기술 지표, 가격 모델이 있을 수 있으며, 이 모든 요인의 조합일 수도 있습니다. 예를 들어, 추세 추종 투자 목록을 순위를 매기기 위해 모멘텀 지표를 사용할 수 있습니다. 가장 높은 모멘텀을 가진 투자는 계속해서 좋은 성과를 낼 것으로 예상되며 가장 높은 순위를 받을 것입니다. 가장 낮은 모멘텀을 가진 투자는 가장 나쁜 성과를 낼 것입니다. 수익률이 가장 낮습니다.
이 전략의 성공 여부는 거의 전적으로 사용된 순위 체계에 달려 있습니다. 즉, 순위 체계가 수익률이 높은 투자와 수익률이 낮은 투자를 구분하여 롱숏 투자 목표 전략의 수익을 더 잘 실현할 수 있는지 여부입니다. 그러므로 순위 체계를 개발하는 것이 매우 중요합니다.
순위 체계가 구축되면 당연히 이를 통해 수익을 창출하고 싶을 것입니다. 우리는 상위 순위의 투자에 롱 포지션을 취하고 하위 순위의 투자에 숏 포지션을 취하는 방식으로 동일한 금액을 투자합니다. 이를 통해 해당 전략은 순위의 질에 비례해서만 수익을 창출하고 “시장 중립적”이 될 수 있습니다.
모든 투자를 m으로 순위를 매기고, 투자할 달러가 n개 있으며, 총 2p개의 포지션(m>2p)을 보유하려 한다고 가정해 보겠습니다. 순위 1의 투자가 최악의 성과를 거둘 것으로 예상되는 경우 순위 m의 투자가 최고의 성과를 거둘 것으로 예상됩니다.
투자대상을 다음과 같이 정리합니다: 1, …, p, 그리고 숏 2/2p USD 투자대상
투자 대상을 m-p,……,m으로 정렬하고 투자 대상의 n/2p 달러에 대해 롱 포지션을 취합니다.
알아채다:가격 급등으로 인한 목표 가격이 항상 n/2p를 균등하게 나누는 것은 아니며, 일부 목표 가격은 정수로 매수해야 하므로 정확하지 않은 알고리즘이 있을 수 있으며, 알고리즘은 가능한 한 이 숫자에 가까워야 합니다. n = 100000, p = 500인 전략 실행의 경우 다음을 볼 수 있습니다.
n/2p = 100000⁄1000 = 100
가격이 100보다 큰 분수인 경우(상품 선물 시장 등) 큰 문제가 발생할 수 있습니다. 분수 가격으로는 포지션을 열 수 없기 때문입니다(이 문제는 암호화폐 시장에서는 발생하지 않습니다). 우리는 분수 가격 거래를 줄이거나 자본을 늘려 이를 완화합니다.
우선, 원활하게 작업하기 위해서는 연구 환경을 구축해야 합니다. 이 글에서는 Inventor Quantitative Platform(FMZ.COM)을 사용하여 연구 환경을 구축합니다. 주로 편리하고 빠른 API를 사용할 수 있도록 하기 위해서입니다. 나중에 이 플랫폼의 인터페이스와 캡슐화. 완전한 Docker 시스템.
Inventor Quantitative Platform의 공식 명칭에서는 이 Docker 시스템을 호스트 시스템이라고 합니다.
호스트와 로봇을 배치하는 방법에 대한 자세한 내용은 이전 기사를 참조하세요: https://www.fmz.com/bbs-topic/4140
자체 클라우드 컴퓨팅 서버 배포 호스트를 구매하려는 독자는 이 기사를 참조하세요: https://www.fmz.com/bbs-topic/2848
클라우드 컴퓨팅 서비스와 호스트 시스템을 성공적으로 배포한 후 가장 강력한 Python 도구인 Anaconda를 설치합니다.
이 문서에 필요한 모든 관련 프로그램 환경(종속 라이브러리, 버전 관리 등)을 구현하기 위한 가장 쉬운 방법은 Anaconda를 사용하는 것입니다. 이는 패키지된 Python 데이터 과학 생태계 및 종속성 관리자입니다.
Anaconda 설치 방법은 Anaconda 공식 가이드를 참조하세요: https://www.anaconda.com/distribution/
이 글에서는 Python 과학 컴퓨팅에서 매우 인기 있고 중요한 라이브러리인 numpy와 pandas를 사용할 것입니다.
위의 기본 작업에 대해서는 Anaconda 환경과 numpy, pandas 두 라이브러리를 설정하는 방법을 소개하는 이전 기사를 참조할 수도 있습니다. 자세한 내용은 https://www.fmz.com/digest-를 참조하세요. 주제/4169
우리는 무작위 투자와 무작위 요소를 생성하여 순위를 매깁니다. 미래 수익률이 실제로 이러한 요인 값에 따라 달라진다고 가정해 보겠습니다.
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)
이제 우리는 요인 값과 수익률을 알고 있으므로, 투자를 요인 값을 기준으로 순위를 매기고 롱과 숏 포지션을 열면 어떤 일이 일어나는지 알아보겠습니다.
# 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()
우리의 전략은 투자 대상 바구니에서 1순위 투자에 롱 포지션을 취하고, 10순위 투자 대상에 숏 포지션을 취하는 것입니다. 이 전략의 보상은 다음과 같습니다.
basket_returns[number_of_baskets-1] - basket_returns[0]
결과는 4.172입니다.
높은 수익률을 내는 투자와 낮은 수익률을 내는 투자를 구분하는 순위 모델에 투자하세요.
이 기사의 나머지 부분에서는 순위 체계를 평가하는 방법에 대해 논의해보겠습니다. 순위 기반 차익거래로 수익을 창출하는 이점은 시장 혼란에 영향을 받지 않고, 오히려 이를 이용할 수 있다는 점입니다.
우리는 S&P 500의 다양한 부문에서 32개 주식에 대한 데이터를 로드하여 순위를 매겨보려고 합니다.
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'
1개월 기간 동안의 정규화된 모멘텀 지표를 순위를 매기는 기준으로 사용해 보겠습니다.
## 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
이제 주식의 움직임을 분석하고 우리가 선택한 순위 요소 내에서 주식이 시장에서 어떤 성과를 보이는지 살펴보겠습니다.
주식 행동
이제 우리가 선정한 주식 바구니가 순위 모델에서 어떤 성과를 보이는지 살펴보겠습니다. 이를 위해 모든 주식의 1주일 미래 수익률을 계산해 보겠습니다. 그런 다음 각 주식의 1주일 예상 수익률과 이전 30일 모멘텀의 상관관계를 살펴볼 수 있습니다. 양의 상관관계를 보이는 주식은 추세 추종이며, 음의 상관관계를 보이는 주식은 평균 회귀입니다.
# 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()
우리 주식은 모두 어느 정도 회복될 것으로 보입니다! (분명 우리가 선택한 우주는 이런 방식으로 작동합니다.) 이는 주식이 모멘텀 분석에서 높은 순위를 차지하면 다음 주에는 실적이 저조할 것으로 예상해야 함을 의미합니다.
다음으로, 우리의 랭킹 점수와 시장의 전반적인 포워드 수익률 간의 상관관계, 즉 예상 수익률 예측과 우리의 랭킹 요인 간의 상관관계를 살펴봐야 합니다. 상관관계 수준이 높을수록 상대 수익률이 더 나빠질 수 있을까요? 아니면 그 반대일까요?
이를 위해 우리는 모든 주식의 30일 모멘텀과 1주일 예상 수익률 간의 일일 상관관계를 계산합니다.
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()
일일 상관관계는 매우 노이즈가 심하지만 매우 미미합니다(모든 주식이 회귀할 것이라고 말했기 때문에 예상된 바입니다). 또한 1개월 미래 수익률의 평균 월별 상관관계도 살펴보겠습니다.
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()
평균 상관관계가 다시 약간 음수인 것을 볼 수 있지만, 매월 크게 달라지기도 합니다.
우리는 순위에서 뽑은 주식 바구니에 대한 수익률을 계산했습니다. 모든 주식을 순위를 매긴 다음 n개 그룹으로 나누면 각 그룹의 평균 수익률은 얼마일까요?
첫 번째 단계는 매달 주어진 각 바구니에 대한 평균 수익률과 순위 요소를 제공하는 함수를 만드는 것입니다.
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
우리는 이 점수에 따라 주식의 순위를 매길 때 각 바구니의 평균 수익률을 계산합니다. 이를 통해 우리는 장기간에 걸친 그들의 관계에 대한 좋은 아이디어를 얻을 수 있습니다.
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()
성과가 좋은 기업과 성과가 나쁜 기업을 구분할 수 있는 것 같습니다.
물론, 이는 단지 평균적인 관계일 뿐입니다. 관계가 얼마나 지속되는지, 그리고 우리가 거래를 할 의향이 있는지 이해하기 위해서는 시간이 지남에 따라 관계에 대한 우리의 접근 방식과 태도를 바꿔야 합니다. 다음으로, 지난 2년 동안의 월별 스프레드(기준)를 살펴보겠습니다. 우리는 더 많은 변화를 확인하고 추가 분석을 수행하여 이 모멘텀 점수가 거래 가능한지 확인할 수 있습니다.
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()
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()
마지막으로, 매달 마지막 바스켓을 롱 포지션으로, 첫 번째 바스켓을 숏 포지션으로 잡았을 때의 수익률을 살펴보겠습니다(각 증권에 동일한 자본 배분을 가정).
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)
연간 수익률: 5.03%
우리는 성과가 좋은 주식과 성과가 나쁜 주식을 간신히 구분할 뿐인 매우 약한 순위 체계를 가지고 있음을 알 수 있습니다. 더욱이 이 순위 체계에는 일관성이 없으며 매달 상당한 차이가 있습니다.
롱-숏 균형 주식 전략을 구현하려면 순위 체계만 결정하면 됩니다. 그 이후의 모든 것은 기계적인 것입니다. 롱-숏 균형 주식 전략이 구축되면 다른 순위 요소를 크게 변경하지 않고도 바꿀 수 있습니다. 이는 전체 코드를 매번 수정할 필요 없이 아이디어를 빠르게 반복할 수 있는 매우 편리한 방법입니다.
순위 체계는 거의 모든 모델에서 나올 수 있습니다. 가치 기반 팩터 모델일 필요는 없고, 한 달 전의 수익을 예측하고 이를 기준으로 순위를 매기는 머신 러닝 기술이 될 수도 있습니다.
순위 체계는 롱-숏 균형 주식 전략의 장점이자 가장 중요한 구성 요소입니다. 좋은 순위 체계를 선택하는 것은 체계적인 프로젝트이며 간단한 답은 없습니다.
좋은 시작점은 기존의 알려진 기술을 선택하고 이를 약간 수정해서 더 높은 수익을 얻을 수 있는지 확인하는 것입니다. 여기서 몇 가지 시작점을 논의해 보겠습니다.
복제하고 조정: 자주 논의되는 내용을 골라서 당신에게 유리하게 약간 수정할 수 있는지 살펴보세요. 일반적으로 공공 요인은 시장에서 완전히 차익거래가 이루어졌기 때문에 더 이상 거래 신호가 없습니다. 하지만 가끔은 그것이 당신을 올바른 방향으로 인도할 수도 있습니다.
가격 모델: 미래 수익을 예측하는 모든 모델은 요인이 될 수 있으며 거래 대상 바구니의 순위를 매기는 데 사용될 수 있는 잠재력이 있습니다. 복잡한 가격 책정 모델을 순위 체계로 변환할 수 있습니다.
가격 기반 요인(기술 지표): 오늘 논의한 것과 같은 가격 기반 요인은 각 주식의 과거 가격에 대한 정보를 가져와 요인 값을 생성하는 데 사용합니다. 예로는 이동 평균 지표, 모멘텀 지표, 변동성 지표 등이 있습니다.
회귀와 모멘텀: 일부 요인들은 가격이 한 방향으로 한번 움직이면 앞으로도 계속 움직일 것이라고 믿는다는 점에 주목할 가치가 있습니다. 어떤 요인은 정반대입니다. 두 모델 모두 서로 다른 시간대와 자산에 적용 가능하며, 기본 행동이 모멘텀 기반인지, 회귀 기반인지 연구하는 것이 중요합니다.
기본적 요인(가치 기반): 이는 PE, 배당금 등과 같은 기본 가치를 조합하여 사용하는 것입니다. 기본 가치는 회사에 대한 현실적인 사실과 관련된 정보를 담고 있기 때문에 여러 면에서 가격보다 더 강력할 수 있습니다.
궁극적으로, 예측 변수를 개발하는 것은 한 발 앞서 나가기 위해 노력하는 군비 경쟁과 같습니다. 요인들은 시장에서 차익거래되며 수명이 있으므로 요인들이 얼마나 감소했는지와 이를 대체하기 위해 사용할 수 있는 새로운 요인을 파악하기 위한 작업을 지속적으로 수행해야 합니다.
각 순위 시스템은 약간 다른 기간 동안의 수익을 예측합니다. 가격 기반 평균 회귀는 며칠에 걸쳐 예측 가능할 수 있는 반면, 가치 기반 요인 모델은 몇 달에 걸쳐 예측 가능할 수 있습니다. 전략을 실행하기 전에 모델이 예측해야 할 시간적 범위를 결정하고 통계적으로 검증하는 것이 매우 중요합니다. 재조정 빈도를 최적화하려고 시도하여 과적합이 되는 것은 원하지 않을 것입니다. 필연적으로 다른 것보다 무작위로 더 나은 성과를 내는 것을 찾게 될 것입니다. 랭킹 체계가 예측하는 시간적 지평을 결정한 후에는 대략 그 빈도로 재조정을 시도하여 다음을 수행하십시오. 귀하의 모델을 최대한 활용하세요.
각 전략에는 최소 및 최대 자본 요구 사항이 있으며, 최소 임계값은 일반적으로 거래 비용에 따라 결정됩니다.
너무 많은 주식을 거래하면 거래 비용이 높아집니다. 1,000주를 매수한다고 가정하면, 리밸런싱을 할 때마다 수천 달러의 비용이 발생합니다. 귀하의 자본 기반은 귀하의 전략을 통해 창출되는 수익의 아주 작은 일부만을 거래 비용으로 차지할 만큼 높아야 합니다. 예를 들어, 자본금이 10만 달러이고 전략으로 매월 1%($1000)의 수익을 낸다면 모든 수익은 거래 비용으로 인해 잠식됩니다. 1,000주 이상에서 이익을 얻으려면 이 전략을 실행하려면 수백만 달러의 자본이 필요합니다.
최소 자산 한도는 주로 거래되는 주식 수에 따라 달라집니다. 하지만 최대 한도도 매우 높고, 롱-숏 균형 주식 전략은 우위를 잃지 않고 수억 달러를 거래할 수 있습니다. 이는 전략이 비교적 드물게 재조정되기 때문에 사실입니다. 총 자산 금액을 거래된 주식 수로 나누면 주당 달러 가치가 매우 낮아지고 거래량이 시장을 움직이는 것에 대해 걱정할 필요가 없습니다. 예를 들어 주식 1,000주를 거래한다고 하면, 그 금액은 1억 달러입니다. 매달 전체 포트폴리오를 재조정한다면 주식 하나당 한 달에 10만 달러만 거래하게 되는데, 이는 대부분 증권에 대해 상당한 시장 점유율을 확보하기에 충분하지 않습니다.