时间加权平均价格算法(TWAP)和成交量平均算法(VWAP)在量化回测的应用

本文介绍了在量化回测中,时间加权平均价格(TWAP)和成交量加权平均价格(VWAP)算法的应用。这两种算法用于减少大额订单对市场价格的影响,通过分批执行交易降低交易成本。通过回测,表明使用WAP价格能有效评估策略的资金容量,并且对策略的收益率影响较小。文章还详细说明了TWAP和VWAP的计算方法、成交逻辑以及在回测平台上的设置和使用方法。
Python3.8

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

为什么要引入TWAP和 VWAP?

为了评估策略的资金容量,我们对M.trade模块里买入点和卖出点这两个参数进行了更丰富的扩展,支持了策略能够按更丰富的算法交易价格(WAP)进行撮合。

如果资金是10万的话,那么在开盘买入基本上没有什么问题,如果资金量是300万、或者1000万呢?开盘如果只买入几只股票的话,本身的交易行为就会改变市场状态,冲击成本巨大。因此我们支持了算法交易里TWAP和VWAP。

TWAP (Time Weighted Average Price),时间加权平均价格算法,是一种最简单的传统算法交易策略。TWAP模型设计的目的是使交易对市场影响减小的同时提供一个较低的平均成交价格,从而达到减小交易成本的目的。在分时成交量无法准确估计的情况下,该模型可以较好地实现算法交易的基本目的。

VWAP (Volume Weighted Average Price), 成交量加权平均价格。VWAP策略即是一种拆分大额委托单,在约定时间段内分批执行,以期使得最终买入或卖出成交均价尽量接近该段时间内整个市场成交均价的算法交易策略。

上述两种方式是最常用的算法交易执行方式。其实在我们实际交易的过程中也会发现,如果是一笔较大的订单,我们肯定不会直接全部下单,而是把订单进行拆分,逐渐成交。因此如果我们在回测的过程中也可以使用TWAP和VWAP的价格进行撮合,最直接的目的就是能够检验我们策略的资金容量,如果按照TWAP和VWAP进行撮合以后,收益率变动不大,那我们对策略的资金容量会有很大信心,即策略不再是只能管理几十万,管理上百万、上千万是没有问题的。

我们在stockranker模板策略的基础上,用多组WAP价格进行回测,并和默认回测价格做了一个对比,回测结果如下表所示:

买点卖点夏普比率年化收益总收益最大回撤
openclose1.91108.29%314.1%47.39%
twap_1twap_81.87110.21%321.51%46.48%
twap_2twap_71.797.49%273.53%45.07%
twap_3twap_61.78101.26%287.48%43.16%
twap_4twap_51.8398.75%278.14%43.11%
twap_9twap_101.7286.66%234.89%40.13%
vwap_1vwap_81.87110.77%323.69%45.46%
vwap_2vwap_71.74100.74%285.53%44.63%
vwap_3vwap_61.78103.06%294.2%43.63%
vwap_4vwap_51.7895.54%266.4%43.55%
vwap_9vwap_101.8191.45%251.72%37.73%

可以看到使用WAP价格回测和使用默认的open买入close卖出回测相比,各项指标变化不大,这也一定程度上表明单一策略的资金容量其实比我们想象地要大很多。

字段查看

最近我们升级了数据文档,WAP相关的文档见:WAP算法交易字段,截图如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PqOvr9os-1606876933758)(upload://8KAWOhZNmaS1MfaNGY2oeZ3L7cG.png)]

设置方法

在回测模块右侧属性栏中,可以看到有买入点和卖出点的参数设置:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ziyctSpn-1606876933763)(upload://rMcSsoaEo4Vv7G4z4nTzFm3upQS.png)]

下拉即可选择想要的WAP价格。

字段介绍

  • 我们支持了TWAP,VWAP 两种WAP价格

  • 每个字段对应了1-11 共11种时间规则指标,具体时间规则如下:

    字段时间规则明细
    twap_1/vwap_1早盘前5分钟9:30到9:35
    twap_2/vwap_2早盘前15分钟9:30到9:45
    twap_3/vwap_3早盘前30分钟9:30到10点
    twap_4/vwap_4早盘前60分钟9:30到10:30
    twap_5/vwap_5尾盘前60分钟14:00到15:00
    twap_6/vwap_6尾盘前30分钟14:30到15:00
    twap_7/vwap_7尾盘前15分钟14:45到15:00
    twap_8/vwap_8尾盘前5分钟14:55到15:00
    twap_9/vwap_9上午9:30到11:30
    twap_10/vwap_10下午13:00到15:00
    twap_11/vwap_11全天上午+下午
  • 每一个字段对应了买卖两个方向

  • 每一个字段又对应了两种数据:价格和成交量

综上,字段示例如下:

字段解释
wap_1_twap_buy早盘前5分钟买单的twap价格
wap_1_twap_sell早盘前5分钟卖单的twap价格
wap_1_vwap_buy早盘前5分钟买单的vwap价格
wap_1_vwap_sell早盘前5分钟卖单的vwap价格
wap_1_buy_volume早盘前5分钟买单的成交量(经调整后)
wap_1_sell_volume早盘前5分钟卖单的成交量(经调整后)

以上字段均储存在 bar1d_wap_CN_STOCK_A表 和 bar1d_wap_CN_STOCK_A_adj表 中,如果要手动核查下撮合价格的话,可以访问这两个表来获取股票的TWAP,VWAP价格以及成交量。(其中第一个表是真实的加权价格数据,后一个表是后复权的价格加权数据,两表中的字段相同)。

DataSource('bar1d_wap_CN_STOCK_A_adj').read(start_date='2017-12-28',end_date='2017-12-28',instruments=['000002.SZA'],fields=['date','instrument','wap_1_buy_volume', 'wap_1_sell_volume', 'wap_1_twap_buy','wap_1_twap_sell', 'wap_1_vwap_buy', 'wap_1_vwap_sell'])

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mRxKXTQq-1606876933765)(upload://9e3mKpp7aBFI5wBLegTzU30iwEK.png)]

也可以查询到表中所有字段如下:

DataSource('bar1d_wap_CN_STOCK_A_adj').read(start_date='2017-12-28',end_date='2017-12-28',instruments=['000002.SZA']).columns

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yL83KWws-1606876933767)(upload://mSObLRaktH31OSvDPiXD6YndxLs.png)]

我们选择买入点为twap_1,卖出点为twap_8,回测价格类型选择后复权,回测结果部分截图如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kcBsR8ze-1606876933769)(upload://2O4TVUcb1yuNQYkO6WLiBsvXvgt.png)]

可以看到002801.SZA的买入价为128.17,000503.SZA的卖出价为319.99。

我们再从bar1d_wap_CN_STOCK_A_adj 表(如果回测价格类型选择的是真实价格,则用bar1d_wap_CN_STOCK_A 表)中读出这两只股票的wap_1_twap_buy和wap_8_twap_sell价格:

DataSource('bar1d_wap_CN_STOCK_A_adj').read(start_date='2016-12-30',end_date='2016-12-30',instruments=['002801.SZA','000503.SZA'],fields=['date','instrument','wap_1_twap_buy','wap_8_twap_sell'])

在这里插入图片描述

可以看到表中的价格和回测中的成交价是一致的,回测时确实使用了我们选择的WAP价格进行撮合成交。

计算方法和成交逻辑

  • 成交量:
    如果对应的是买,将涨停的分钟k线去除,不参与计算,即非涨停的量
    如果对应的是卖,将跌停的分钟k线去除,不参与计算,即非跌停的量
    例如:
    假设000002股票在上午【2h】成交100手,涨停;下午【1h】打开涨停(非跌停),成交200手,收盘【1h】跌停,成交50手。
    则,买入经调整的成交量是250 ,卖出经调整的成交量是 300

600339.SHA在2016-12-30这天盘中涨停,我们读这天的价量数据可以看到,当天的总成交量为15055283.0

DataSource('bar1d_CN_STOCK_A').read(start_date='2016-12-30',end_date='2016-12-30',instruments=['600339.SHA'])

在这里插入图片描述

而我们读取这个股票这一天的全天的buy_volume,可以看到交易量为8937100.0,去除了涨停的量:

DataSource('bar1d_wap_CN_STOCK_A_adj').read(start_date='2016-12-30',end_date='2016-12-30',instruments=['600339.SHA'],fields=['date','instrument','wap_11_buy_volume'])

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Giua37VL-1606876933771)(upload://kBJJb7bAxtiWygnw3OUD7k2fW3Y.png)]

  • 平均价格:
    如果对应的是买,将涨停的分钟k线去除
    如果对应的是卖,将跌停的分钟k线去除
    TWAP:
    Time Weighted Average Price, 是时间加权平均价格。
    计算公式为 mean(Pm,n) ,其中n为k线数量,Pm为典型价格(等于 (high+low+close)/3)。
    VWAP:
    Volume Weighted Average Price, 是交易量加权平均价格。
    计算公式为 (close_0 * volume_0 + close_1 * volume_1 +close_2 * volume_2 +…+close_59* volume_59) / (volume_0+volume_1+…+volume_59) 。

  • 成交逻辑:
    实际成交量会受到我们选择的买点卖点的价格类型所对应的的成交量的影响,例如:
    假设某天A股票成交1万手,而我们想买入2万手,假如买入点选择close,则实际可以成交1万手;假如买入点选择twap1,而当天wap_1_buy的成交量为500手,则实际只会成交500手。

更新后的WAP功能相比之前做了更进一步的细化和优化,考虑到了真实交易的涨跌和跌停情形,因此计算出来的算法交易平均价格更精准和符合实际,进一步提高了回测的准确性。欢迎大家使用和反馈意见。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

本课程主要讲解如下内容:引言NumPy多维数组ndarrayNumPy创建数组1、KNN算法背景02、KNN中距离度量03、KNN分类算法流程04、手写KNN分类算法05、KNN算法流程 06 量化交易  量化交易是指以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种“大概率”事件以制定策略,极大地减少了投资者情绪波动的影响,避免在市场极度狂热或悲观的情况下作出非理性的投资决策。 定量投资传统的定性投资本质上来说是相同的,二者都是基于市场非有效或弱有效的理论基础。两者的区别在于定量投资管理是“定性思想的量化应用”,更加强调数据。量化交易具有以下几个方面的特点: 1、纪律性。根据模型的运行结果进行决策,而不是凭感觉。纪律性既可以克制人性中贪婪、恐惧侥幸心理等弱点,也可以克服认知偏差,且可跟踪。 2、系统性。具体表现为“三多”。一是多层次,包括在大类资产配置、行业选择、精选具体资产三个层次上都有模型;二是多角度,定量投资的核心思想包括宏观周期、市场结构、估值、成长、盈利质量、分析师盈利预、市场情绪等多个角度;三是多数据,即对海量数据的处理。 3、套利思想。定量投资通过多面、系统性的扫描捕捉错误定价、错误估值带来的机会,从而发现估值洼地,并通过买入低估资产、卖出高估资产而获利。 4、概率取胜。一是定量投资不断从历史数据中挖掘有望重复的规律并加以利用;二是依靠组合资产取胜,而不是单个资产取胜。 量化投资技术包括多种具体方法,在投资品种选择、投资时机选择、股指期货套利、商品期货套利、统计套利算法交易等领域得到广泛应用。在此,以统计套利算法交易为例进行阐述。 1、统计套利 [1]  统计套利是利用资产价格的历史统计规律进行的套利,是一种风险套利,其风险在于这种历史统计规律在未来一段时间内是否继续存在。 统计套利的主要思路是先找出相关性most好的若干对投资品种,再找出每一对投资品种的长期均衡关系(协整关系),当某一对品种的价差(协整方程的残差)偏离到一定程度时开始建仓,买进被相对低估的品种、卖空被相对高估的品种,等价差归均衡后获利了结。股指期货对冲是统计套利较常采用的一种操作策略,即利用不同国家、地区或行业的指数相关性,同时买入、卖出一对指数期货进行交易。在经济全球化条件下,各个国家、地区行业股票指数的关联性越来越强,从而容易导致股指系统性风险的产生,因此,对指数间的统计套利进行对冲是一种低风险、高收益的交易方式。 2、算法交易。 算法交易又称自动交易、黑盒交易或机器交易,是指通过设计算法,利用计算机程序发出交易指令的方法。在交易中,程序可以决定的范围包括交易时间的选择、交易的价格,甚至包括most后需要成交的资产数量。 算法交易的主要类型有: (1) 被动型算法交易,也称结构型算法交易。该交易算法除利用历史数据估计交易模型的关键参数外,不会根据市场的状况主动选择交易时机交易的数量,而是按照一个既定的交易方针进行交易。该策略的的核心是减少滑价(目标价与实际成交均价的差)。被动型算法交易most成熟,使用也most为广泛,如在国际市场上使用most多的成交加权平均价格VWAP)、时间加权平均价格TWAP)等都属于被动型算法交易。 (2) 主动型算法交易,也称机会型算法交易。这类交易算法根据市场的状况作出实时的决策,判断是否交易、交易的数量、交易的价格等。主动型交易算法除了努力减少滑价以外,把关注的重点逐渐转向了价格趋势预上。 (3) 综合型算法交易,该交易是前两者的结合。这类算法常见的方式是先把交易指令拆开,分布到若干个时间段内,每个时间段内具体如何交易由主动型交易算法进行判断。两者结合可达到单纯一种算法无法达到的效果。 算法交易的交易策略有三:一是降低交易费用。大单指令通常被拆分为若干个小单指令渐次进入市场。这个策略的成功程度可以通过比较同一时期的平均购买价格成交量加权平均价来衡量。二是套利。典型的套利策略通常包含三四个金融资产,如根据外汇市场利率平价理论,国内债券的价格、以外币标价的债券价格、汇率现货及汇率远期合约价格之间将产生一定的关联,如果市场价格与该理论隐含的价格偏差较大,且超过其交易成本,则可以用四笔交易来确保无风险利润。股指期货的期限套利也可以用算法交易来完成。三是做市。做市包括在当前市场价格之上挂一个限价卖单或在当前价格之下挂一个限价买单,以便从买卖差价中获利。此外,还有更复杂的策略,如“基准点“算法被交易员用来模拟指数收益,而”嗅探器“算法被用来发现most动荡或most不稳定的市场。任何类型的模式识别或者预模型都能用来启动算法交易。  量化交易一般会经过海量数据仿真模拟操作等手段进行检验,并依据一定的风险管理算法进行仓位资金配置,实现风险most小化收益most大化,但往往也会存在一定的潜在风险,具体包括: 1、历史数据的完整性。行情数据不完整可能导致模型与行情数据不匹配。行情数据自身风格转换,也可能导致模型失败,如交易流动性,价格波动幅度,价格波动频率等,而这一点是量化交易难以克服的。 2、模型设计中没有考虑仓位资金配置,没有安全的风险评估预防措施,可能导致资金、仓位模型的不匹配,而发生爆仓现象。 3、网络中断,硬件故障也可能对量化交易产生影响。 4、同质模型产生竞争交易现象导致的风险。 5、单一投资品种导致的不可预风险。 为规避或减小量化交易存在的潜在风险,可采取的策略有:保证历史数据的完整性;在线调整模型参数;在线选择模型类型;风险在线监规避等。 量化策略是指使用计算机作为工具,通过一套固定的逻辑来分析、判断决策。量化策略既可以自动执行,也可以人工执行。 [2]  一个完整的量化策略包含哪些内容? 一个完整的策略需要包含输入、策略处理逻辑、输出;策略处理逻辑需要考虑选股、择时、仓位管理止盈止损等因素。 选股 量化选股就是用量化的方法选择确定的投资组合,期望这样的投资组合可以获得超越大盘的投资收益。常用的选股方法有多因子选股、行业轮动选股、趋势跟踪选股等。 1 多因子选股 多因子选股是most经典的选股方法,该方法采用一系列的因子(比如市盈率、市净率、市销率等)作为选股标准,满足这些因子的股票被买入,不满足的被卖出。比如巴菲特这样的价值投资者就会买入低PE的股票,在PE归时卖出股票。 2 风格轮动选股 风格轮动选股是利用市场风格特征进行投资,市场在某个时刻偏好大盘股,某个时刻偏好小盘股,如果发现市场切换偏好的规律,并在风格转换的初期介入,就可能获得较大的收益。 3 行业轮动选股 行业轮动选股是由于经济周期的的原因,有些行业启动后会有其他行业跟随启动,通过发现这些跟随规律,我们可以在前者启动后买入后者获得更高的收益,不同的宏观经济阶段货币政策下,都可能产生不同特征的行业轮动特点。 4 资金流选股 资金流选股是利用资金的流向来判断股票走势。巴菲特说过,股市短期是投票机,长期看一定是称重机。短期投资者的交易,就是一种投票行为,而所谓的票,就是资金。如果资金流入,股票应该会上涨,如果资金流出,股票应该下跌。所以根据资金流向就可以构建相应的投资策略。 5 动量反转选股 动量反转选股方法是利用投资者投资行为特点而构建的投资组合。索罗斯所谓的反身性理论强调了价格上涨的正反馈作用会导致投资者继续买入,这就是动量选股的基本根据。动量效应就是前一段强势的股票在未来一段时间继续保持强势。在正反馈到达无法持续的阶段,价格就会崩溃归,在这样的环境下就会出现反转特征,就是前一段时间弱势的股票,未来一段时间会变强。 6 趋势跟踪策略 当股价在出现上涨趋势的时候进行买入,而在出现下降趋势的时候进行卖出,本质上是一种追涨杀跌的策略,很多市场由于羊群效用存在较多的趋势,如果可以控制好亏损时的额度,坚持住对趋势的捕捉,长期下来是可以获得额外收益的。 择时 量化择时是指采用量化的方式判断买入卖出点。如果判断是上涨,则买入持有;如果判断是下跌,则卖出清仓;如果判断是震荡,则进行高抛低吸。  常用的择时方法有:趋势量化择时、市场情绪量化择时、有效资金量化择时、SVM量化择时等。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值