pandas计算主力合约(模拟文化财经规则)
数据
使用的数据IF合约的日数据:
链接:https://pan.baidu.com/s/1XGfITsSWdP_c1_wFepUs0A
提取码:b880
主力合约计算规则:
1. 每个品种只选出唯一一个主力合约
2. 日成交量和持仓量都为最大的合约,确定为新的主力合约,于下一交易日进行指向切换
3. 按照第二条规定产生新的主力合约之前,维持原来的主力合约不变
4. 若出现当前主力合约的成交量和持仓量都不是最大的情况,当前指向合约在下一个交易日必须让出主力合约身份,新主力指向成交量最大的合约
计算方法:
1. 读入所有IF合约的日数据,合并到一张表中
2. 按日期进行分组,每组中的数据为当天所有在交易的合约
3. 对每组的数据按成交量和持仓量进行降序排序,排序的优先级为先成交量再持仓量
4. 取每组的第一行数据拼成一个新的表
5. 对新生成的表进行检查,看是否存在合约不连续的情况,检查方法为:
5.1 对表按时间进行升序排序
5.2 按合约进行分组
5.3 检查前一组的所有日期都在早于后一组最早的日期(也就是后一组第一行的日期)
开始计算
初始数据路径 ./if_list/
import os
import numpy as np
import pandas as pd
1. 读入所有的IF合约数据,合并成一张表
dir = r'./if_list/'
file_list = os.listdir(dir)
all_df = None
for file_name in file_list:ticker = file_name[0:-4]file_path = dir + file_namedf = pd.read_csv(file_path,encoding='utf-8',header=0,names=['date','open','close','low','high','volume','money','factor','high_limit','low_limit','avg','pre_close','paused','open_interest'])df['ticker'] = tickerif all_df is None:all_df = dfelse:all_df = pd.concat([all_df,df])
2. 按日期分组,取每组成交量和持仓量最大的一行组成一个新表
# 这个方法是对 成交量 和 持仓量 进行降序排序(即由大到小),排序优先级为先成交量后持仓量;排序后把第一行返回
def get_biggest_openinterest(x):df = x.sort_values(['volume','open_interest'],ascending=[False,False])return df.iloc[0,:]# 对所有合约合成的大表 all_df 按日期进行分组,每个日期的组里提取出成交量和持仓量最大的行 组成一个新的表 res_pd
all_df['date'] = pd.to_datetime(all_df['date'])
all_df.sort_values(by='date')
res_pd = all_df.groupby('date').apply(get_biggest_openinterest)
3. 检查合约是否连续
# 对表 res_pd 进行升序排列(即有小到大)
res_pd.sort_index(inplace=True)
# 对表 res_pd 按合约进行分组
res_group = res_pd.groupby('ticker')
# 提取每组的日期存入列表,然后对日期进行校验,确保每一组最早的那个日期都不会早于前一组的所有的日期,满足这个条件说明是连续合约
results_list = []
for name,group in res_group:results_list.append(group['date'].tolist())
for i in range(len(results_list)-1):pre_list = results_list[i]now_first = results_list[i+1][0]for item in pre_list:if item >= now_first:print(item,now_first)break
至此,res_pd是if的主力合约
pandas计算主力合约(模拟文化财经规则)相关推荐
- pandas计算主力合约收益率
数据: 链接:https://pan.baidu.com/s/1XGfITsSWdP_c1_wFepUs0A 提取码:b880 特殊处理: 考虑到换月不同合约的数据会有较大差异,避免在计算收益率时在 ...
- pandas计算皮尔逊相关系数
前置说明: 本文中使用的数据在文末提供下载,本文使用IH和IC主力合约的数据为例 目录 1. 概念 2. 计算过程 1. 概念 皮尔逊(pearson)相关系数:用于判断数据是否线性相关的方法 皮尔逊 ...
- 计算机怎么模拟人,计算机能不能模拟人的思维?
元培学院李通 1200017674 最近我愈发感觉到计算机是那么的"不聪明".计算机只会机械地执行我写的程序代码,却从来不能帮助我分析和解决问题.我有时候想,要是计算机可以像人一样 ...
- vnpy框架的策略开发和回测逻辑详解---以螺纹钢主力合约的R-breaker日内策略为例
笔者之前写过一篇关于vnpy的简单介绍和安装方法,本篇文章的目的是简单介绍vnpy的框架,然后详细介绍一下如何用vnpy开发自己的量化策略以及整个的回测逻辑是怎么样的.只有我们真的搞清楚了框架结构和相 ...
- python找出主力合约价格_主力合约列表
期货主力合约完全列表 掘金数据支持期货主力合约全部历史数据,以方便研究和回测策略.主力合约的切换规则为: 该品种上市合约中持仓量最大的 并且只向前切换不回退 每日收盘结算后判断切换 主力合约完整的合约 ...
- 期货主力合约及其移仓特点(转)
期货与股票不同的是,期货合约的生存周期是有限的,到合约最后交易日后就要交割,而且期货市场实行持仓限额制度.这两点对证券市场投资者不仅陌生,而且极不习惯.对于机构投资者来说,他们的投资是经过精心策划的, ...
- python使用pandas计算dataframe中每个分组的分位数极差、分组数据的分位数极差(range)、使用groupby函数和agg函数计算分组的两个分位数
python使用pandas计算dataframe中每个分组的分位数极差.分组数据的分位数极差(range).使用groupby函数和agg函数计算分组的两个分位数 目录
- python使用pandas计算dataframe中每个分组的极差、分组数据的极差(range)、使用groupby函数和agg函数计算分组的最大值和最小值
python使用pandas计算dataframe中每个分组的极差.分组数据的极差(range).使用groupby函数和agg函数计算分组的最大值和最小值 目录
- pandas计算dataframe两列数据值相等的行号、取出DataFrame中两列值相等的行号
pandas计算dataframe两列数据值相等的行号.取出DataFrame中两列值相等的行号 目录 pandas计算dataframe两列数据值相等的行号.取出DataFrame中两列值相等的行号
最新文章
- PHP-Zend引擎剖析之Hello World(二)
- Deployer 的使用
- C# 操作其他进程ListView
- 国内人工智能专利布局存隐忧
- 01背包+概率问题 计蒜客 offer
- Emlog使用qq头像作为评论头像
- 计算机原理基础-原反补
- Scrapy 轻松定制网络爬虫
- 首页 、引导页、版本
- opencv项目6----AI绘画(隔空绘画)
- 第10章 数据库运行维护与优化
- 3、python 视频转图片及图片转视频、裁剪、创建图片压缩成视频
- 迅为RK3568开发板Debian系统安装ToDesk
- 如何(以及为什么)在Word文档中使用隐藏文本
- javascript原生初级到非凡-姜威-专题视频课程
- IPv6 基本原理详解介绍
- Java Type接口 运行时获取泛型类型
- N76E003合并boot和app
- 人工智能:群智能算法的一般框架、特点和不足
- 在日常使用中关于英特尔睿频加速的优劣分析(附带关闭睿频加速的两种方法)
热门文章
- jQuery实现消息列表循环垂直向上滚动
- 2022年第四届河南省CCPC大学生程序设计竞赛代码+简单思路(退役战了算是,还好金了)
- CSS笔试题: 实现表格首行首列固定和自适应窗口
- springboot 单元测试使用 @value读取不到值, yml的两个坑
- 【 malcolmcrum】基于Java后端与Typescript前端的代码自动生成
- 安卓机顶盒刷linux系统下载,安卓机顶盒刷机 最简单的刷机教程【图文教程】
- IDE+vim,提高开发效率
- YYCMS5.0影视系统/源码全开源无授权/影视站全自动采集
- ARTIX-7 XC7A35T实验项目之流水灯
- 输入框根据拼音首字母/中文字符联想补全