В этом примере показано, как провести задний тест на наборе запасов с помощью анализа операционных издержек от Kissell Research Group.
Анализируйте реализацию инвестиционной стратегии в определенный день или диапазон дат.
Оцените исторические затраты влияния на рынок и соответствующую долларовую стоимость для заданных исторических дат.
Анализируйте торговые издержки различных порядков на различные даты.
Чтобы получить доступ к примеру кода, введите 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);
Создайте аналитический объект k
операционных издержек Kissell Research Group. Задайте начальные установки для даты, кода влияния на рынок и номера торговых дней.
k = krg(miData,datetime('today'),1,250);
Загрузите данные в качестве примера TradeDataBackTest
из файла KRGExampleData.mat
, который включен с Datafeed Toolbox™.
load KRGExampleData TradeDataBackTest
Для описания данных в качестве примера смотрите Наборы данных Kissell Research Group.
Определите количество запасов 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] Kissell, Роберт. “Создавая Динамические Предторговые Модели: Вне Черного квадрата”. Журнал Торговли. Издание 6, Номер 4, Осень 2011 года, стр 8–15.
[2] Kissell, Роберт. “TCA в Инвестиционном Процессе: Обзор”. Журнал Инвестирования индекса. Издание 2, Номер 1, Лето 2011 года, стр 60–64.
[3] Kissell, Роберт. Наука об алгоритмической торговле и управлении портфелем. Кембридж, MA: нажатие Elsevier/Academic, 2013.
[4] Чанг, Грэйс и Роберт Кисселл. “Приложение Операционных издержек в Процессе Оптимизации Портфеля”. Журнал Торговли. Издание 11, Номер 2, Spring 2016, стр 11–20.