逐笔成交、委托数据的因子计算

3.2 逐笔成交数据的因子计算
逐笔成交数据包含的信息很丰富,可以构建很多中高频因子。以下为逐笔成交的样例数据:利用逐笔成交数据中的买卖订单号,可以将其合并为单笔订单成交数据,并从单笔订单的角度区分大小单和主买卖方向等。本节从单笔订单和主买卖角度出发,计算主动买入和卖出的单笔订单均价,并统计成交时间与开始委托下单时长超过1分钟的订单数量。3.2.1 单笔订单主动买入卖出均价
单笔订单主动买入、卖出均价为单笔主买、主卖订单的成交均价价格之和除以订单数量。n表示截至 t 时刻主买、主卖订单数量, avgTradePrice表示单笔订单主买、主卖的成交均价。def singleOrderAveragePrice(buyNo,sellNo,tradePrice,tradeQty,BSFlag="B"){if(BSFlag=="B"){totolMoney=groupby(sum,iif(buyNo>sellNo,tradePrice*tradeQty,0),buyNo).values()[1]totolqty=groupby(sum,iif(buyNo>sellNo,tradeQty,0),buyNo).values()[1]}else{totolMoney=groupby(sum,iif(buyNo<sellNo,tradePrice*tradeQty,0),sellNo).values()[1]totolqty=groupby(sum,iif(buyNo<sellNo,tradeQty,0),sellNo).values()[1]}return totolMoney\totolqty
}
res=select avg(singleOrderAveragePrice(BidApplSeqNum,OfferApplSeqNum,TradePrice,TradeQty,"B")) as ActBuySingleOrderAveragePriceFactor,
avg(singleOrderAveragePrice(BidApplSeqNum,OfferApplSeqNum,TradePrice,TradeQty,"S")) as ActSellSingleOrderAveragePriceFactor from 
tradeTB where  TradePrice>0 group by SecurityID cgroup by minute(DateTime) as minute order by  minute;
这里首先通过自定义函数实现单笔订单的成交均价,然后再计算单笔订单的成交均价。自定义函数中使用 groupby 函数分别计算单笔订单的成交金额和成交数量。最后通过 group by + cgroup by 计算每只股票当日最新一分钟单笔订单主动买入、卖出均价。计算结果如下:3.2.2 股票延时成交订单因子
延时成交挂单数和成交量,一定程度上能反应大单或者机构成交情况。本节统计从下单到成交的时间间隔超过1分钟的订单数和成交量。@state
def delayedTradeNum(bsFlag, flag, side){return iif(bsFlag==side && flag<=1, flag, 0).cumsum()}@state
def delayedTradeQty(bsFlag, flag, tradeQty, cumTradeQty, side){return iif(bsFlag==side && flag>1, tradeQty, iif(bsFlag==side && flag==1, cumTradeQty, 0)).cumsum()
}
///买方
///step 1,标记延时状态,计算笔订单的累计成交量
t1 = select SecurityID,DateTime,entrust.DateTime as time,"B" as bsFlag,tradeQty, cumsum(iif(DateTime-entrust.DateTime>60000,1,0)) as delayedTraderflag, cumsum(tradeQty) as cumTradeQty from lsj(trade, entrust, ['SecurityID', 'BidApplSeqNum'], ['SecurityID', 'ApplSeqNum']) where tradePrice>0 context by  SecurityID,BidApplSeqNum 
/////step 2,统计每只股票累计的延时成交订单数,和延时成交订单量
tt2 = select SecurityID,DateTime,delayedTradeNum(bsFlag, delayedTraderflag, "B") as DelayedTraderBuyOrderNum ,delayedTradeQty(bsFlag,delayedTraderflag, tradeQty, cumTradeQty, "B") as DelayedTraderBuyOrderQty from t1 context by SecurityID limit -1///卖方
///step 1,标记延时状态,计算笔订单的累计成交量
t1 = select SecurityID,DateTime,"S" as bsFlag,tradeQty, cumsum(iif(DateTime-entrust.DateTime>60000,1,0)) as delayedTraderflag, cumsum(tradeQty) as cumTradeQty from lsj(trade, entrust, ['SecurityID', 'OfferApplSeqNum'], ['SecurityID', 'ApplSeqNum']) where tradePrice>0 context by SecurityID, OfferApplSeqNum
/////step 2,统计每只股票累计的延时成交订单数,和延时成交订单量
t3 = select SecurityID,DateTime,delayedTradeNum(bsFlag, delayedTraderflag, "S") as DelayedTraderSellOrderNum ,delayedTradeQty(bsFlag,delayedTraderflag , tradeQty, cumTradeQty, "S") as DelayedTraderSellOrderQty from t1 context  by SecurityID limit -1t2=lsj(t2,t3,`SecurityID`DateTime)
下单信息记录在逐笔委托表里,如果统计下单到成交之间的时间间隔,则需要把逐笔成交表和逐笔委托表进行关联。这里首先通过左半连接 (lsj) 返回逐笔成交表中所有与逐笔委托表匹配的记录,如果逐笔委托表中有多条匹配记录(如上交所的下单和撤单记录),lsj 将会取第一条(下单时的订单记录)匹配记录。因此,lsj 可以把订单委托下单的时间以及下单量准确关联到成交记录中。DolphinDB 提供很多表关联函数,具体可参考:表连接 — DolphinDB 2.0 documentation计算股票延时成交订单因子的步骤为,首先根据成交表的买卖单号与委托表的订单委托号建立连接,并计算改订单的累计延时成交次数和订单的累计成交量;其次通过自定义函数,计算股票的延时成交订单数以及延时成交的订单量。3.3 逐笔委托数据的因子计算
Level 2 行情逐笔委托数据包含所有的委托订单信息(除了上交所的市价单(即时成交)和部分撤单,深交所的撤单),本节根据买卖订单的委托信息,计算深交所股票的委买委卖金额和撤单金额指标数据。逐笔委托数据数据样例如下:3.3.1 委买委卖金额
委托买卖金额是对一段时间内委托订单的买卖方向的资金总量进行统计。由于深交所的市价订单的价格在逐笔委托表里的价格不是一个成交价格(一般标记为0)。因此统计计算委托金额时,我们需要在逐笔成交记录中找到最近的成交价格来作为其近似值。defg calcSZOrderValue(side,price,orderQty,tradePrice,orderType,bsFlag){price_=iif(orderType =="50",price,NULL).nullFill(tradePrice)return sum(iif(side==bsFlag,price_*orderQty,NULL)).nullFill(0)
}
res=select calcSZOrderValue(side,price,orderQty,tradePrice,orderType,"B") as BuyOrderValue, 
calcSZOrderValue(side,price,orderQty,tradePrice,orderType,"S") as SellOrderValue
from aj(entrustTB,tradeTB,`SecurityID`ApplSeqNum) group by SecurityID,bar(DateTime,1m) as DateTime
这里通过 aj(asof join)把逐笔成交里的最新价格关联到逐笔成交中;对市价订单,以获取最新的成交价格作为当前市价委托单的委托价格,最后计算股票每分钟内的买卖委托金额。3.3.2 买卖撤单金额
深交所的撤单标记记录在逐笔成交表中,撤单时的价格一般标记为0,而委托价格记录在逐笔委托表中,因此计算买卖方撤单金额时需要将逐笔成交表和逐笔委托表进行关联。trade = select SecurityID,DateTime, max(BidApplSeqNum,OfferApplSeqNum) as ApplSeqNum,TradeQty from tradeTB where  ExecType=52
entrust = select  SecurityID,ApplSeqNum, Price,Side from entrustTB
res = select  sum(iif(side=="B",Price*TradeQty,NULL)).nullFill(0) as buywithdrawOrderValue,
sum(iif(side=="S",Price*TradeQty,NULL)).nullFill(0) as sellwithdrawOrderValue 
from lsj(trade,entrust,`SecurityID`ApplSeqNum) group by SecurityID,bar(DateTime,1m) as DateTime
这里通过 lj(left join)分别把买卖撤单的委托价格关联到撤单信息表中,然后计算每只股票每分钟的买卖撤单金额。

参考:https://gitee.com/dolphindb/Tutorials_CN/blob/master/Level-2_stock_data_processing.md#332-%E4%B9%B0%E5%8D%96%E6%92%A4%E5%8D%95%E9%87%91%E9%A2%9D

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/756815.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能合约语言(eDSL)—— 使用rust实现eDSL的原理

为理解rust变成eDSL的实现原理&#xff0c;我们需要简单了解元编程与宏的概念,元编程被描述成一种计算机程序可以将代码看待成数据的能力&#xff0c;使用元编程技术编写的程序能够像普通程序在运行时更新、替换变量那样操作更新、替换代码。宏在 Rust 语言中是一种功能&#x…

机器人离散化阻抗控制

机器人离散化阻抗控制是一种控制策略&#xff0c;它结合了阻抗控制的思想与离散化方法&#xff0c;以实现对机器人运动与外力之间动态关系的精细调节。这种控制方法旨在使机器人在与环境交互时能够表现出期望的阻抗特性&#xff0c;从而实现对接触力和位置的精确控制。 在离散…

opencv逐帧获取视频图片

背景 由于我要做一个深度学习方向的计算机视觉项目&#xff0c;需要一些数据集来进行训练&#xff0c;我便想尝试捕获视频中的图片用来标注。 注意事项 如果视频中的场景单一&#xff0c;那么使用该视频获取的数据集训练出的模型面对其他场景的泛化能力就会受到限制。为了提…

自动化单元测试 Automatic Test Generation

自动化单元测试 Automatic Test Generation Parasoft C/Ctest / wing / VectorCast https://patricegodefroid.github.io/public_psfiles/talk-issta2010.pdf 一、自动化测试技术 软件研发生命周期的各个阶段都有自动化测试技术的存在&#xff0c;并且对提升测试效率有着至…

STM32—控制蜂鸣器(定时器)

目录 1 、 电路构成及原理图 2 、编写实现代码 main.c tim_irq.c 3、代码讲解 4、烧录到开发板调试、验证代码 5、检验效果 此笔记基于朗峰 STM32F103 系列全集成开发板的记录。 1 、 电路构成及原理图 定时器中断是利用定时器的计数功能&#xff08;向上计数或向下计…

虚拟DOM是什么以及React 和Vue中有何区别

虚拟 DOM&#xff08;Virtual DOM&#xff09;是一种编程概念&#xff0c;其中 UI 的状态被保存在内存中&#xff0c;作为一个虚拟的节点树&#xff08;或者说是 JavaScript 对象&#xff09;&#xff0c;然后通过一个叫做 “对比&#xff08;diffing&#xff09;” 的过程来更…

算法---二分查找练习-3(山脉数组的顶峰索引)

山脉数组的顶峰索引 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址&#xff1a;点这里 2. 讲解算法原理 初始化两个指针 left 和 right&#xff0c;分别指向数组的起始位置和结束位置。 进入循环&#xff0c;循环条件为 left < right。 在每次循环中&…

Visual Studio - 添加快捷键图标

Visual Studio - 添加快捷键图标 1. Text Editor Toolbar Options -> Add or Remove Buttons -> Customize2. Toolbars3. Commands -> Debug4. Add Command...References 1. Text Editor Toolbar Options -> Add or Remove Buttons -> Customize 2. Toolbars B…

机器学习-05-特征工程

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中特征工程部分。 参考 机器学习之特征工程详解 特征工程&#xff08;Feature Engineering&#xff09; 特征工程是指使用专业的背景知识和技巧处理数据&#xff0c;使得特征能在机器学习算法上发生更好的…

Python数据分析与可视化笔记 三 了解数据 数据分类 集中趋势 离散程度 相关性测量 数据缺失 噪声 离群点

数据分为定性数据和定量数据。 定性数据包括两个基本层次&#xff0c;即定序(ordinal)和定义(nominal)层次。定序变量是指该变量只是对某些特性的“多少”进行排序&#xff0c;但各等级之间的差别不确定。例如评价一个事物有“好”、“一般”、“不好”三个等级&#xff0c;但各…

深入剖析Apache Kafka Partition:结构、策略与影响

引言 Apache Kafka作为一款高性能、分布式的消息系统&#xff0c;其出色的吞吐量和持久化能力在大数据领域备受青睐。而Partition作为Kafka架构中的重要基石&#xff0c;不仅决定了系统的可扩展性和并行处理能力&#xff0c;而且对消息的有序性、可用性和容错性起到关键作用。…

认识DDR3

DDR&#xff1a;双倍速率同步动态随机存储器&#xff0c;特点为掉电无法保持数据&#xff0c;时钟上升沿和下降沿都会传输数据&#xff0c;突发长度伪8&#xff0c; 它的存储方式可以通过行地址&#xff0c;列地址&#xff0c;和bank数来确定&#xff0c; DDR的容量为&#x…

Lvs+keepalived+nginx搭建高可用负载均衡集群

环境配置 master主机192.168.199.149&#xff0c;虚拟IP192.168.199.148 back备机192.168.199.150 真实服务器1 192.168.199.155 真实服务器2 192.168.199.156 关闭防火墙和selinux master配置&#xff08;149&#xff09; 添加虚拟IP ip addr add 192.168.199.148/24 …

手机备忘录隐藏功能:生日纪念日重要日子倒计时天数和提醒

在日常使用手机时&#xff0c;我们经常会用到备忘录、便签或笔记等记事工具来记录生活的点点滴滴&#xff0c;无论是购物清单、工作任务还是学习笔记。然而&#xff0c;你可能不知道&#xff0c;手机备忘录中其实隐藏着一些非常实用的功能&#xff0c;比如记录生日、纪念日、重…

Java设计模式 | 简单工厂模式

概述 需求 设计一个咖啡店点餐系统设计一个咖啡类&#xff08;Coffee&#xff09;&#xff1b;并定义其两个子类&#xff08;美式咖啡AmericanCoffee和拿铁咖啡LatteCoffee&#xff09;&#xff1b;再设计一个咖啡店类&#xff08;CoffeeStore&#xff09;&#xff0c;其具备…

12350安全生产举报热线系统解决方案

一、建设背景 1. 安全生产的重要性 在当今社会&#xff0c;安全生产是企业和社会发展中至关重要的一环。随着工业化的推进和技术的不断创新&#xff0c;各种生产活动中潜在的安全隐患也随之增加。为了及时发现和解决这些问题&#xff0c;各省市纷纷设立了安全生产举报热线。在…

Node.js常用命令:了解Node.js的核心命令和用法

学习目标&#xff1a; 理解Node.js和npm的概念及其在开发中的作用&#xff1b;掌握Node.js的核心命令&#xff0c;包括node、npm、npx等&#xff1b;学会使用node命令来执行JavaScript文件和模块&#xff1b;熟悉npm命令&#xff0c;包括安装、更新、卸载依赖包等操作&#xf…

openssl3.2 - exp - aes-128-cbc

文章目录 openssl3.2 - exp - aes-128-cbc概述笔记openssl 命令行实现简单直白的实现简单直白的实现 - 测试效果简单直白的实现 - 测试工程 周全灵活的实现周全灵活的实现 - 测试效果周全灵活的实现 - 测试工程 END openssl3.2 - exp - aes-128-cbc 概述 想将工程中用到的字符…

【Ubuntu】常用命令

一般操作 pwd&#xff08;present working directory&#xff09; 显示当前的工作目录/路径。 cd (change directory) 改变目录&#xff0c;用于输入需要前往的路径/目录。 有一些特殊命令也很常用 : 解释 前往同一级的另一个目录 cd ../directory name cd .. 表示进入上…

技术周刊 116 期:Visual Copilot、INP、Kimi 支持 200 万字上下文、Grok 开源、Figure 01、Open Sora 开源

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;话梅排骨 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 大家好&#xff0c;我是童欧巴。欢迎来到前端食堂技术周刊&#xff0c;我们先来看下…