这个例子展示了如何使用来自Kissell研究集团的交易成本分析来确定买卖不平衡。不平衡是指根据当天的实际市场情况和特定的交易期间,买入和卖出的交易量之间的差异。正的不平衡表示股票的买入压力,负的不平衡表示卖出压力。成本指数帮助投资者了解交易成本环境如何影响市场中的订单流。该指数可以是反映市场动向和价值的基于业绩的指数,比如标准普尔500指数,也可以是反映市场不确定性的波动指数。
不平衡份额的值为x这样
在哪里
心肌梗死是股票交易的市场影响成本。估计的交易成本代表股票相对于基础指数价格变动的增量价格变动。体积为篮子中某只股票的实际日成交量。阿德为篮子中某只股票的日均成交量。价格是篮子里股票的价格。方程中的其他变量为:
——价格波动。
对订单流的价格敏感。
-订购大小形状。
——波动性的形状。
-体积率形状百分比。
——价格的形状。
-对市场产生永久性影响的百分比。永久性影响是由于交易的信息内容所产生的不可避免的影响成本。
-暂时影响市场的百分比。暂时的影响取决于交易策略。暂时性的冲击是由于投资者的流动性需求而产生的。
地点:
TotalCost-股票的成交量加权平均价格相对于开盘价的变化。
β-β。
IndexCost-成交量加权平均价格相对于指数开盘价的变化。指数成本使用基础指数和贝塔值根据市场运动调整价格。
在本例中,可以使用当前或历史数据运行此代码。当前数据包括从开盘时间到当前时间的价格。历史数据使用的是全天的价格。历史成本使用特定地区和日期的市场影响参数。因此,历史成本会从一个记录变化到另一个记录。
对于当前成本索引,加载示例表TradeDataCurrent
从文件KRGExampleData.mat
.对于历史成本索引,需要加载示例表TradeDataHistorical
从文件KRGExampleData.mat
.这个例子计算当前的成本指数。
要访问示例代码,输入编辑KRGCostIndexExample.m
在命令行。
运行此代码后,可以使用Bloomberg提交执行命令®为例。
此示例需要一个Optimization Toolbox™许可证。有关背景信息,请参见最优化理论概述(优化工具箱).
从Kissell Research Group FTP站点检索市场影响数据。连接到FTP站点使用ftp
函数带有用户名和密码。导航到MI_Parameters
的文件夹并检索市场影响数据MI_Encrypted_Parameters.csv
文件。miData
包含加密的市场影响日期、代码和参数。
f = ftp (“ftp.kissellresearch.com”,“用户名”,“pwd”);mget (f,“MI_Encrypted_Parameters.csv”);miData = readtable(“MI_Encrypted_Parameters.csv”,“分隔符”,...',',“ReadRowNames”假的,“ReadVariableNames”,真正的);
创建一个Kissell Research Group交易成本分析对象k
.指定日期、市场影响代码和交易天数的初始设置。
k =库尔德斯坦地区政府(miData datetime (“今天”), 1250);
加载示例数据TradeDataCurrent
,它包含在dataffeed工具箱™中。计算投资组合中的股票数量。
负载KRGExampleData.matTradeDataCurrentTradeData = TradeDataCurrent;numStocks =身高(TradeData);
有关示例数据的描述,请参见Kissell研究小组数据集.
为优化定义函数迭代的最大次数。集“MaxIterations”
使优化可以多次迭代求解非线性方程组。
选择= optimoptions (“fsolve”,“MaxIterations”, 4000);
确定总成本和beta成本。计算出对市场产生初步影响的成本估算。确定初始体积x0
.
totalCost = TradeData。VWAP。/ TradeData。开放- 1;indexCost = TradeData。β。*...(TradeData。我ndexVWAP。/ TradeData。IndexOpen - 1);miCost = totalCost - indexCost;sideIndicator =符号(miCost);x0 = 0.5 *交易量;
创建一个存储所有输出数据的表。首先,添加以下变量:
象征
——股票代码
日期
——交易日期
一边
——边
TotalVolume
——交易量
TotalCost
-交易总成本
IndexCost
——成本指数
costIndexTable =表;costIndexTable。象征=Tr一个deD一个t一个.象征; costIndexTable.Date = TradeData.Date; costIndexTable.Side = sideIndicator; costIndexTable.TotalVolume = TradeData.Volume; costIndexTable.TotalCost = totalCost; costIndexTable.IndexCost = indexCost;
使用一个为
循环计算投资组合中每只股票的成本指数。每只股票可能有不同的市场影响代码和日期。使用costIndexExampleEq
包含待解非线性方程的函数。来访问代码costIndexExampleEq
函数,输入编辑KRGCostIndexExample.m
.
将这些变量添加到输出表中:
不平衡
——不平衡
ImbalancePctADV
-不平衡作为百分比的平均日量
ImbalancePctDayVolume
-不平衡的百分比,以日量
BuyVolume
——购买体积
SellVolume
——销售数量
心肌梗死
——市场影响成本
ExcessCost
——多余的成本
为我= 1:numStocks为每个股票设置对象的MiCode和MiDatek.MiCode = TradeData.MICode(我);k.MiDate = TradeData.Date(我);为每只导致目标市场的股票计算股份%影响成本。在本例中,x是导致的股份(不平衡)数量MI影响成本,导致一个市场的股票数量MI的影响成本%。这里用abs(MI),因为市场影响%成本总是正的。如果市场影响成本为0.0050,那么% fsolve试图找出股票x的数量,以便市场%冲击公式返回0.0050。请注意,fsolve使用的是基点成本。x = fsolve(@(x) costIndexExampleEq(x,miCost(i),TradeData(i,:),k),...x0 (i)、选择);不平衡必须在0和实际交易量之间。x = max (min (x, TradeData.Volume(我)),0);根据x重新计算成交量和股份的百分比。TradeData.POV (i) = x / TradeData.Volume(我);TradeData.Shares (i) = x;以十进制值计算新的成本。mi = marketImpact (k, TradeData(我,:))/ 10000;%不平衡是股票金额指定的买入或卖出% sideIndicator。不平衡= sideIndicator(i) * x;计算买卖数量。%知道:%% Volume = buyVolume + sellVolume;%失衡= buyVolume - sellVolume;%解决buyVolume和sellVolumebuyVolume = (TradeData.Volume(i) +失衡)/ 2;= (TradeData.Volume(i) -失衡)/ 2;填写输出表costIndexTable.Imbalance(我,1)=不平衡;costIndexTable.ImbalancePctADV(我,1)=不平衡/ TradeData.ADV(我);costIndexTable.ImbalancePctDayVolume(我,1)=不平衡/ TradeData.Volume(我);costIndexTable.BuyVolume(我,1)= buyVolume;costIndexTable.SellVolume(我,1)= sellVolume;costIndexTable.MI(i,1) = mi * sideIndicator(i);costIndexTable.ExcessCost(i,1) = totalCost(i) - mi - indexCost(i);结束
在输出数据中显示第一个库存的不平衡数量。
costIndexTable.Imbalance (1)
ans = -8.7894 e + 04
不平衡的负值表示抛售压力。决定是否在投资组合中购买、持有或出售该股票。
以上计算方法请与Kissell Research Group联系。
[1] Kissell,罗伯特。算法交易与投资组合管理的科学.马萨诸塞州剑桥:爱思唯尔/学术出版社,2013。
[2] Malamut,罗伯特。“交易调度的多周期优化技术”。2002年4月在QWAFAFEW纽约会议上的发言。
[3] Kissell, Robert和Morton Glantz。最优交易策略.纽约:AMACOM, Inc., 2003。
库尔德斯坦地区政府
|marketImpact
|optimoptions
(优化工具箱)|fsolve
(优化工具箱)