В этом примере показано, как провести обратный тест набора запасов с использованием анализа затрат на транзакции от исследовательской группы Kissell.
Анализ реализации инвестиционной стратегии в определенный день или диапазон дат.
Оценка затрат за прошлые периоды, влияющих на рынок, и соответствующих значений в долларах за указанные даты.
Анализ затрат на торговлю различными заказами на различные даты.
Для вызова кода примера введите edit KRGBackTestingExample.m в командной строке.
Извлеките данные о влиянии на рынок с FTP-сайта Kissell Research Group. Подключитесь к FTP-сайту с помощью ftp с именем пользователя и паролем. Перейдите к MI_Parameters и получить данные о влиянии на рынок в MI_Encrypted_Parameters.csv файл. miData содержит зашифрованную дату влияния на рынок, код и параметры.
f = ftp('ftp.kissellresearch.com','username','pwd'); mget(f,'MI_Encrypted_Parameters.csv'); close(f) miData = readtable('MI_Encrypted_Parameters.csv','delimiter', ... ',','ReadRowNames',false,'ReadVariableNames',true);
Создание объекта анализа затрат транзакции Kissell Research Group k. Укажите начальные параметры для даты, кода влияния на рынок и количества торговых дней.
k = krg(miData,datetime('today'),1,250);Загрузка данных примера TradeDataBackTest из файла KRGExampleData.mat, который входит в состав Toolbox™ Datafeed.
load KRGExampleData TradeDataBackTest
Описание данных примера см. в разделе Наборы данных исследовательской группы Kissell.
Определение количества запасов numRecords в портфеле.
numRecords = length(TradeDataBackTest.Symbol);
Предварительно распределить таблицу выходных данных o.
o = table(TradeDataBackTest.Symbol,TradeDataBackTest.Side, ... TradeDataBackTest.Date,NaN(numRecords,1),NaN(numRecords,1), ... 'VariableNames',{'Symbol','Side','Date','MI','MIDollar'});
Убедитесь, что количество общих ресурсов является положительным значением с помощью abs функция.
TradeDataBackTest.Shares = abs(TradeDataBackTest.Shares);
Преобразование торговой стратегии в процентное отношение к объемной торговой стратегии.
TradeDataBackTest.TradeTime = TradeDataBackTest.TradeTime ... .* TradeDataBackTest.ADV; TradeDataBackTest.POV = krg.tradetime2pov(TradeDataBackTest.TradeTime, ... TradeDataBackTest.Shares);
Оценка исторических затрат, влияющих на рынок, для каждого запаса в портфеле на различные даты с использованием marketImpact. Преобразование затрат, влияющих на рынок, из десятичных в местные доллары. Получение результирующих данных в таблице выходных данных o.
for ii = 1:numRecords k.MiDate = TradeDataBackTest.Date(ii); k.MiCode = TradeDataBackTest.MICode(ii); o.MI(ii) = marketImpact(k,TradeDataBackTest(ii,:)); MIDollars = (TradeDataBackTest.Shares(ii) * TradeDataBackTest.Price(ii)) ... * o.MI(ii)/10000 * TradeDataBackTest.FXRate(ii); o.MIDollar(ii) = MIDollars; end
Просмотрите первые три строки выходных данных.
o(1:3,:)
ans =
Symbol Side Date MI MIDollar
______ ____ __________ ____ ________
'A' 1.00 '5/1/2015' 1.04 103.91
'B' 1.00 '5/1/2015' 3.09 3864.44
'C' 1.00 '5/1/2015' 8.54 5335.03 Выходные данные содержат следующие переменные:
Символ запаса
Сторона
Историческая дата торговли
Стоимость влияния на рынок за прошлые периоды в базисных точках
Стоимость за прошлые периоды воздействия на рынок в местных долларах
[1] Кисселл, Роберт. «Создание динамических предпродажных моделей: за черным ящиком». Журнал торгов. Том 6, номер 4, осень 2011, стр. 8-15.
[2] Кисселл, Роберт. «TCA в инвестиционном процессе: обзор». Журнал индексного инвестирования. Том 2, номер 1, лето 2011, стр. 60-64.
[3] Кисселл, Роберт. Наука алгоритмической торговли и управления портфелем. Кембридж, Массачусетс: Elsevier/Академическая пресса, 2013.
[4] Чон, Грейс и Роберт Кисселл. «Применение транзакционных издержек в процессе оптимизации портфеля». Журнал торгов. Том 11, номер 2, весна 2016, стр. 11-20.