高频直播笔记

打印 上一主题 下一主题

主题 683|帖子 683|积分 2049

盘算五分钟流动性因子



  • 分钟数据降采样到五分钟
  • 盘算五分钟最短路径
  • 一小时累计成交额
  • 一小时累计最短路径
  • 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分钟数据做加减乘除。。。
朋侪圈文案

个人做量化可行吗?
机器学习做量化可行吗?
自学量化
没有计划
抄我的就行
神经网络做量化,效果咋样?


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

熊熊出没

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表