查看全课大纲(第 35 / 59 节)
- 1.量化投资必备基础知识
- 2.趋势型策略及模型原理
- 3.均值回复型策略及模型原理
- 4.配对交易策略及模型原理
- 5.量化策略研发流程与基本技能
- 6.常用的量化平台概述及如何选择
- 7.如何量化一个主观策略思路
- 8.常用技术指标及指标计算过程
- 9.如何编写指标代码
- 10.指标的物理意义
- 11.技术指标的应用技巧
- 12.更多的交易决策
- 13.编写程序去量化一个趋势型技术指标
- 14.编写趋势型技术指标的性能评价
- 15.策略对交易成本和持仓周期的影响
- 16.股票池策略的原理及基本框架
- 17.基于多因子分析的股票池设计与实现
- 18.股票池的性能评估
- 19.使用定制化财务因子构建股票池
- 20.趋势型策略原理及股票池机制的设计
- 21.趋势型择时信号的设计方法与编程实现
- 22.趋势型策略的回测与性能评估
- 23.优化趋势型策略的思路及方法
- 24.量化体系中的风险控制思想
- 25.风险的度量-波动率
- 26.常用的风险控制方法
- 27.实现止盈止损模块以提高策略性能
- 28.策略性能的评估与优化
- 29.探讨波动率与风险的关系
- 30.量化策略中的经典资金管理模型
- 31.用python编程实现资金管理模块
- 32.构建一个完善的量化交易策略
- 33.趋势型量化策略必备的期货知识
- 34.期货量化工具介绍
- 35.商品期货趋势型策略原理
- 36.用TB编写商品期货趋势型策略(上)
- 37.用TB编写商品期货趋势型策略(下)
- 38.分析优化商品期货趋势型策略的方法思路
- 39.期货交易策略的注意事项
- 40.均值回复型策略的原理
- 41.A股市场有没有稳定的均值回复效应?
- 42.编写一个均值回复型股票量化策略
- 43.编写多空组合策略进行策略改进
- 44.在策略中实现头寸管理进行策略优化
- 45.套利策略原理及常见套利类型
- 46.用MC开发一个跨品种套利交易策略(上)
- 47.用MC开发一个跨品种套利交易策略(下)
- 48.统计套利之股票配对交易策略
- 49.实盘中的细节问题:加减仓
- 50.关于高频交易
- 51.如何评价实盘量化策略的性能
- 52.量化系统的工作过程及研发流程
- 53.运气or实力
- 54.量化实盘交易需要满足什么条件
- 55.未来函数的坑
- 56.实盘数据接口异常的自动报警
- 57.交易系统的压力测试
- 58.自动运行的交易策略,什么时候需要人工干预
- 59.预案准备和实盘心理建设
商品期货趋势型策略原理
约 26 分钟
📺 正在播放小象学院官方高清录播(支持倍速与清晰度调节)
小象实战讲义 · 进阶量化交易实战:迭代式的量化策略研发 本讲义仅用于编程与量化方法教学,不构成任何投资建议。
商品期货由于供需周期的结构性失衡与宏观流动性冲击,具备全金融市场中最显著的大级别单边趋势特征。本节深入剖析商品期货趋势策略的动力学生成机制、跨品种截面动量以及多空非对称特征。本讲义原课以 TB/MC 演示,此处为 Python 等价实现。
💡 核心导读
- 商品期货趋势动力学的三大基本驱动力:
- 供需库存周期(Supply-Demand Cycle):产能扩张与去库存的时滞带来长达数月的大级别单边趋势;
- 宏观流动性与通胀预期(Macro Inflation):大宗商品作为抗通胀标的,易形成跨资产同向共振;
- 多空双向平权交易机制(Two-Way Market):做空无需借券融券,使熊市下跌速率与做空获利空间对称展开。
┌─────────────────────────────────────────────────────────────┐
│ 商品期货趋势动力学产生机理拓扑图 │
└──────────────────────────────┬──────────────────────────────┘
│
┌─────────────────────────────┼─────────────────────────────┐
▼ ▼ ▼
┌─────────────────────────┐ ┌─────────────────────────┐ ┌─────────────────────────┐
│ 产业供需错配 (Industry) │ │ 宏观通胀溢价 (Macro) │ │ 资金抱团增仓 (Momentum) │
├─────────────────────────┤ ├─────────────────────────┤ ├─────────────────────────┤
│ • 低库存 + 减产周期 │ │ • 货币超发推动大宗通胀 │ │ • 投机资金持续流入 │
│ • 现货高升水 (Backward) │ │ • 原油/金属跨资产共振 │ │ • 持仓量 OI 持续放大 │
└─────────────────────────┘ └─────────────────────────┘ └─────────────────────────┘一、商品期货期限结构与展期收益(Roll Yield)
声明:原课以 TB/MC 演示,此处为 Python 等价实现。
大宗商品期货的期限结构分为两种状态:
- 现货升水(Backwardation, 远月贴水):,多头持仓可获得正向展期收益;
- 现货贴水(Contango, 远月升水):,多头移仓面临负基差损耗。
import numpy as np
def calculate_roll_yield(price_near: float, price_far: float, days_diff: int = 30) -> float:
"""
计算商品期货年化展期收益率 Roll Yield(合成教学样例,实际展期收益受供需、仓储成本等影响)
"""
roll_yield = (np.log(price_near) - np.log(price_far)) * (365.0 / days_diff)
return float(roll_yield)
# 合成数据:模拟近月与远月合约价格(期货价格结构会动态变化)
price_near_example = 5100.0 # 近月合约价格
price_far_example = 5050.0 # 远月合约价格,低于近月(现货升水结构)
days_to_expiry = 30 # 合约到期天数差
ry = calculate_roll_yield(price_near_example, price_far_example, days_to_expiry)
print("===== 商品期货展期收益率计算 =====")
print(f"近月合约价格: {price_near_example:.2f}")
print(f"远月合约价格: {price_far_example:.2f}")
print(f"到期天数差 : {days_to_expiry} 天")
print(f"年化展期收益率: {ry*100:.4f}%")
print("注:正收益率通常对应现货升水(Backwardation)结构。")===== 商品期货展期收益率计算 =====
近月合约价格: 5100.00
远月合约价格: 5050.00
到期天数差 : 30 天
年化展期收益率: 11.9870%
注:正收益率通常对应现货升水(Backwardation)结构。二、多空非对称趋势择时信号设计
商品期货的下跌往往比上涨更为迅猛(“牛市缓慢攀爬,熊市电梯下坠”)。在策略设计中,空头入场周期通常设定得比多头更短。
import pandas as pd
import numpy as np
def generate_asymmetric_futures_trend_signals(df: pd.DataFrame, n_long: int = 20, n_short: int = 10) -> pd.DataFrame:
"""
商品期货多空非对称突破信号生成(Python 等价实现,历史参数不代表未来,存在过拟合风险)
"""
res = df.copy()
res['long_trigger'] = res['high'].rolling(n_long).max().shift(1)
res['short_trigger'] = res['low'].rolling(n_short).min().shift(1)
res['signal'] = 0
res.loc[res['close'] > res['long_trigger'], 'signal'] = 1
res.loc[res['close'] < res['short_trigger'], 'signal'] = -1
return res
# 合成数据:模拟商品期货价格序列(包含趋势与震荡,不保证策略必然盈利)
rng = np.random.default_rng(42)
n_days = 50
base_price = 5000.0
trend = np.linspace(0, 100, n_days) # 缓慢上行趋势
noise = rng.normal(0, 25, n_days)
prices = base_price + trend + noise
df_sim = pd.DataFrame({
'high': prices + 15 + rng.uniform(0, 10, n_days),
'low': prices - 15 - rng.uniform(0, 10, n_days),
'close': prices
})
# 生成非对称突破信号
signals_df = generate_asymmetric_futures_trend_signals(df_sim, n_long=20, n_short=10)
print("===== 商品期货非对称趋势信号生成 =====")
print(f"数据天数: {len(df_sim)}")
print(f"多头突破周期 (n_long): 20 日")
print(f"空头突破周期 (n_short): 10 日")
print(f"生成多头信号次数: {(signals_df['signal'] == 1).sum()}")
print(f"生成空头信号次数: {(signals_df['signal'] == -1).sum()}")
print(f"信号序列示例 (最后5天):")
print(signals_df[['close', 'long_trigger', 'short_trigger', 'signal']].tail())===== 商品期货非对称趋势信号生成 =====
数据天数: 50
多头突破周期 (n_long): 20 日
空头突破周期 (n_short): 10 日
生成多头信号次数: 1
生成空头信号次数: 0
信号序列示例 (最后5天):
close long_trigger short_trigger signal
45 5097.303950 5137.905884 5037.072407 0
46 5115.663270 5137.905884 5037.072407 0
47 5101.508256 5137.905884 5037.072407 0
48 5114.932023 5137.905884 5037.072407 0
49 5101.689477 5139.017830 5049.341649 0📝 动手练一练
编写 Python 测试脚本,模拟不同期限结构下商品期货展期收益与多空信号触发:
import pandas as pd
import numpy as np
def calculate_roll_yield(price_near: float, price_far: float, days_diff: int = 30) -> float:
"""计算商品期货年化展期收益率 Roll Yield"""
roll_yield = (np.log(price_near) - np.log(price_far)) * (365.0 / days_diff)
return float(roll_yield)
def generate_asymmetric_futures_trend_signals(df: pd.DataFrame, n_long: int = 20, n_short: int = 10) -> pd.DataFrame:
"""商品期货多空非对称突破信号生成(Python 等价实现)"""
res = df.copy()
res['long_trigger'] = res['high'].rolling(n_long).max().shift(1)
res['short_trigger'] = res['low'].rolling(n_short).min().shift(1)
res['signal'] = 0
res.loc[res['close'] > res['long_trigger'], 'signal'] = 1
res.loc[res['close'] < res['short_trigger'], 'signal'] = -1
return res
# 合成数据:模拟商品期货连续走势(历史回测样例,不代表未来表现)
rng = np.random.default_rng(42)
n_days = 100
base_price = 5000.0
trend = np.linspace(0, 150, n_days) # 包含趋势成分
noise = rng.normal(0, 30, n_days)
prices = base_price + trend + noise
df = pd.DataFrame({
'high': prices + 15 + rng.uniform(0, 10, n_days),
'low': prices - 15 - rng.uniform(0, 10, n_days),
'close': prices
})
# 执行策略原理测试
signals_df = generate_asymmetric_futures_trend_signals(df, n_long=20, n_short=10)
ry = calculate_roll_yield(price_near=5100.0, price_far=5050.0, days_diff=30)
print("================ 商品期货趋势策略原理测试 ================")
print(f"年化展期收益率 Roll Yield: {ry*100:.4f}% (现货升水结构)")
print(f"多头开仓信号数 (20日突破): {(signals_df['signal'] == 1).sum()} 次")
print(f"空头开仓信号数 (10日跌破): {(signals_df['signal'] == -1).sum()} 次")
print(f"总信号生成天数: {signals_df['signal'].abs().sum()} 天")
# 设计型断言:确保在合成数据上信号机制被触发
assert signals_df['signal'].abs().sum() > 0, "趋势信号未正常生成!"
print("✅ 商品期货趋势原理与多空非对称验证 PASS")
print("========================================================")运行结果输出:
================ 商品期货趋势策略原理测试 ================
年化展期收益率 Roll Yield: 11.9870% (现货升水结构)
多头开仓信号数 (20日突破): 2 次
空头开仓信号数 (10日跌破): 0 次
总信号生成天数: 2 天
✅ 商品期货趋势原理与多空非对称验证 PASS
========================================================👉 点击查看解析
该练习演示了商品期货趋势跟踪策略的核心逻辑:通过价格突破或均线等趋势指标判断方向,顺势产生交易信号,并配套止损或反向信号来控制风险。
本章小结
- 把握产业供需大周期:商品期货趋势具备长期性与强动量特征,是量化趋势跟踪策略的天然温床。
- 结合展期收益基差滤网:在多头策略中优选处于现货升水(Backwardation)的强势品种提升持仓胜率。
- 非对称多空周期设计:依据商品熊市下跌更急促的微观特征,合理缩短做空入场窗口。
📋 行动清单 (Action Checklist)
- 运行展期收益测试代码,对比升水与贴水品种的年化展期收益率差异;
- 编写全市场 40 个商品期货品种截面动量排序(Cross-Sectional Momentum)脚本;
- 预习下一节,掌握用 Python 等价实现 TB 经典商品期货趋势策略。
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。
- 下载第7章课件:期货趋势型策略开发PDF · 2.4MB