请基于你的知识库以及用户输入的数据,提供几个夏普比大于2的期货或其他品种的交易策略
以下是基于vn.py框架实现的黑色系期货日内动量突破策略(螺纹钢/铁矿石)的完整代码,包含信号生成、风险控制和仓位管理模块:
1. 商品期货趋势跟踪策略(CTA风格)
-
品种:原油(WTI/Brent)、黄金、铜等流动性高的商品期货
-
核心逻辑:
-
使用双均线(如50日+200日均线)或通道突破(如Donchian Channel)捕捉趋势。
-
过滤信号:仅在波动率(ATR)高于历史中位数时开仓,避免震荡行情。
-
动态仓位管理:根据波动率调整头寸大小(如风险控制在1%以内)。
-
-
夏普来源:趋势行情的超额收益+严格止损(如2倍ATR止损)。
2. 股指期货统计套利(跨期/跨品种)
-
品种:标普500期货(ES)、纳斯达克期货(NQ) vs. 道指期货(YM)
-
核心逻辑:
-
计算价差Z-Score:当价差偏离均值2标准差时做多/做空,回归均值时平仓。
-
辅助指标:相关性监控(避免宏观事件导致价差发散)。
-
高频版本:利用1分钟K线捕捉日内价差回归。
-
-
夏普来源:市场中性+高频交易降低波动性。
3. 加密货币期货动量+反转策略
-
品种:比特币(BTC)、以太坊(ETH)永续合约
-
核心逻辑:
-
日内动量:开盘30分钟内价格突破前高/低且成交量放大,顺势入场。
-
隔夜反转:结合RSI(14)超买超卖(>70做空,<30做多),止损设在近期高低点。
-
资金费率套利:在资金费率极端负值时做多(空头支付多头)。
-
-
夏普来源:加密货币的高波动性+多因子过滤。
4. 国债期货期限结构策略
-
品种:美国10年期国债期货(ZN)、2年期国债期货(ZT)
-
核心逻辑:
-
当收益率曲线陡峭化时做多短端(ZT)、做空长端(ZN),平坦化时反向操作。
-
触发条件:10年-2年利差突破布林带上下轨。
-
对冲工具:加入VIX期货控制风险偏好变化的影响。
-
-
夏普来源:宏观经济逻辑驱动+低相关性资产组合。
5. 农产品季节性套利
-
品种:大豆(ZS) vs. 玉米(ZC)期货
-
核心逻辑:
-
历史季节性分析:每年5-6月做多大豆/做空玉米(种植面积切换窗口)。
-
基本面验证:USDA报告发布前后调整仓位。
-
止损规则:若价差在3个交易日内不利变动2%,则平仓。
-
-
夏普来源:季节性规律+严格时间窗口控制。
关键优化点(提升夏普比率)
-
过滤假信号:加入波动率、成交量或宏观经济事件日历过滤。
-
动态止损:根据品种特性设置移动止损(如追踪止损)。
-
多周期确认:结合日线趋势和小时线入场点。
-
组合分散:多品种、多策略组合降低回撤。
请基于你的知识库以及用户输入的数据,提供几个夏普比大于2的适用于中国期货的交易策略
策略1:黑色系期货日内动量突破(适用于螺纹钢、铁矿石)
品种
螺纹钢(RB)、铁矿石(I)(流动性高,波动大)
核心逻辑
-
信号生成:
-
5分钟K线,价格突破前2小时最高价且成交量>20日均量1.5倍时做多(反向同理)。
-
过滤条件:仅在大商所铁矿石库存周环比下降时参与做多(基本面验证)。
-
-
止损止盈:
-
固定止损0.5%(螺纹钢波动较小),动态止盈(3倍ATR追踪止损)。
-
-
时间窗口:
-
仅交易上午10:00-11:30和下午13:30-15:00(避免夜盘流动性不足)。
-
夏普来源
-
黑色系受政策(如限产)驱动趋势性强,日内动量效应显著。
策略2:化工品跨期套利(适用于PTA、甲醇)
品种组合
PTA(TA)主力合约 vs. 次主力合约(价差套利)
核心逻辑
-
价差统计:
-
计算主力-次主力合约价差的10日Z-Score,当Z>2时做空价差(做多次主力/做空主力),Z<-2时反向操作。
-
-
基本面过滤:
-
PTA加工费(PX价差)<300元/吨时,禁止做空主力合约(成本支撑)。
-
-
平仓条件:
-
价差回归至20日均线或持仓超过5个交易日强制离场。
-
夏普来源
-
化工品合约换月时机构调仓带来的价差回归机会。
策略3:农产品季节性+天气驱动(适用于豆粕、棕榈油)
品种
豆粕(M)、棕榈油(P)(受外盘和天气影响大)
核心逻辑
-
季节性窗口:
-
每年7-8月做多豆粕(北美干旱炒作)+做空棕榈油(东南亚增产季)。
-
-
事件触发:
-
USDA报告发布后,若单产下调超2%,立即做多豆粕(次日开盘入场)。
-
-
对冲管理:
-
棕榈油头寸需匹配马来西亚BMD期货夜盘波动(避免隔夜跳空风险)。
-
夏普来源
-
农产品供需错配的爆发性行情+季节性规律稳定。
策略4:股指期货隔夜反转(适用于沪深300股指期货)
品种
沪深300股指期货(IF)
核心逻辑
-
反转信号:
-
当日收盘价跌幅>2%且成交量放大,次日开盘做多(超跌反弹)。
-
-
过滤条件:
-
仅当陆股通北向资金当日净流入>50亿元时触发(外资抄底信号)。
-
-
离场规则:
-
持仓不超过3天,盈利达1.5%或亏损达1%时平仓。
-
夏普来源
-
A股“过度反应-修正”特性显著,北向资金增强信号可靠性。
策略5:贵金属避险对冲(适用于黄金、白银)
品种
黄金(AU)、白银(AG)(上期所)
核心逻辑
-
趋势跟随:
-
当沪金价格突破60日均线且人民币汇率贬值>0.5%时做多(双重驱动)。
-
-
对冲组合:
-
做多黄金同时做空沪深300期货(股灾避险组合)。
-
-
波动控制:
-
黄金仓位权重=1/(20日波动率),动态调整。
-
夏普来源
-
黄金与权益资产的负相关性+人民币汇率波动放大收益。
关键优化点(中国特有问题)
-
主力合约换月:
-
提前5天移仓至次主力合约(避免交割月流动性风险)。
-
-
涨跌停板:
-
触发涨跌停时,立即平仓同方向头寸(防止次日极端跳空)。
-
-
政策监控:
-
交易所提保、手续费调整等公告发布后暂停策略1天。
-
-
数据源:
-
使用Wind或国泰君安数据获取库存、开工率等本土指标。
-
from vnpy.app.cta_strategy import ( CtaTemplate, StopOrder, TickData, BarData, TradeData, OrderData, BarGenerator, ArrayManager ) from vnpy.trader.constant import Interval, Direction, Offset class BlackMomentumStrategy(CtaTemplate): """黑色系日内动量突破策略""" author = "YourName" # 策略参数 breakout_window = 24 # 2小时突破窗口(5分钟K线*24=2小时) volume_multiplier = 1.5 # 成交量放大倍数 fixed_size = 1 # 每次交易手数 stop_loss_pct = 0.005 # 固定止损0.5% trailing_atr_ratio = 3 # 动态止盈ATR倍数 # 策略变量 intraday_high = 0 intraday_low = 0 atr_value = 0 current_tick = None parameters = [ "breakout_window", "volume_multiplier", "fixed_size", "stop_loss_pct", "trailing_atr_ratio" ] variables = [ "intraday_high", "intraday_low", "atr_value" ] def __init__(self, cta_engine, strategy_name, vt_symbol, setting): super().__init__(cta_engine, strategy_name, vt_symbol, setting) # 创建K线合成器(5分钟) self.bg = BarGenerator(self.on_bar, interval=Interval.MINUTE, window=5) # 使用ArrayManager管理K线序列(默认100根) self.am = ArrayManager(size=100) def on_init(self): """策略初始化""" self.write_log("策略初始化") self.load_bar(10) # 加载10天历史数据 def on_start(self): """策略启动""" self.write_log("策略启动") self.put_event() def on_stop(self): """策略停止""" self.write_log("策略停止") self.put_event() def on_tick(self, tick: TickData): """Tick更新""" self.current_tick = tick self.bg.update_tick(tick) def on_bar(self, bar: BarData): """5分钟K线处理""" # 更新K线到ArrayManager self.am.update_bar(bar) if not self.am.inited: return # 计算技术指标 self.atr_value = self.am.atr(14) self.intraday_high = self.am.high[-self.breakout_window:].max() self.intraday_low = self.am.low[-self.breakout_window:].min() vol_ma20 = self.am.sma(self.am.volume, 20) # 过滤交易时间段(上午10:00-11:30,下午13:30-15:00) if not (100000 <= bar.datetime.time().hour * 100 + bar.datetime.time().minute <= 113000 or 133000 <= bar.datetime.time().hour * 100 + bar.datetime.time().minute <= 150000): return # 撤销未成交订单 self.cancel_all() # 无持仓时检查信号 if self.pos == 0: # 突破上轨且放量 if bar.close_price > self.intraday_high and bar.volume > vol_ma20 * self.volume_multiplier: self.buy(bar.close_price + 5, self.fixed_size) # 突破下轨且放量 elif bar.close_price < self.intraday_low and bar.volume > vol_ma20 * self.volume_multiplier: self.short(bar.close_price - 5, self.fixed_size) # 有持仓时处理止损止盈 elif self.pos > 0: # 多头持仓 # 固定止损 stop_price = bar.close_price * (1 - self.stop_loss_pct) # 动态止盈(最高价回撤3倍ATR) trail_price = self.am.high[-self.breakout_window:] - self.atr_value * self.trailing_atr_ratio stop_price = max(stop_price, trail_price) self.sell(stop_price, abs(self.pos), stop=True) elif self.pos < 0: # 空头持仓 # 固定止损 stop_price = bar.close_price * (1 + self.stop_loss_pct) # 动态止盈(最低价反弹3倍ATR) trail_price = self.am.low[-self.breakout_window:] + self.atr_value * self.trailing_atr_ratio stop_price = min(stop_price, trail_price) self.cover(stop_price, abs(self.pos), stop=True) self.put_event() def on_order(self, order: OrderData): """委托更新""" pass def on_trade(self, trade: TradeData): """成交更新""" self.put_event() def on_stop_order(self, stop_order: StopOrder): """停止单更新""" pass