【量化】商品期货换月的处理思路(old)

商品期货存在换月的情况,即期货合约是有到期日的,如果不想实物交割就得将持仓转换到之后的合约上,而不同月份的价格是不一样的,也就是不连续的,在回测中需要处理换月带来的跳空:

比如上图中的PG是逐月换月的,鼠标标记处就有500点的价差,如果不处理,回测中做多则多了500点的利润、做空则多了500点的亏损,但这在实际换月中不会出现。

因此这和股票中的复权一样都是基础性问题,但是看到中文网络上很少有相关文章去讨论、处理这方面的问题,请教邢大说:

你可以自己定好规则,比如说次月的合约成交量比当月的高了。连续高三天,那你就换到次月的

紧接着问问chatGPT,经过一系列友好交流后:

用邢大的思路先自己拼接一个主连。

准备工作

分合约的商品期货数据。可在量化小讲堂这里下载:

持仓量主力换月

wind里面对自己主连设计的解释是:

由不同时期持仓量最大合约的行情数据拼接而成的拟合合约。因在换月期前后最大持仓量会在不同合约间来回摆动,所以Wind主连合约规则定为只向前切换不回退,每日收盘结算后判断是否切换。

由此可见他们是按持仓量来进行划分的,因此我们这里也用持仓量作为划分标准。

首先,我们把原始数据拼接起来,形成一个具有多个交易日期、但每个合约仅有一个交易日期的表格(以甲醇为例):

from glob import glob
kline_path = r'path'
for i in ['symbol']:symbol_file_path = glob(kline_path + '/%s/*[0-9].csv' % i)  # 此处是寻找所有数字结尾的csv文件df_list = []
for i in symbol_file_path:df_list.append(pd.read_csv(i, encoding='GBK', skiprows=1, parse_dates=['交易日期']))all_coin_data = pd.concat(df_list, ignore_index=True)
data_need_to_prepare = all_coin_data.sort_values('交易日期')

接下来开始整理工作,按合约名字把持仓量铺平开来:

# 计算每个合约在每个交易日的持仓量
holdings = data_need_to_prepare.groupby(['交易日期', '合约代码'])['持仓量'].sum().unstack()

其次用rolling求出来过去滚动5日持仓量最大的值,获取每日横截面比较最大的合约名为一个series,最终用inner的方式把df和series给merge起来,得到的就是我们要的结果。

# 求出过去五日的最大值
rolling_max = holdings.rolling(window=5).max()
# 找到最大值所在的列名
max_columns = rolling_max.idxmax(axis=1)series_df = max_columns.reset_index()
series_df.columns = ['交易日期', '合约代码']result = pd.merge(data_need_to_prepare, series_df, on=['交易日期', '合约代码'], how='inner')

最后用股票的复权方式进行复权即可。这里的前收盘价就是单纯的上一个该合约上一日的收盘价,用这个算涨跌幅应该就是当根K线距离本合约上根K线的涨跌幅,以此避免了换月带来的价差。

另一种思路——换月日重新开平仓

上述用股票的复权思路进行了处理,但注意在开仓的时候如果涉及到开仓的具体数量,要用原本没复权的价格,因此处理起来也相对复杂。

有一个取巧的办法,上面不是我们自己做了主连嘛,也就是可以获得换月时间,那么直接把换月那天的仓位变为0即可达成换月前一日平仓、第二日开仓的结果,换月当日空仓:

# 在换月的时候仓位为0,然后第二天正常交易
df.loc[df['合约代码'] != df['合约代码'].shift(), 'pos'] = 0

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

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

相关文章

const的基础用法

#include<iostream> using namespace std;void main() {const int a 0;int const b 1;//一样const int * c;//const修饰的是指针所指向的内存空间(即值)&#xff0c;不能被修改int* const d NULL;//const修饰的指针变量不能被修改const int* const eNULL;//const修饰的…

uni-app 从入门到精通 3天快速掌握 文字版 学习专栏

大家好&#xff0c;我是java1234小锋老师。 近日锋哥又卷了一波课程&#xff0c;uni-app 从入门到精通 3天快速掌握教程&#xff0c;文字版视频版。三天掌握。 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从…

亚信安慧AntDB数据库——通信运营商核心系统的全面演进

AntDB数据库源自通信运营商核心系统&#xff0c;经过15年的平稳运行和不断演进&#xff0c;成功跟随通信技术的升级步伐&#xff0c;逐步迈向5G时代&#xff0c;并且在这期间完成了8次大版本的迭代&#xff0c;为行业树立了技术领先的典范。其独特之处在于具备超融合架构&#…

如何在win7同样支持Webview2 在 WPF 中使用本地 Webview2 ,如何不依赖系统 Runtime

项目运行环境&#xff1a; .Net Framework 4.5.2 Windows 7 x64 Service Pack 1 WebView2 Microsoft.WebView2.FixedVersionRuntime.120.0.2210.91.x64 考虑到很多老项目&#xff0c;本项目使用的是.Net Framework 4.5.2&#xff0c;.Net 更高版本的其实也是可以支持的。 …

vmware安装龙蜥操作系统

vmware安装龙蜥操作系统 1、下载龙蜥操作系统 8.8 镜像文件2、安装龙蜥操作系统 8.83、配置龙蜥操作系统 8.83.1、配置静态IP地址 和 dns3.2、查看磁盘分区3.3、查看系统版本 1、下载龙蜥操作系统 8.8 镜像文件 这里选择 2023年2月发布的 8.8 版本 官方下载链接 https://mirro…

起名+算命+塔罗+星座+八字测算大全小程序源码系统 带完整的安装包以及搭建教程

随着科技的发展和人们生活水平的提高&#xff0c;越来越多的人开始关注个人命运和运势&#xff0c;希望通过各种方式了解自己的未来。在这样的背景下&#xff0c;一款集合了起名、算命塔、罗星座、八字测算等多种功能的小程序应运而生。这款小程序源码系统旨在为用户提供全方位…

mybatis-flex笔记

MyBatis-Flex 的增删改功能 - MyBatis-Flex 官方网站https://mybatis-flex.com/zh/base/add-delete-update.html 代码https://gitee.com/hntianshu/mybatis-flex-test 一 新增数据 不忽略 null 值。 就是允许有null 忽略null 就是不允许有null BaseMapper 的接口提供了 inser…

jmeter的安装与目录介绍

1、启动 apache-jmeter-5.0\bin 2、永久修改中文配置 zh-CN就行了

图像分割-漫水填充法 floodFill (C#)

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 本文的VB版本请访问&#xff1a;图像分割-漫水填充法 floodFill-CSDN博客 FloodFill方法是一种图像处理算法&#xff0c;它的目的是…

2023年度最热 AI 应用 TOP 50,除了 ChatGPT 还有这么多宝藏

原文章链接&#xff1a;年度最热 AI 应用 TOP 50&#xff0c;除了 ChatGPT 还有这么多宝藏 - IT之家 更多消息&#xff1a;AI人工智能行业动态&#xff0c;aigc应用领域资讯 在 AI 工具激烈竞争的一年中&#xff0c;尽管ChatGPT在访问量上遥遥领先&#xff0c;但单次使用时长未…

Java LinkedList解密

一、LinkedList最底层的原理 LinkedList其实底层是链表&#xff1a; 当初始化的时候&#xff0c;会将链表这个节点的值、prev指针和next指针初始化。 二、LinkedList初始化 无参构造并没有做什么。有参构造会先调用无参构造&#xff0c;然后调用addAll方法将链表的节点都初始化…

【数值分析】数值积分,复合中点,复合梯形,复合Simpson,matlab实现

数值积分与数值微分 2023年11月29日 #analysis 文章目录 数值积分与数值微分1. 求积公式与代数精度2. 几个常用积分公式及其复合积分公式2.1 中点公式2.2 梯形公式2.3 抛物型公式/Simpson公式2.4 复合中点公式2.5 复合梯形公式2.6 复合Simpson公式 1. 求积公式与代数精度 求积…

什么是高防 IP?哪些行业适合用高防 IP?

在数字化浪潮席卷全球的今天&#xff0c;网络安全问题日益凸显。有听说过“高防 IP”这个名词吗&#xff1f;它究竟是什么东西&#xff0c;又能在哪些领域大显身手呢&#xff1f; 一、什么是高防 IP&#xff1f; 高防 IP&#xff0c;顾名思义&#xff0c;就是具备高级防护能力…

1_并发编程_线程的基本概念和线程终止及线程问题排查

1.线程的运行状态 在Java中&#xff0c;线程的状态一共是6种状态&#xff0c;分别是 NEW&#xff1a;初始状态&#xff0c;线程被构建&#xff0c;但是还没有调用start方法 RUNNABLED&#xff1a;运行状态&#xff0c;JAVA线程把操作系统中的就绪和运行两种状态统一称为“运行…

【C程序设计】C判断

判断结构要求程序员指定一个或多个要评估或测试的条件&#xff0c;以及条件为真时要执行的语句&#xff08;必需的&#xff09;和条件为假时要执行的语句&#xff08;可选的&#xff09;。 C 语言把任何非零和非空的值假定为 true&#xff0c;把零或 null 假定为 false。 下面…

.mallox勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复

引言&#xff1a; 随着技术的不断发展&#xff0c;网络空间也不可避免地面临着各种威胁&#xff0c;其中之一就是勒索病毒&#xff0c;而.mallox是近期引起关注的一种恶意软件。本文将介绍.mallox勒索病毒&#xff0c;以及如何有效地恢复被其加密的数据文件&#xff0c;并提供…

ros2激光雷达<gazebo>仿真资料

Lidar sensor激光雷达传感器 We dont want our robot to touch the wall at all because this may cause some damage, so instead of the contact sensor we can use the Lidar. Lidar is an acronym for "light detection and ranging". This sensor can help us …

OpenFeign相关面试题及答案(2024)

1、什么是OpenFeign&#xff0c;它如何简化远程服务调用&#xff1f; OpenFeign是一个声明式的Web服务客户端&#xff0c;它使得编写HTTP客户端变得更加容易。它属于Spring Cloud Netflix项目的一部分&#xff0c;可以与Spring Boot应用轻松集成。通过使用OpenFeign&#xff0…

Lingo 17安装包下载及安装教程

Lingo 17下载链接&#xff1a;https://docs.qq.com/doc/DUndEVXd4WVVweGFR 1.鼠标右键解压到“Lingo 17.0” 2.双击打开【Setup】文件夹 3.选中Lingo 17.0&#xff0c;鼠标右键选择“以管理员身份运行” 4.点击“Next” 5.选中I accept the terms in the license agreement&…

go语言`json:“-“`标签的含义

json:"-" 是 Go 语言中的一个标签&#xff08;tag&#xff09;&#xff0c;用于指示编码和解码 JSON 时忽略对应的字段。 在 Go 中&#xff0c;结构体的字段可以通过添加标签来指定其在编码为 JSON 字符串或解码时的行为。json:"-" 标签的作用是告诉编码和…