商品期货多因子 全市场对冲模型

商品期货多因子 全市场对冲模型

  本文由量化投资训练营撰写,首发于聚宽社区。无论是写公众号,还是身处从业环境,我们一直偏向资产配置FICC(Fixed income Currencies & Commodities,译为固定收益证券、货币及商品期货)类策略研究,以此方式来对冲单纯股票市场的高beta,试图为投资者拓展眼光,增加投资稳定性。如果说取关一个公众号越来越容易,我希望这里提供的知识或许让你多想3秒再做打算。

  截面因子投资模型在商品期货中十分有效,如图在海外商品期货多因子研究中,《Harvesting Commodity Risk Premia》(获取商品风险溢价)这篇文献影响力较大。文章梳理了影响商品期货溢价的因子,总结了学术界和业界提出的构建商品期货多空组合的11大类因子(绝大多数均有正收益,其中期限结构、价值和偏度因子正收益率最为显著),其中既包括广泛讨论的动量因子、期限结构因子、特质波动率等因子,同时还探讨了2010年以后兴起的持仓情况因子、流动性因子、通胀因子、汇率因子等影响期货定价的因子。

  本次研究中,我们集中于这几个因子截面动量、流动性、展期收益率、归一化VSTD、偏度、期货现货基差、会员持仓结构

Img

Img

  1、截面动量

  在每个日期截面上,首先计算动量值,如果单独使用此因子,选择上涨最多的N个品种做多,下跌最多的N个品种做空。它的假设是:强者恒强,弱者恒弱。动量是相对出现于品种之间的,而不是以一个绝对数值,体现出方向性。截面动量模型的持仓是对冲形态的,每一期账户内总有N个品种多头,N个品种空头。

  海通研报认为横截面动量因子在不同参数组下均能取得正收益,但平均收益低于时间序列动量因子。当回看期R为30-45,持有期H为5-10个交易日时,因子表现相对较好,年化收益率超过4%。

  截面动量因子的表现具有很强的参数敏感性。这是因为由不同的计算周期所得到动量特征表现结果不一,不同的品种的动量特征也会表现不一,所以在构建截面动量因子组合之后,组合的整体表现就会很强地受参数选择的影响。综合考虑之后,东方证券衍生品研究院的观点是,截面动量因子的有效性只存在部分参数区域内,较为合适的R值范围为10天~30左右,而H的合理取值范围为5~25天左右。

  2、流动性(也译为非流动性

Img

  根据流动性illiquidity溢价理论流动性越差的资产预期收益越高,Amivest 流动性比率和Amihud 非流动性比率是常用的刻画股票流动性的因子,这里我们使用后者作为期货因子,计算方法如下:

Img

  其中ri和Amonuti分别表示期货合约在第i个交易日的收益率和成交金额,ILLIQ越高表示该品种流动性越差。

  非流动性因子ILLIQ构建流动性是衡量证券变现能力的指标,流动性强,说明证券能够在折价较小的情况下,顺利卖出;相反,流动性弱,则表明交易证券需要在成交价格上做出较大让步;因此,流动性差也是风险之一。 按照风险与收益相匹配的特征,理论上市场会赋予流动性差的证券一定的收益补偿。

  优矿量化哥针对该指标,在全A指数上,使用2008~2016年数据做测试,发现该指标针对股票有非常强的区分能力,且Alpha稳定,仅在2015年牛市来临前短暂性失效,从侧面说明了该因子的主要作用区间是小市值区域股票。

  3、展期收益率

  展期收益率属于期限结构研究的变量之一,刚才已经描述过。展期收益策略是商品期货特有的策略类型。逻辑上,展期收益策略与传统的趋势类策略相关性较差,有较好的互补性,因为他们从根源上不同源。

  对于资产管理,商品配置一般不投资于实物商品,业内流行的方式是通过商品期货,然后滚动移仓,达到配置商品的目的。理论上,投资商品期货的收益可以分解成:

  Futuresreturn = Spotreturn Rollreturn Collateralreturn

  即期货投资收益由3部分构成:对应现货的收益、展期收益和现金收益。

  在商品期货市场,同一标的品种对应着不同交割日的期货合约,如螺纹钢每年有1月,5月,10月,这3个主力合约,还有很多次主力小合约。

Img

  商品期货的现货价格(这里常用近月合约代替现货价格)与不同交割月期货合约交易价格之间的价格差,即商品期货的期限结构。若现货价格大于期货价格,或近月合约的期货价格大于远月合约的期货价格,称为期货贴水backward,或现货升水;若现货价格小于期货价格,或近月合约的期货价格小于远月合约的期货价格,称为期货升水Contango,或现货贴水。聚宽社区里有关于期限结构的策略模型,可以详细看其解释,我们也是基本上按照此结构撰写本模型。

  我们一般说升贴水,都是针对远期合约。

  假设 Pt,n 是 t 时刻近月合约的价格,Pt,d 是 t 时刻远月合约的价格,Nt,n 是近月合约在 t 时刻距离交割日的天数,Nt,n 是远月合约在 t 时刻距离交割日的天数。

  当 Rt 为正,即近月合约价格大于远月合约价格,当 Rt 为负,即近月合约价格小于远月合约价格。对同一横截面的所有品种来说,最大的 Rt,即对所有品种来说,该标的的近月合约对远月合约涨幅最大,最小的 Rt,即对所有品种来说,该标的的近月合约对远月合约跌幅最大。

  按照渤海证券的交易逻辑:若不同合约的展期收益率排名可在一定程度上体现“多强空弱”中的“强”、“弱”概念,即可根据展期收益率排名构建交易策略,我们做多展期收益率最高的品种,做空展期收益率最低的品种,该因子有很强的左侧交易的味道。

  由华泰期货研究所提供的上图的动量策略与期限结构策略各年份收益图可以发现,动量策略在 2011 年、2012 年及 2016 年表现较好,但期限结构策略在 2010 年、2013 年及 2017 年表现优秀,两者直观上看相关性较低。

  4、归一化VSTD

  成交量标准差(然后用成交量均值归一化,或者理解为成家量CV指标)是典型的交易行为因子,这类波动因子是指过去一段时间内股价或成交量等等其他指标的波动情况,也是一类非常重要同时效果十分显著的风格因子。通过改变所取的时间区间的长度,可以观察到不同时长下的股票波动效应强弱。

Img

  引入它的原因首先是看到光大金工在股票因子测试中该因子表现较好,这类因子作为负向的大类因子,其单调性表现较为出色。

  我们在聚宽测试了中证800样本股在该因子下的分层能力,同样,可以清晰区分1~5组股票(蓝、黄、绿、红、紫),且因子值最高的一组表现最差,说明如果成交量变化过于迅猛,则这类股票应该做空。期货多因子研报上无此因子,这是我们随股票多因子的经验带入期货模型的因子。

  5、偏度

  偏度是关于实值随机变量的平均值的概率分布的不对称性的量度。除正态分布的偏度为0,以偏度值的大小正负,可以分为正偏或者负偏分布,对于单峰分布,负偏表示概率密度函数左侧的尾部比右侧更长或更胖。相反,正偏斜表示右侧的尾巴比左侧长或胖。下图是正偏与负偏。

Img

  Miffre et al.(2013)16使用过去 12 个月的日收益率数据计算各个期货品种的三阶矩,并从低到高排序,做多偏度最低的前 20%品种,做空偏度最高的前 20%品种来构建偏度因子,因子取得 8.01%的年化超额收益。

Img

  研报显示偏度必须将窗口期放到很长,才能体现效果。这个窗口期大致在140~180日区间,且对于持有期不是很敏感,我们在实际测试中,发现偏度是一个负向因子,对于多因子模型有一定帮助。

  6、期货现货基差

  期货现货基差指的是期货合约价格与现货价格的差值,现货价格不像期货价格,没有统一的权威的参照,很多大宗商品由于各地区运输成本的存在,差别各异,所以现货价格参照的选取就很讲究了。这里统一参照生意社网站整理的数据,生意社网站已经对不同的商品参照了不同的市场现货价格,如:螺纹钢、玻璃、硅铁参照生产者价格,棉花、甲醇参照市场价格等。

Img

  虽然我们在模型中已经添加了期限结构,但是真正的现货数据比起远期合约,又新增了一个维度的因子,值得参考。该因子近几年表现稳定(单因子)。这里的数据来自Fushare提供

  地址和使用方式参考:加载中

  个人交易者要想获得类似非结构化清洗后的数据,如果没有tushare、fuahare这样的第三方数据平台支持,真的很困难,尤其是IT功底较差的大部分开发者(以我为例)。

  通过该平台提出数据后,转换成行名称为品种名,列名称为日期的数据格式,上传到聚宽【研究】平台,即可在模型中调用,调用代码参考:

# 导入读入csv文件def csv_setting(context):# 基差settingbody1=read_file("Basis_xzh.csv")df1 = pd.read_csv(StringIO(body1))df1.fillna(0)df1.index = df1['Unnamed: 0']del df1['Unnamed: 0']g.df1 = df1[g.instruments]

  7、会员持仓结构

  所谓成交持仓表,是一项非常具有中国特色的市场信息——在每个交易日收盘之后,交易所公布每个期货品种的“结算会员成交持仓排名”,该排名以结算会员为单位,披露成交量和持仓量的数据。

Img

  2016年9月,方正金工提出了简便版的蜘蛛网策略,该方案不带一丝华丽的数学计算,在沪深300指数期货上却绩效惊人,日胜率57.3%,盈亏比1.48,交易信号的信息比率大于5,堪称性价比最高的期货CTA信号。

  (1)计算会员机构的知情度:记会员机构i的多单持仓量为Bi,空单持仓量为Si,当日成交量为Vi。定义其知情度的统计量Stat如下:

  Stat_i = (Bi Si) / Vi

  Stat_i 的值越大,相当于当日换手率越小,则会员机构i中知情投资者的比例越高。

  (2)计算会员机构的情绪指标:记会员机构i当日的多单增量为dBi,空单增量为dSi 。其情绪指标TS(Trader Sentiment)由如下公式计算得到:

  TS = (dBi-dSi) / (|dBi| |dSi|)

  TS 的值越大,表明该会员机构背后的交易者情绪越偏多,反之则越偏空。

========================= 分割线 =========================

  模型细节和测试结果

整体模型通过这3个函数驱动:

# 开盘前运行
run_daily( before_market_open, time='before_open', reference_security=get_future_code('RB'))
# 开盘时运行
run_weekly(market_open, 1,time='open', reference_security=get_future_code('RB'))
# 交易运行 
run_weekly(Trade, 1, time='open', reference_security=get_future_code('RB'))

before_market_open完成了主力合约的寻找和移仓换月,market_open完成了7个因子计算,Trade完成了交易环节。第一个函数每日运行run_daily,后两个函数每周一运行run_weekly。

Trade函数首选通过BuyList,SellList = rank_futures(context),获取交易名单。核心的rank_futures函数完成了多因子排序,其逻辑大致如下:

首先生成多列Rank值排序,然后通过Dataframe的rank函数,序列化列名称和值,得到如Momentum_rank、ILLIQ_rank这样的列,然后进行等权排序:

# 因子权重和因子值rank相乘(方法2,直接rank排序)data_final = 1*statements['Momentum_rank'] \1*statements['ILLIQ_rank'] \1*statements['RollYield_rank'] \- 1*statements['VSTD_rank'] \- 1*statements['Skew_rank'] \- 1*statements['Basis_rank'] \- 1*statements['Hycc_rank']

在此之前我们尝试过先剔除3MAD异常值,再标准化,感觉总是有一些小的bug,在模型开始阶段,所以还是使用直接rank排序可靠一些。该函数最终生成:stocklist_head和stocklist_tail两个名单。传入交易函数。

交易模块最终触发了TrailingStop追踪止损模块(ATR止损),我知道很多交易者都觉得这是个必要环节,我们暂且也认为是这样,给予了2倍日线级别ATR,为了稳定效果,统一在bar后执行,也就是一个bar的close价格触发该模块,然后考虑是否在下一个bar的open价位执行追踪止损。追踪止损需要记录多空仓位,需要计算开仓后最高最低价,这些全局变量需要自己写好,在关键时刻记录价格。

  和众多时间序列模型相比,横截面多因子模型在商品期货领域比不多,也许是由于编程语言门槛和因子获取难度,再加上期货品种数量长期偏少,不利于该类模型构建。但是目前我们看到市场风险已经越来越大,单品种模型面临缺乏全市场数据支撑,横截面多因子模型或许是更好的解决方案。

  今早再登录聚宽,补上所需的两个文件:现货基差Basis_xzh1和会员持仓结构hycc_TS3:

  链接:百度网盘 请输入提取码

  提取码:ap97

原文链接在这里:https://mp.weixin.qq.com/s?__biz=MzI0MTI3MjcxNw==&mid=2650115036&idx=1&sn=51a6a4cea99d8f0143467293389da2f0&chksm=f10f393ec678b02889366df13f487d46daf81fd45988178a7fa5d1f0a34a2cbc11d66152bdca&token=1273679479〈=zh_CN#rd

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

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

相关文章

Postman深度解析:打造高效接口测试自动化流程

《Postman深度解析:打造高效接口测试自动化流程》 一、概述与Postman核心优势 1. 接口测试的重要性与挑战 接口测试是确保软件系统各组成部分能够正确交互的关键环节。随着现代软件系统的复杂性增加,接口的数量和类型也在不断增长,这给接口测…

【工具分享】Gophish

文章目录 Gophish安装方式功能简介 Gophish Gophish 是一个开源的网络钓鱼框架,它被设计用于模拟真实世界的钓鱼攻击,以帮助企业和渗透测试人员测试和评估他们的网络钓鱼风险。Gophish 旨在使行业级的网络钓鱼培训对每个人都是可获取的,它易…

MeEdu网校系统搜索功能问题处理

MeEdu通过 MeiliSearch 实现全文搜索服务。 一、下载 MeiliSearch 程序 https://github.com/meilisearch/MeiliSearch/releases/tag/v0.24.0 只能下载 v0.24.0 版本,其版本不支持 下载 meilisearch-linux-amd64就可以了 二、上传 MeiliSearch 三、启动命令如下…

python爬虫入门(一)之HTTP请求和响应

一、爬虫的三个步骤(要学习的内容) 1、获取网页内容 (HTTP请求、Requests库) 2、解析网页内容 (HTML网页结构、Beautiful Soup库) 3、存储或分析数据 b站学习链接: 【【Python爬虫】爆肝两…

基于大象机器人UltraArm P340机械臂和传送带,实现教育场景中的自动化分拣系统!

引言 今天我们将展示一个高度自动化的模拟场景,展示多个机械臂与传送带协同工作的高效分拣系统。在这个场景中,机械臂通过视觉识别技术对物体进行分类,并通过精确的机械操作将它们放置在指定的位置。这一系统不仅提高了分拣的速度和准确性&am…

CH12_函数和事件

第12章:Javascript的函数和事件 本章目标 函数的概念掌握常用的系统函数掌握类型转换掌握Javascript的常用事件 课程回顾 Javascript中的循环有那些?Javascript中的各个循环特点是什么?Javascript中的各个循环语法分别是什么?…

什么是医学影像数据?

医学影像数据是指通过各种影像技术获取的人体内部结构和功能的可视化数据。这些影像技术包括但不限于X射线、计算机断层扫描(CT)、磁共振成像(MRI)、超声波(US)和正电子发射断层扫描(PET&#x…

【ue5】虚幻5同时开多个项目

正常开ue5项目我是直接在桌面点击快捷方式进入 只会打开一个项目 如果再想打开一个项目需要进入epic 再点击启动就可以再开一个项目了

Hadoop-16-Hive HiveServer2 HS2 允许客户端远程执行HiveHQL HCatalog 集群规划 实机配置运行

章节内容 上一节我们完成了: Metastore的基础概念配置模式:内嵌模式、本地模式、远程模式实机配置远程模式 并测试 背景介绍 这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。 之前已经在 V…

昇思25天学习打卡营第13天|K近邻算法实现红酒聚类

K近邻算法(K-Nearest-Neighbor, KNN)是一种用于分类和回归的非参数统计方法,是机器学习最基础的算法之一。它正是基于以上思想:要确定一个样本的类别,可以计算它与所有训练样本的距离,然后找出和该样本最接…

牛客链表题:BM1 反转链表(取头放尾法)

描述 给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。 数据范围: 0≤𝑛≤10000≤n≤1000 要求:空间复杂度 &…

数据埋点从入门到了解

想讲讲为什么有埋点,举个例子 目录 什么是埋点?用途小红书上 埋点的主要类型代码示例1. 代码埋点前端埋点后端埋点 (Node.js 示例) 2. 全埋点示例3. 可视化埋点示例 解释常见问题埋点管理系统结论 王五是一名数据分析师,负责分析公司产品的用…

C++语言相关的常见面试题目(三)

1. List底层实现原理 省流: list底层实现了一个双向循环链表。 每个元素(或节点)包含三个部分:数据域(_M_Storage)、前驱指针(_M_prev)、后继指针(_M_next)。 数据域:存储实际数据。 前驱指针:指向链表中…

Mysql 数据库主从复制-CSDN

查询两台虚拟机的IP 主虚拟机IP 从虚拟机IP服务 修改对应的配置文件 查询对应配置文件的命令 find / -name my.cnf编辑对应的配置文件 主 my.cnf (部分配置) [mysqld] ########basic settings######## server_id 1 log_bin /var/log/mysql/mysql-…

[激光原理与应用-98]:南京科耐激光-激光焊接-焊中检测-智能制程监测系统IPM介绍 - 2 - 什么是激光器焊接? 常见的激光焊接技术详解

目录 一、什么是激光焊接 1.1 概述 1.2 激光焊接的优点 二、激光焊接的应用 2.1 哪些场合必须使用激光焊接 1. 汽车制造业 2. 航空航天领域 3. 电子行业:消费类电子3C 4. 医疗器械制造 5. 新能源锂电池行业 6. 其他领域 三、激光焊接的分类 3.1 按焊接…

【ONLYOFFICE8.1】ONLYOFFICE8.1版本桌面编辑器测评

有宝子说office太贵,不适合个人和学生,而WPS不仅贵广告还多,那么有没有一款软件可以替代office和WPS呢?...当然有喽。当当当当!它就是众望所归、备受好评的ONLYOFFICE。下面就和小编一起来探索和测评一下ONLYOFFICE8.1…

Linux之三剑客(grep、sed、awk)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

LeetCode热题100刷题8:54. 螺旋矩阵、73. 矩阵置零、48. 旋转图像

54. 螺旋矩阵 class Solution { public:vector<int> spiralOrder(vector<vector<int>>& matrix) {vector<int> vec;if(matrix.empty())return vec;int left0;int right matrix[0].size()-1;int up0;int down matrix.size()-1;while(true) {for(i…

CentOS 6.5 配置国内在线yum源和制作openssh 9.8p1 rpm包 —— 筑梦之路

CentOS 6.5比较古老的版本了&#xff0c;而还是有一些古老的项目仍然在使用。 环境说明 1. 更换国内在线yum源 CentOS 6 在线可用yum源配置——筑梦之路_centos6可用yum源-CSDN博客 cat > CentOS-163.repo << EOF [base] nameCentOS-$releasever - Base - 163.com …

Java中线程的常用方法(并发编程基础)

Java中线程的常用方法 sleep 调用sleep会让当前线程从Running进入TIMED WAITING状态其它线程可以使用 interrupt 方法打断正在睡眠的线程,这时sleep方法会抛出InterruptedException睡眠结束后的线程未必会立刻得到执行建议用TimeUnit的sleep代替Thread的sleep来获得更好的可读…