exponenta event banner

Оптимизация портфеля с использованием факторных моделей

В этом примере показаны два подхода к использованию факторной модели для оптимизации распределения активов в рамках структуры средних отклонений. Многофакторные модели часто используются в моделировании рисков, управлении портфелем и атрибуции эффективности портфеля. Многофакторная модель уменьшает масштабы инвестиционной вселенной и отвечает за описание большей части случайности рынка [1]. Факторы могут быть статистическими, макроэкономическими и фундаментальными. В первом подходе в этом примере статистические коэффициенты строятся из доходности основных средств и оптимизируются непосредственно по факторам. Во втором подходе используется данная информация коэффициента для вычисления ковариационной матрицы возврата актива, а затем используется Portfolio для оптимизации распределения основных средств.

Загрузить данные

Загрузите моделируемый набор данных, который включает в себя суммарную сумму возврата основных средств p = 100 основных средств и 2000 ежедневных наблюдений.

clear;
load('asset_return_100_simulated.mat');
[nObservation, p] = size(stockReturns)
nObservation = 2000
p = 100
splitPoint = ceil(nObservation*0.6);
training = 1:splitPoint;
test = splitPoint+1:nObservation;
trainingNum = numel(training);

Визуализируйте кривую собственного капитала для каждого запаса. Для этого примера постройте график первых пяти акций.

plot(ret2tick(stockReturns{training,1:5}, 'method', 'simple')*100); hold off;
xlabel('Timestep');
ylabel('Value');
title('Equity Curve');
legend(stockReturns.Properties.VariableNames(1:5), 'Location',"bestoutside",'Interpreter', 'none');

Figure contains an axes. The axes with title Equity Curve contains 5 objects of type line. These objects represent Asset1, Asset2, Asset3, Asset4, Asset5.

Оптимизация распределения основных средств непосредственно по факторам с помощью структуры определения на основе проблем

Для коэффициентов можно использовать статистические коэффициенты, извлеченные из ряда возврата основного средства. В этом примере для извлечения статистических факторов используется анализ основных компонентов (PCA) [1]. Затем эту факторную модель можно использовать для решения задачи оптимизации портфеля.

В факторной модели p-доходность актива может быть выражена как линейная комбинация k-доходности коэффициента, ra = мка + F rf + δ a, где k < < p. В системе средних отклонений портфельный риск

Вар (RP) =Var (raTwa) =Var ((μa +F rf +εa) Twa) =waT (FΣfFT+D) wa=wfT Σf wf+waT D wa, с wf=FTwa,

где:

Rp - возврат портфеля (скаляр).

ra - возврат основных средств.

мка - среднее значение доходности основных средств.

F - факторная нагрузка с размерами p-by-k.

rf - коэффициент возврата.

αa - это идиосинкратический возврат, связанный с каждым активом.

wa - вес основных средств.

wf - вес фактора.

Startf - ковариация возвращаемых множителей.

D - дисперсия идиосинкратических возвращений.

Параметры ra, wa, pcia, αa являются p-by-1 векторы столбцов, rfand wf являются k-by-1 векторы-столбцы, Starta является p-by-p матрицей, Startk - k-by-k матрицей, а D - p-by-p диагональной матрицей.

Поэтому задача оптимизации средней дисперсии формулируется как

макс. maxaT wa, s.t. FTwa = wf, wfT, wf + waT D wa≤trisk,0≤w≤1, eTwa = 1.

В p-мерном пространстве, образованном p-доходами активов, PCA находит наиболее важные k-направления, которые фиксируют наиболее важные вариации в данных доходах p-активов. Обычно k меньше p. Поэтому, используя PCA, можно разложить p доходность актива на k факторов, что значительно уменьшает размерность задачи. K основных направлений интерпретируются как факторные нагрузки, а оценки из разложения интерпретируются как факторные возвраты. Дополнительные сведения см. в разделе pca (Toolbox™ статистики и машинного обучения). В этом примере используйте k = 10 как число основных компонентов. Кроме того, можно найти значение k, определив пороговое значение для общей дисперсии, представляемой как верхние k главных компонентов. Обычно 95% - приемлемый порог.

k = 10;
[factorLoading,factorRetn,latent,tsq,explained,mu] = pca(stockReturns{training,:}, 'NumComponents', k);
disp(size(factorLoading))
   100    10
disp(size(factorRetn))
        1200          10

На выходе p-by-k factorLoading, каждый столбец является основным компонентом. Вектор возврата актива на каждом шаге времени разлагается на эти k размерных пространств, где k < < p. factorRetn является измерением trainingNum by-k.

Оценка ковариационной матрицы коэффициента с возвращениями коэффициента.

covarFactor = cov(factorRetn);

Можно реконструировать p доходности актива для каждого наблюдения, используя каждую k доходность коэффициента, следуя за ra =

Выполните реконструкцию всего 1200 наблюдений для обучающего набора.

reconReturn = factorRetn*factorLoading' + mu;
unexplainedRetn = stockReturns{training,:} - reconReturn;

Есть необъяснимые возвраты (a) активов, потому что оставшиеся (p-k) основные компоненты отбрасываются. Необъяснимые возвраты основных средств можно отнести к специфическим для основных средств рискам, представленным как D.

unexplainedCovar = diag(cov(unexplainedRetn));
D = diag(unexplainedCovar);

Для построения переменных, цели и ограничений для задачи можно использовать основанную на задачах структуру определений из Toolbox™ Оптимизация: max мкаT wa, s.t. FTwa=wf, wfT Σf wf+waT D wa≤trisk, eTwa=1,0≤w≤1. Структура определения на основе проблем позволяет определять переменные и символически выражать цели и ограничения. Можно добавить другие ограничения или использовать другую цель в зависимости от конкретной проблемы. Дополнительные сведения см. в разделе Первый выбор подхода на основе проблем или подхода на основе решателей.

targetRisk = 0.007;  % Standard deviation of portfolio return
tRisk = targetRisk*targetRisk;  % Variance of portfolio return
meanStockRetn = mean(stockReturns{training,:});

optimProb = optimproblem('Description','Portfolio with factor covariance matrix','ObjectiveSense','max');
wgtAsset = optimvar('asset_weight', p, 1, 'Type', 'continuous', 'LowerBound', 0, 'UpperBound', 1);
wgtFactor = optimvar('factor_weight', k, 1, 'Type', 'continuous');

optimProb.Objective = sum(meanStockRetn'.*wgtAsset);

optimProb.Constraints.asset_factor_weight = factorLoading'*wgtAsset - wgtFactor == 0;
optimProb.Constraints.risk = wgtFactor'*covarFactor*wgtFactor + wgtAsset'*D*wgtAsset <= tRisk;
optimProb.Constraints.budget = sum(wgtAsset) == 1;

x0.asset_weight = ones(p, 1)/p;
x0.factor_weight = zeros(k, 1);
opt = optimoptions("fmincon", "Algorithm","sqp", "Display", "off", ...
    'ConstraintTolerance', 1.0e-8, 'OptimalityTolerance', 1.0e-8, 'StepTolerance', 1.0e-8);
x = solve(optimProb,x0, "Options",opt);
assetWgt1 = x.asset_weight;

В этом примере максимизируется доходность портфеля для целевого риска. Это нелинейная проблема программирования с квадратичным ограничением и вы используете fmincon для решения этой проблемы.

Проверьте распределение основных средств, превышающее 5%, чтобы определить, какие основные средства имеют большие инвестиционные веса.

percentage = 0.05;
AssetName = stockReturns.Properties.VariableNames(assetWgt1>=percentage)';
Weight = assetWgt1(assetWgt1>=percentage);
T1 = table(AssetName, Weight)
T1=7×2 table
     AssetName      Weight 
    ___________    ________

    {'Asset9' }    0.080054
    {'Asset32'}     0.22355
    {'Asset47'}     0.11369
    {'Asset57'}    0.088321
    {'Asset61'}    0.068845
    {'Asset75'}    0.063648
    {'Asset94'}     0.22163

Оптимизация распределения основных средств с помощью Portfolio Класс с информацией о факторах

Если у вас уже есть матрица ковариации коэффициента нагрузки и коэффициента от какого-либо другого анализа или стороннего поставщика, вы можете использовать эту информацию для вычисления ковариационной матрицы актива, а затем непосредственно запустить оптимизацию средней дисперсии с помощью Portfolio класс. Напомним, что портфельный риск - это Var (Rp) = Var ((мка + F rf + αа) Twa) = waT (F, ffFT + D) wa, так что можно получить ковариацию доходности актива по Starta = F, FFT + D.

Использовать estimateFrontierByRisk в Portfolio класс для решения задачи оптимизации: max pciaT wa, s.t. waT Starta wa≤trisk,0≤wa≤1, eTwa = 1. Portfolio поддержка класса имеет множество встроенных ограничений, которые можно использовать для описания проблемы портфеля и оценки риска и отдачи на эффективной границе. Дополнительные сведения см. в разделе Набор портфолио для оптимизации с использованием объекта портфолио.

covarAsset = factorLoading*covarFactor*factorLoading'+D;
port = Portfolio("AssetMean", meanStockRetn, 'AssetCovar', covarAsset, 'LowerBound', 0, 'UpperBound', 1, ...
    'Budget', 1);
assetWgt2 = estimateFrontierByRisk(port, targetRisk);

AssetName = stockReturns.Properties.VariableNames(assetWgt2>=percentage)';
Weight = assetWgt2(assetWgt2>=percentage);
T2 = table(AssetName, Weight)
T2=7×2 table
     AssetName      Weight 
    ___________    ________

    {'Asset9' }    0.080061
    {'Asset32'}     0.22355
    {'Asset47'}     0.11369
    {'Asset57'}    0.088314
    {'Asset61'}    0.068847
    {'Asset75'}    0.063644
    {'Asset94'}     0.22163

Результаты оптимизации портфеля

Столы T1 и T2 показать идентичное распределение для распределений основных средств, превышающих 5%. Поэтому в этом примере оба подхода к оптимизации портфеля с использованием факторной модели позволяют получить идентичные веса основных средств.

Визуализация производительности оптимизированного распределения в течение периода тестирования.

retn = stockReturns{test, :}*assetWgt1;
plot(ret2tick(retn, 'method', 'simple')*100); hold off;
xlabel('Timestep');
ylabel('Value');
title('Portfolio Equity Curve');

Figure contains an axes. The axes with title Portfolio Equity Curve contains an object of type line.

В этом примере показано, как извлекать статистические коэффициенты из доходности основных средств с помощью PCA, а затем использовать эти факторы для оптимизации портфеля на основе факторов. В этом примере также показано, как использовать эти статистические факторы с Portfolio класс. На практике этот пример можно адаптировать для включения некоторых измеримых рыночных факторов, таких как промышленные факторы или доходность ETF от различных секторов, для описания случайности на рынке [1]. Можно определить пользовательские ограничения для весов факторов или активов с высокой гибкостью, используя структуру определения на основе проблем из Toolbox™ Оптимизация. Кроме того, можно работать непосредственно с Portfolio для выполнения оптимизации портфеля с различными встроенными ограничениями.

Ссылка

  1. Меуччи, А. «Моделирование рынка». Распределение рисков и основных средств. Берлин: Спрингер, 2009.

См. также

| | | | | | | | |

Связанные примеры

Подробнее

Внешние веб-сайты