用高频交易的方式对TWAP算法优化(TWAP算法、算法实现、高频交易、冰山算法)

article/2025/9/26 18:55:19

用高频交易的方式对TWAP算法进行优化。

以下内容主要基于执行算法的讨论。

什么是TWAP算法(时间加权平均价格)?

TWAP交易时间加权平均价格Time Weighted Average Price 模型是把一个母单的数量平均地分配到一个交易时段上。该模型将交易时间进行均匀分割,并在每个分割节点上将拆分的订单进行提交。如需要在一个小时内购买1000万股“平安银行”,TWAP算法会将1000万股的订单平均拆分成数个小订单在60分钟内进行交易以避免一个大订单对市场造成剧烈波动。

使用简单基础的TWAP算法在实际交易中遇到流动性一般或者盘子相对较小的交易标的时往往会造成比较高的冲击成本,并且容易暴露交易行为。

 

TWAP优化

 

拆单优化

 

首先,将一个大的Order订单拆分成若干个小订单(Order1 Order2 Order3... Ordern

 

接着把拆出来的子订单Order1 再做进一步拆分,根据订单需要完成的进度或者订单的冲击接受程度分别拆分成三部分进行交易:被动单、主动单和扫单,其中被动单主要是获得更好的收益为目的,剩下两个以完成交易为主要目的。

被动单:以挂单等待成交达到最优交易成本为主。

主动单:以对手价格进行挂单达到快速完成交易的效果。

扫单:以更激进的方式挂对手价的订单进行委托交易,可能会直接造成短时间内ask或bid的委托中上下多个档位的订单全部被己方全部打掉。

 

关于被动单、主动单以及扫单的比例确定需要根据实际的交易标的进行确定,不同时间不同交易标的的流动性差别很大,对被动单的成交概率影响也比较大。以下提供些个人观点:

 

  1. 根据最近的历史交易数据可以把一段时间内更小时间切片交易的波动性或者交易量按不同等级进行划分,将总时间内的交易按等级归类后跟模型需要下单的量进行相关比例的划分。
  2. 根据一定时间内将bid档位成交的订单全部归为主动成交也就是己方的挂单成交,根据比例确定模型需要对订单的划分比例。
  3. 扫单会对交易造成比较大的波动,可以考虑将前两部分为完成的交易到最后直接进行扫单。

 

算法拆单还有两个重要的因素:订单的市场参与度;测单率。

 

 

在实际算法模型中可对上述两个步骤进行多次叠加或拆分以达到订单量、冲击成本以及完成率三者的平衡。

 

报单优化

 

下图是“平安银行”和“贵州茅台”某一时刻的交易报价五档委托报价,其中“平安银行”图3的委托报价是连续的,“贵州茅台”图4的委托报价存在空档,存在0.55空档区间。(1069.60-1049.05)

 

 

             

所有交易的报价委托都可以分为连续和不连续(空档)两种情况,针对两种情况进行区别报单。

报价连续:

假设:某时刻需要卖出一定量的“平安银行”其交易委托如图3,将卖盘定义为ask委托,卖盘定义为bid委托。

前期我们将需要交易的订单进行了划分(被动单、主动单、扫单)三部分。

●被动单

挂单等待成交,如图3在bid1档位14.59元报价位有718手委托量,避免造成比较大冲击要确保己方委托不能超过在ask1挂单量委托量,由于市场是不停变换可以根据多个变量确定挂单的数量:

挂单量=(bid1委托量-对方委托保留量)*市场参与度

 

当然针对交易活跃以及对方委托的实际情况,可以考虑在ask不同档位挂单。

 

●主动单及扫单

主动单一般按对方委托进行报单此时目的为了尽快成交,如在ask队列进行报单时直接按bid1档位的价格发送委托订单,需要注意的是如图3如果直接按14.59元71800股在ask队列报价会导致bid1档位直接全部成交价格会导致价格下跌到14.58造成明显冲击,建议保留一定的量。

 

扫单是以一种更加激进的方式进行报单直接根据对方委托队列进行多档位的全部成交式的报单主要目的是为了完成交易。该方式会导致非常高的冲击成本,如可以同时在ask队列按照bid队列中不同档位价格和量挂出多笔相等价格和量的委托。这种情况下需要考虑对方委托的档位以及交易时间控制,冲击成本高。

 

报价不连续:

假设:某时刻需要卖出一定量的“贵州茅台”其交易委托如图4,将卖盘定义为ask委托,卖盘定义为bid委托。报价不连续的情况下报单的区别主要是挂单方式不同,因为ask1和bid1的价格存在一定的价差如图4。(1069.60-1049.05=0.55)

在实际报单中可以选择在55个档位之间挂单,但实际成交中约接近bid1价格的委托越容易成交,如果交易指令完成时间充裕可在价差区间内可以采用递增式挂单获得比较优的成交价格,相反如果时间紧迫可以采用递减式挂单。

 

 

 


http://chatgpt.dhexx.cn/article/sx4cxVR4.shtml

相关文章

算法交易简介以及TWAP、VWAP算法原理

算法交易视频:算法交易视频 1,交易成本: 交易成本分成两类,一类是显性成本,包括佣金(包括券商佣金(券商收取),交易经手费(交易所收取,千分之0.0…

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

为什么要引入TWAP和 VWAP? 为了评估策略的资金容量,我们对M.trade模块里买入点和卖出点这两个参数进行了更丰富的扩展,支持了策略能够按更丰富的算法交易价格(WAP)进行撮合。 如果资金是10万的话,那么在开…

平均价格算法:TWAP vs. VWAP

时间加权平均价格 (TWAP) 和成交量加权平均价格 (VWAP) 算法应用不同的方法来计算资产价格,这是所有去中心化金融 (DeFi) 原语的组成部分。 在本文中,我们介绍了 TWAP 和 VWAP 算法之间的差异,解释了它们如何在区块链环境中为资产定价&#…

json对象中的数组怎么转化为json字符串

注意:去掉数组下标,才有效? JSON是一种数据交换格式,与XML数据格式相比更加方便使用,互联网中的URL请求接口大部分都是已JSON数据格式进行交互,对接数据解析也是非常方便容易,在字符串与JSON对…

json对象转对象数组

对象的两种取值方式 let obj {name: wan}; console.log(obj.name); //wan这是最普通的一种方式,还有一种方式我们用的不太多,就是使用[]包住属性名取值 let obj {name: wan}; console.log(obj[name]); //wan将对象转化为数组 let obj {未完成:5, 已…

JSON对象/数组与JSON字符串之间的相互转换

文章目录 前言JSON介绍如何判断JS数据类型JSON数组转化为JSON字符串JSON对象转化为JSON字符串JSON字符串转化为JSON数组/对象注意点 前言 这里先介绍一个个人觉得很好用的谷歌浏览器的功能:snippet 就是类似收藏夹,平常你可能会用到的调试有关的东西都可…

json转数组(json数组对象)

哪位知道json格式怎么转换为word?哪位知道json格式 使用office工具进行转换 jquery如何读取并显示JSON数组 1、新建一个html文件,命名为test。html,用于讲解ajax怎么获取json数据并输出。 2、在test。html中,使用script标签加载j…

将数组转换为JSON数据

如何将数组转换为JSON数据?下面本篇就来给大家介绍一下将数组转换为JSON对象的方法,希望对大家有所帮助。 方法一:使用Object.assign() Object.assign()方法将枚举的所有属性的值从源对象(一个或多个)复制到目标对象 …

js中json对象转换为array

今天遇到了一个将json对象格式转换为js数组的问题,网上down了一下,发现只是对json进行了一些操作。在此写了一个小小的代码,以供有需要的人使用。 开门见山,先声明一个json对象数组,在此说一下,js中数组使用 " [ …

java json对象和json数组对象的处理

在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML、JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好,下面先看…

数组转JSON json对象 json字符串

入参格式JSON对象与JSON字符串的区别 1、Object.assign() Object.assign() 方法将所有可枚举(Object.propertyIsEnumerable() 返回 true)的自有(Object.hasOwnProperty() 返回 true)属性从一个或多个源对象复制到目标对象&#…

js 数组转json,json转数组

//数组转json串 var arr [1,2,3, { a : 1 } ]; JSON.stringify( arr );//json字符串转数组 var jsonStr [1,2,3,{"a":1}]; JSON.parse( jsonStr );

Java利用fastjson解析复杂嵌套json字符串、json数组;json字符串转Java对象,json数组转list数组

文章目录 前言一、什么是JSON对象?二、什么是json字符串?二、什么是JSON数组?三、复杂、嵌套的json字符串四、json字符串转换4.1 简单json字符串转换为java对象4.2 简单json字符串数组转换为list数组4.3 复杂嵌套json字符串数组转换为Java对象…

将嵌套的json对象转化为json数组(python列表推导式)

需求说明 想将一个json文件录入MongoDB,如下图所示。 但是原文件是嵌套json对象的形式,如果直接导入MongoDB,会整体变成一个Document: 注:MongoDB中的Document相当于SQL中Row的概念。 而我希望一个Document对应一个…

Oracle 基础总结:日期函数专题

Oracle 基础总结:日期函数专题 日期函数:1、SYSDATE2、日期函数:(1) MONTHS_BETWEEN(日期1,日期2):返回两个日期相差的月数。(2) ADD_MONTHS(日期,数值&#…

numtodsinterval mysql用法_Oracle函数 - 日期函数详解

Oracle中的时间类型只有date和TIMESTAMP,TIMESTAMP是比date更精确的类型。日期时间函数用于处理时间类型的数据,Oracle以7位数字格式来存放日期数据,包括世纪、年、月、日、小时、分钟、秒,并且默认日期显式格式为“DD-MON-YY”。…

常用Oracle日期函数及聚合函数

1、常用Oracle日期函数 (1)CURRENT_DATE CURRENT_DATE是一个SQL标准函数,返回当前日期(不带时间),可以在SELECT语句中使用。例如: 1 SELECT CURRENT_DATE FROM DUAL; 返回当前日期&#xff…

Oracle数据库之日期函数

今天给大家介绍一下oracle数据中的日期函数的用法。废话不多说,我们看一下oracle给我们提供了那些函数? 1.sysdate   用途:获取当前系统时间。 2.to_date(字符类型,日期类型) 用途:将字符类型转化成日期类型的函数,…

Oracle日期函数总结

1.日期和字符转换函数用法:(to_char,to_date,to_namber) 使用to_date函数将字符转换成数字。 使用to_char函数对日期的转换,并也可以对数字转换。 使用to_namber函数将字符转换成日期 格式:必须包含在单…

ORACLE之日期函数

日期函数: 运算规律: 日期数字 日期 日期-数字 日期 日期-日期 数字(天数) -- 查询当前日期: SELECT SYSDATE FROM DUAL;-- 查询一百天前的日期时间 SELECT (SYSDATE-100) FROM DUAL; -- 在指定日期上加上指定月数…