深圳自适应网站建设,网站建设需要下载哪些软件有哪些,网站建设需要交文化建设税吗,网站开发会遇到的问题交易本身对市场会产生影响#xff0c;尤其是短时间内大量交易#xff0c;会影响金融资产的价格。一个订单到来时的市场价格和订单的执行价格通常会有差异#xff0c;这个差异通常被称为交易成本。在量化交易的策略回测部分#xff0c;不考虑交易成本或者交易成本估计不合理…交易本身对市场会产生影响尤其是短时间内大量交易会影响金融资产的价格。一个订单到来时的市场价格和订单的执行价格通常会有差异这个差异通常被称为交易成本。在量化交易的策略回测部分不考虑交易成本或者交易成本估计不合理容易导致回测和实盘结果有较大的差异。本文将介绍如何在分布式时序数据库DolphinDB中如何使用asof join和window join快速估计每个股票的交易成本。需要的数据包括含有逐笔交易的交易表trades和包含level 1报价的quotes表。它们分别包含以下字段tradesSymbol股票代码Time时间Trade_Volume交易量Trade_Price交易价格quotesSymbol股票代码Time时间Bid_Price买方报价Offer_Price卖方报价实验中用到的数据都是从纽约证券交易所获取大家可以从NYSE的ftp下载。参考附录1。计算股票的交易成本我们需要找到一个基准价格通常会把与实际交易最近的一次报价的中间价作为基准价。这意味着要对交易记录表和买卖报价表进行连接。但是成交和买卖报价的发生时间不可能完全一致因此不能使用常用的等值连接equal join。DolphinDB提供了两种专门为时序数据设计的连接方式asof join和window join。我们将使用这两种连接方式来计算股票的交易成本。第一种方法使用asof join使用交易发生前包括交易时刻的最近一次报价的中间加作为基准。使用交易金额做加权平均。乘上10000是为了把结果转化成basis points。函数aj用于两个表的asof join前两个参数分别是两个需要join的数据表第三个参数是join的字段。join的时候首先按股票分组每个组之内再按照时间行进asof join。右表数据quotes表必须保证每个股票组内的记录是按照最后一个连接字段time升序排列的。TC select sum(Trade_Volume*abs(Trade_Price-(Bid_PriceOffer_Price)/2))/sum(Trade_Volume*Trade_Price)*10000 as cost from aj(trades,quotes,SymbolTime) group by symbol第二种方法使用window join如果你觉得单次报价的偶然性比较大我们可以取交易前一段时间的报价的均值或中值作为基准价。下面的例子取交易前10ms的报价均值作为基准。pwj是prevailing window join的缩写该函数比起aj多了两个参数。新增的第三个参数指定相对的时间窗口。因为时间单位是纳秒-10000000:0 表示从交易的发生时刻到前10ms的窗口。新增的第4个参数是每个窗口中需要计算的一系列聚合函数。TC select sum(Trade_Volume*abs(Trade_Price-(Bid_PriceOffer_Price)/2))/sum(Trade_Volume*Trade_Price)*10000 as cost from pwj(trades,quotes,-10000000:0,[avg(Offer_Price) as Offer_Price, avg(Bid_Price) as Bid_Price],SymbolTime) group by symbolasof join和window join是DolphinDB专门为时序数据设计的连接方式不仅简化了时序数据的操作大大减少了代码量。以上面的交易成本计算为例仅仅使用了1行SQL代码就完成了所有个股的交易成本计算。DolphinDB对两种连接方式实现做了大量的优化运行速度极快。我们以2016年10月24日纽约证券交易所的股票交易数据和买卖报价数据为例。股票交易表有8023只股票共2700万条交易记录买卖报价表有7000万条记录。如此庞大的数据量使用第一种方法DolphinDB执行耗时仅470多毫秒使用第二种方法DolphinDB执行耗时仅825毫秒速度极快。最后我们看看结果是不是make sense。观察一下三个股票的交易成本GS高盛TSLA特斯拉AAPL苹果。select * from TC where symbol in GSTSLAAAPL第一种方法的结果symbol cost
AAPL 0.5446
GS 1.2678
TSLA 16.6456第二种方法的结果symbol cost
AAPL 0.535
GS 1.1543
TSLA 18.1025感兴趣的朋友可以到官网下载DolphinDB database 试用版计算股票的交易成本。附录1.生成样本数据访问ftp://ftp.nyxdata.com/Historical%2Data%20Samples/Daily%20TAQ%20Sample/并且下载EQY_US_ALL_TRADE_20161024.gz和EQY_US_ALL_NBBO_20161024.gz两个文件然后把它们解压保存在/DolphinDB/Data目录下把两个文件的最后一行删除因为最后一行是用来标记文件结尾的。sed -i $ d EQY_US_ALL_TRADE_20161024
sed -i $ d EQY_US_ALL_NBBO_20161024接着执行下面的脚本。DATA_DIR ./DolphinDB/Data
PTNDB_DIR DATA_DIR/NYSETAQSeq
db database(PTNDB_DIR, SEQ, 16)Trades loadTextEx(db, Trades, DATA_DIR /EQY_US_ALL_TRADE_20161024”,|)
Quotes loadTextEx(db, Quotes, DATA_DIR /EQY_US_ALL_NBBO_20161024,|)表Trades包含2016年10月24日美国股市的所有交易数据。表Quotes包含同一天的全国最佳买卖报价NBBO。