高频直播笔记

计算五分钟流动性因子

  • 分钟数据降采样到五分钟
  • 计算五分钟最短路径
  • 一小时累计成交额
  • 一小时累计最短路径
  • 5分钟流动性 = 成交额 / 最短路径

如何生成高频因子

  • 分钟数据得到小时/日线因子
  • 日线因子放入之前的回测框架

高频脚本功能

  • 时序
  • 截面
  • 兼容性
  • 增量计算

案例

  • illq = 1h成交额 / 1h最短路径
  • 高频化:
  • 1分钟 - 5分钟
  • 5m最短路径 - 标准化
  • 求和 - 1h最短路径
  • illq = 1h成交额 / 1h最短路径

这里的最短路径要了解一下

魔改

  • 上涨
  • 放量
  • 筛选出一小时内满足要求的五分钟数据,基于这些数据计算illq

代码

  • 股票的逻辑为:

1 日线数据,和指数数据合并,得到完整的市场交易日期

2 计算因子,resample选股周期,比如一个月,按照因子排序得到选股数据

3 选股,绘制资金曲线

  • 高频币的逻辑为:

1 分钟数据

2 创建基准数据

  • 读取币种数据

get_file_in_folder得到symbol_list

symbol_list中存储的是文件夹中的所有币种

  • 基准数据的创建逻辑

给定开始 结束时间,默认结束时间为当前时间

给定周期 1h 1D,在config里面factor_period

min_bench 分钟级别基准数据

min_bench 包括candle_begin_time 以及time_group

time_group是对分钟数据的一个概括,如果周期为1h,2017-01-01 00:00:00 2017-01-01 00:01:00 2017-01-01 00:02:00 2017-01-01 00:03:00 2017-01-01 00:04:00的time_group都为2017-01-01 00:00:00,如果周期为1D,time_group为2017-01-01

period_bench 以factor_period为单位,将所有的日期都为一列罗列出来

  • 计算高频因子

首先从factors中获取所有因子,存储在列表stg_file

factors_list中存储因子的绝对路径

判断是现货还是合约 candel_type

calculate_by_code 输入币种代码,输出dataframe

  • calculate_by_code

计算每个币的高频因子

首先读取ftr文件为mdf

然后令period_bench 的时间范围框定为mf的时间范围

合并min_bench和mdf,时间以min_bench为准,这里类似与股票和指数合并,目的是为了处理没有交易的时间,是的时间统一化

这里采用增量计算,增量计算的意思是,如果这个因子已经被计算了,那么就不会再计算第二次,每次计算出来的因子都在data/分钟因子那里

基于的时间基准来自于:period_list,min_bench的所有group_time

那么period_bench怎么用的?

如果因子已经被计算,那么读取数据,读取数据的时候,主要看已经计算出来的因子时间是不是包括所有的时间(小时/day)

如果因子没有被计算,则创建文件夹,(这里没有做计算因子的操作)

然后计算高频因子,高频因子的计算在cal_min_factors,这个函数在factors下面的因子中实现。

new_period_list表示的是那些没有被计算因子的时间点

  • 将每个币计算出来的数据合并,然后按照时间 symbol排序,symbol是啥
  • 遍历因子,处理数据,在界面范围计算因子
  • 根据因子对数据分组
  • 对每组数据

将因子保存在'分钟因子下面'

  • 因子的计算在factors下面的因子文件中实现
  • cal_min_factors

参数:mdf、ddf、date

mdf分钟级别的数据,包含数据

ddf 小时或者天级别的数据,这个就是所有的小时或者天,只有时间信息

date:需要计算的时间

dm_df:筛选出mdf当中时间为date的数据

进行resample,这里对数据resample成5分钟或者10分钟数据

计算因子

  • 整理数据

首先合并得到的所有数据,将数据按照日期 币种的顺序进行排序all_factor_data。

遍历所有因子,对于每一个因子,找到这个因子的所有相关因子,比如一个因子,可能计算了它的5min 10min数据,作为小因子

如果小因子的数量不为0,也就是说这个因子已经被计算出来了,那么调用process_all_data,这个函数输出为所有因子数据,输出也为所有因子数据,不知道干嘛的,可以看看,注释说是计算截面范围的因子。

  • 分组保存数据

根据币代码对数据分组,每组都包含一个币种类,包含这个币的名字和币的数据

然后找到所有的因子,如果这个币的因子数量为0,说明这个币没有因子,跳过

将这个币的时间 币种 因子选出来,作为一个新的dataframe

构建因子数据的保存路径:现货 / 合约 选币周期 因子名字 币种,这里的因子名字是大因子的名字,不是小因子

如果路径存在:读取路径 为 fdf,补充,去重

如果路径不存在:创建dataframe为fdf,将时间 币种 因子 都放进去

  • 最后到底在干嘛???

之前计算出了每个币种在选币周期得到的因子

然后对每个因子,计算截面范围上的因子,

接着对数据按照币种分类,对于每个币的每个大因子

将这个信息都存储在分钟因子文件中。

理解

  • 因子的构造:首先拥有的是分钟级别的数据,首先需要计算因子,然后选股,计算因子需要一个日期,选股需要一个日期
  • 比如这里,我们采用了以日为单位的选股,但是直接采用分钟数据进行选股需要很大的计算量,难么就先用五分钟的数据,然后用5分钟的数据计算日线因子,以计算出来的日线因子作为选股标准。

代码

  • 读取准备数据

读取原始文件

创建benchmark,这里的benchmark很有意思,我记得股票数据中的benchmark是指数数据,包含市场交易所有天数,这里的benchmark的作用也是为了衡量市场交易的所有时间,这个benchmark一共分为两个:period_bench和min_bench,这里的period_bench 包含是时间区间内的所有选股周期,比如小时,那么period_bench就包含了所有的小时数据,比如天,那么period_bench就包含了所有的天数据。min_bench是在时间区间内的所有分钟,每个分钟对应了选股周期的时间,如果选股周期是小时,那么就是时间区间内所有分钟和小时的对应关系,如果选股周期是天,那么就是时间区间内所有分钟和天的对应关系。

  • 导入每个因子

首先遍历factors文件夹下的所有文件,得到所有因子

  • 遍历每个币,并行或串行

遍历每个币,计算因子,这里用到了calculate_by_code函数,并行或串行

这里需要对calculate_by_code做进一步研究

对calculate_by_code的猜测:首先将分钟数据降采样为五分钟数据,然后根据选股周期,计算因子,排序,选出n只币,计算资金曲线

calculate_by_code的输入为虚拟币代码,输出为dataframe:

时间(选币周期1h / 1d) 币的代码 因子值(5min / 10min流动性指标)

那么可以推测出calculate_by_code的作用是计算出单个币种的选股周期的因子

在这个函数之后,还需要做的是:让所有的币的数据合并在一起,按照因子排序,选出前n只币,然后计算资金曲线

  • 最终整理数据

首先将上一步得到的dataframe都合并在一起

然后对每一个大因子,计算截面因子

接着按照币种和打因子,将信息存储起来。

calculate_by_code

  • 读取分钟数据

首先读取币种的历史数据,并且将其和min_bench合并,与period_bench合并之后,如果数据为空,那么直接退出

  • 遍历每个因子,计算因子值

这里做了一个看起来很奇怪的事情,它在读历史数据,它这里假设,历史上都跑完了,而且跑的就是这个币的这个因子,如果有多有少,就先删了再跑。

它做的事情是,如果这个因子之前跑过了,那就读取之前的文件,然后获取之前没有计算,而现在需要计算的时间list

如果这个因子没跑过,那就新建文件,然后有一个时间list

总的来说,这一段,就是为了处理之前已经计算过的数据,因为计算量太大了,所以这里如果存在之前已经计算过的数据,那就找到那些没有计算的周期。这里的时间是小时或者天

万一有些计算了一天 / 一小时中的某些数据,其他数据没有计算怎么办

这里的pdf是天或者小时数据,以period_bench 计算

在找到之前计算过的数据之后,将之前计算过的数据和pdf合并

开始计算因子cal_min_factors cal_daily_factors 这里不懂,为什么要分开计算,之后再看

  • 因子数据整理并输出

由于混杂了之前的历史数据,以及在计算的时候,可能会带入一些别的列,这里找到了所有因子,和时间 币种一起保留下来,这里的数据是小时 / 天数据

calculate_by_code

  • 读取分钟数据

pdf为period_bench的dataframe

mdf是min_bench的dataframe和币的历史数据的合并

  • 遍历每个因子,计算因子值

由于计算量较大,如果之前有计算过该数据,那么就找到之前的数据,并整理没有计算过的时间周期

cal_min_factors cal_daily_factors计算因子

这里对这两个数据的猜测是:cal_min_factors计算1分钟到5分钟的数据,cal_daily_factors的作用是由五分钟数据计算小时或者填数据

  • 因子数据整理并输出

保存数据

cal_min_factors

  • 参数:时间(小时/天)mdf pdf

mdf 为数据和min_bench合并之后的结果

pdf(ddf)为period_bench数据,如果有已经计算好的数据,则pdf和已经计算好的数据合并

  • 需要计算的是特定时间的数据,所以,先获取mdf中特定时间下的数据
  • 现在的数据是分钟数据,首先要得到五分钟/10分钟数据。减小数据量
  • 然后计算小时/天数据。
  • 这里的周期开始交易日什么意思
  • temp复制分钟数据
  • 然后resample成5/10分钟数据,周期开始交易日为第一个分钟,并将名字改回candle_begin_time
  • 得到5/10分钟数据之后,计算最短路径,这里可以再看看,因为我也不知道最短路径是啥???
  • 这里为什么要计算5和10分钟,只计算5不行吗???
  • 最短路径:2*(最高价 - 最低价) / abs(开盘价 - 收盘价)
  • 最短路径标准化:最短路径 / 当天/小时的第一个开盘价
  • 标准化的作用:让值在0-1之间
  • 计算小时/日的成交额之和,计算最短路径之和
  • 将计算出来的小时/日的因子合并到ddf中。
  • 所以说这里的5分钟和10分钟,在计算出来之后,这些因子都要被合并在ddf中
  • 现有的代码,只计算了因子,基于分钟数据,首先resample成5/10分钟,基于5/10分钟的数据,计算小时/日的因子
  • 计算出因子之后,选股,绘制资金曲线不在考虑范围之内。
  • 放量流动性

只看一小时内放量k线的illq

成交量 > 平均成交量 + 标准差

其中平均成交量是这一小时/天的五分钟数据求平均

其中标准差是这一小时/天的五分钟数据求标准差

cal_min_factors

  • 总的来说,这个函数,传入mdf和pdf,其中mdf是分钟级别的原数据,pdf是小时/天级别的目标数据
  • 根据分钟数据,这个函数可以计算5/10/20分钟的因子
  • 首先将分钟数据resample为5/10分钟数据
  • 然后计算因子,写到pdf
  • 甚至可以魔改,挑选一定条件下的因子,放到pdf

cal_daily_factors

  • 这个函数的调用是在计算完cal_min_factors之后,对pdf进行处理
  • 这里在处理的数据是计算出来小时/天的因子之后,对数据进行rolling操作,是一个时序操作,计算的是小时/天的rolling操作
  • 这里有n和d,n表示的是5/10分钟,d表示的是rolling的天数

process_all_data

处理截面数据,比如5分钟和10分钟数据做加减乘除。。。

朋友圈文案

个人做量化可行吗?

机器学习做量化可行吗?

自学量化

没有计划

抄我的就行

神经网络做量化,效果咋样?

相关推荐
无心水3 小时前
24、系统架构师论文写作专题 核心考点与学习笔记
笔记·学习·系统架构·架构师·安全架构·软考架构师·软考系统架构设计师
蒸蒸yyyyzwd3 小时前
邓明 Agent 系统面试-意图识别学习笔记
笔记·学习
Bczheng16 小时前
四十六.创建一笔交易(9)--第三个区块 添加tx到钱包
区块链
Zhao-Jichao6 小时前
AI Prompting for Everyone 课程笔记 - P21 总结 Conclusion
人工智能·笔记
欢欢李7 小时前
【LTE L3 笔记 05】LTE同步信号
笔记·无线通信·物理层·lte·空口协议
La Pulga8 小时前
【FreeRTOS源码学习笔记】空闲任务与阻塞延时
笔记·mcu·学习·嵌入式·freertos·实时操作系统
蒸蒸yyyyzwd8 小时前
秋招学习笔记 day106
笔记·学习
小李不想当小白10 小时前
WDG看门狗(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
欢欢李10 小时前
【LTE L3 笔记 04】LTE帧结构
笔记·无线通信·物理层·lte·空口协议
Zhao-Jichao12 小时前
AI Prompting for Everyone 课程笔记 - P20 实验与期末项目 Lab and Final Project
前端·人工智能·笔记