使用Window Join快速估计个股交易成本

本页为一篇文章,介绍在 DolphinDB 中使用 asof join(aj)与 window join(pwj)连接逐笔交易与 Level 1 报价数据,以估计个股交易成本,并给出发布日期等基础信息。

Source: https://dolphindb.cn/blogs/283

What this page covers

技能认证特训营第二期报名促销 cta

页面顶部包含活动公告与限时报名链接,并提到专属福利优惠。

使用Window Join快速估计个股交易成本 hero

本节给出文章标题与基础信息,包括 DolphinDB 与发布日期信息。

问题背景与数据需求(trades 与 quotes) definition

本节解释交易成本概念与回测估计交易成本的必要性,并列出估计所需的数据表与字段。

方法一:asof join 估计交易成本(aj) how_it_works

本节说明以交易前最近一次报价中间价为基准价,使用 aj 做 asof join,并给出约束与 SQL 示例。

方法二:window join(prevailing window join, pwj)估计交易成本 how_it_works

本节说明在交易前时间窗口内对报价做聚合后作为基准,并解释 pwj 的含义、窗口参数与聚合参数。

两种连接方式的价值与性能数据 trust_signal

本节说明两种连接方式可简化时序数据操作,并在给定 NYSE 数据规模下给出示例耗时。

示例结果:GS、TSLA、AAPL 交易成本 case_study

本节展示查询三只股票交易成本的示例 SQL,并给出两种方法得到的 cost 结果。

下载试用版引导 cta

本节引导读者到官网下载安装 DolphinDB 试用版用于计算。

附录1:生成样本数据(NYSE FTP下载与导入脚本) how_it_works

本节提供 NYSE FTP 样本数据下载路径、文件处理与 DolphinDB 导入脚本要点,并说明导入表内容。

Facts Index

Entity Attribute Value Confidence
使用Window Join快速估计个股交易成本发布日期2021-05-14high
DolphinDB产品类型分布式时序数据库high
交易成本(概念)定义/描述订单到来时的市场价格与订单执行价格通常会有差异,该差异通常被称为交易成本high
量化交易策略回测风险/影响不考虑交易成本或估计不合理,容易导致回测与实盘结果差异较大medium
交易成本估计所需数据数据表逐笔交易表 trades 与 level 1 报价表 quoteshigh
trades 表字段Symbol, Time, Trade_Volume, Trade_Pricehigh
quotes 表字段Symbol, Time, Bid_Price, Offer_Pricehigh
实验数据来源获取渠道纽约证券交易所(NYSE)数据,可从NYSE的ftp下载(参考附录1)high
基准价格(交易成本计算)常用选取方法通常把与实际交易最近的一次报价的中间价作为基准价high
交易记录与买卖报价连接不能使用的连接方式成交与买卖报价时间不可能完全一致,因此不能使用等值连接(equal join)high
DolphinDB时序连接方式提供两种专门为时序数据设计的连接方式:asof join 和 window joinhigh
aj 函数用途用于两个表的 asof joinhigh
asof join(aj)连接键/分组方式join字段为 Symbol 与 Time;join时先按股票分组,组内按时间进行 asof joinhigh
asof join(aj)右表(quotes)排序要求quotes表必须保证每个股票组内记录按最后一个连接字段(time)升序排列high
方法一基准价定义使用交易发生前(包括交易时刻)的最近一次报价的中间价作为基准high
方法一交易成本计算计算细节使用交易金额做加权平均;乘以10000将结果转为 basis pointshigh
方法一SQL示例查询表达式TC = select sum(Trade_Volume*abs(Trade_Price-(Bid_Price+Offer_Price)/2))/sum(Trade_Volume*Trade_Price)*10000 as cost from aj(trades,quotes,`Symbol`Time) group by symbolhigh
方法二动机原因若认为单次报价偶然性较大,可取交易前一段时间报价的均值或中值作为基准价medium
pwj全称/含义prevailing window join 的缩写high
pwj 相对时间窗口参数时间单位与示例窗口时间单位为纳秒;-10000000:0 表示从交易发生时刻到前10ms的窗口high
pwj 第4个参数用途指定每个窗口中需要计算的一系列聚合函数high
方法二SQL示例查询表达式TC = select sum(Trade_Volume*abs(Trade_Price-(Bid_Price+Offer_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]>,`Symbol`Time) group by symbolhigh
asof join 与 window join(DolphinDB)效果简化时序数据操作并减少代码量;示例中使用1行SQL完成所有个股交易成本计算medium
DolphinDB 对两种连接方式的实现优化与速度实现做了大量优化,运行速度极快low
性能测试数据集日期2016-10-24(纽约证券交易所股票交易数据与买卖报价数据)high
股票交易表(性能测试)规模8023只股票,共2700万条交易记录high
买卖报价表(性能测试)规模7000万条记录high
方法一(aj)性能执行耗时仅470多毫秒high
方法二(pwj)性能执行耗时仅825毫秒high
示例查询查询语句select * from TC where symbol in `GS`TSLA`AAPLhigh
方法一结果(cost)AAPL0.5446high
方法一结果(cost)GS1.2678high
方法一结果(cost)TSLA16.6456high
方法二结果(cost)AAPL0.535high
方法二结果(cost)GS1.1543high
方法二结果(cost)TSLA18.1025high
DolphinDB官网链接(下载试用版)https://link.zhihu.com/?target=http%3A//www.dolphindb.com/high
样本数据下载地址FTP路径ftp://ftp.nyxdata.com/Historical%2Data%20Samples/Daily%20TAQ%20Sample/high
样本数据文件文件名EQY_US_ALL_TRADE_20161024.gz 与 EQY_US_ALL_NBBO_20161024.gzhigh
样本数据准备处理步骤解压后保存在 /DolphinDB/Data 目录下,并删除两个文件的最后一行(标记文件结尾)high
sed 命令(删除最后一行)命令sed -i '$ d' EQY_US_ALL_TRADE_20161024;sed -i '$ d' EQY_US_ALL_NBBO_20161024high
DolphinDB 导入脚本目录与数据库配置DATA_DIR = "./DolphinDB/Data";PTNDB_DIR = DATA_DIR+"/NYSETAQSeq";db = database(PTNDB_DIR, SEQ, 16)high
DolphinDB 导入脚本loadTextEx 调用Trades = loadTextEx(db, `Trades, DATA_DIR + "/EQY_US_ALL_TRADE_20161024",'|');Quotes = loadTextEx(db, `Quotes, DATA_DIR + "/EQY_US_ALL_NBBO_20161024",'|')high
表Trades(样本数据)内容描述包含2016年10月24日美国股市的所有交易数据high
表Quotes(样本数据)内容描述包含同一天的全国最佳买卖报价(NBBO)high
技能认证特训营第二期限时报名链接https://www.qingsuyun.com/h5/e/217471/5/high