logo

合约对冲量化系统开发案例分析 | 合约对冲量化开发源码

作者:薇ch3nguang2023.04.19 11:59浏览量:50

简介:量化,是指利用统计方法、数学模型来指导投资,其本质是定性投资的数量化实践,争取通过模型构建出可以持续

量化,是指利用统计方法、数学模型来指导投资,其本质是定性投资的数量化实践,争取通过模型构建出可以持续跑赢市场的投资组合,从而获取超额利润收益。

对冲,是指同时进行两笔行情相关、方向相反、数量相当、盈亏相抵的交易,通过对冲策略降低组合系统性风险,获得对冲后的绝对收益。

我们举个例子:
假设某一股票某年的收益可分为两部分:
A:利用量化方法进行选股构建的股票组合,当年收益10%
B:市场调整引起的下跌幅度-15%
在没有对冲的情况下,虽然选出的股票组合跑赢了市场,但并未实现增值。收益率为-5%
假设运用对冲工具,对冲掉市场波动导致的投资组合收益变动,只赚取A部分的投资收益,那么同样的市场环境,该股票仍能实现10%左右正收益。

量化合约对冲交易系统开发一般拥有以下特点:

1、投资范围广泛,投资策略灵活;
2、无论市场上涨还是下跌,均以获取绝对收益为目标;
3、 更好的风险调整收益,长期中对冲基金在获取稳定收益的同时提供了更好的防御性;
4、与主要市场指数相关性低,具备资产配置价值。

量化合约对冲策略系统的开发构建:
1、α策略:用量化选股模型确定股票组合,同时买入股票组合,做空股指期货以对冲股票组合的市场风险(β),获取股票组合超越市场指数的超额预期年化预期收益,即α预期年化预期收益。

2、套利策略:是指利用同一资产标的在不同市场或不同时间的双重定价,低买高卖获取差价的投资策略。可以用来套利的标的资产包括金融指数、商品、基金、期权和外汇等。套利策略常见的子策略有期现套利、跨期套利、分级基金套利和ETF基金套利等。

3、量化CTA基金:说白了就是投向期货市场的期货基金,只不过用量化投资方法研究期货品种的价格变化趋势,以程序化实现交易。以沪深300股指期货为例,沪深300股指期货上涨时做多,下跌时做空,涨跌都盈利。

量化合约对冲交易系统开发源码演示示例:
obj = ext.NewPositionManager() # 使用量化交易类库

此处用来获取持仓信息

positions = exchange.GetPosition() # 获取持仓数组
if len(positions) == 0: # 如果持仓数组的长度是0
return 0 # 证明是空仓,返回0
for i in range(len(positions)): # 遍历持仓数组
if (positions[i][‘Type’] == PD_LONG) or (positions[i][‘Type’] == PD_LONG_YD):
position_long = 1 # 将position_long标记为1

elif (positions[i]['Type'] == PD_SHORT) or (positions[i]['Type'] == PD_SHORT_YD):
    position_short = -1 # 将position_short标记为-1

bar = bars[0]

根据价格落在(-40,-3],(-3,-2],(-2,2],(2,3],(3,40]的区间范围来获取最新收盘价所在的价格区间

grid = pd.cut([close_01], context.band, labels=[0, 1, 2, 3, 4])[0]

若无仓位且价格突破则按照设置好的区间开仓

if not position_long and not position_short and grid != 2:

# 大于3为在中间网格的上方,做多
if grid >= 3:
    obj.OpenLong("rb2005", 1) # 以市价单开多仓到仓位
if grid <= 1:
    obj.OpenShort("rb2005", 1) # 以市价单开空仓到仓位

持有多仓的处理

elif position_long:
if grid >= 3:
obj.OpenLong(“rb2005”, 1) # 以市价单调多仓到仓位

# 等于2为在中间网格,平仓
elif grid == 2:
    obj.closebuy("rb2005", 1) # 以市价单全平多仓

# 小于1为在中间网格的下方,做空
elif grid <= 1:
    obj.closebuy("rb2005", 1) # 以市价单全平多仓
    obj.OpenShort("rb2005", 1) # 以市价单开空仓到仓位

持有空仓的处理

elif position_short:

# 小于1为在中间网格的下方,做空
if grid <= 1:
    obj.OpenShort("rb2005", 1) # 以市价单调空仓到仓位
# 等于2为在中间网格,平仓
elif grid == 2:
    obj.closesell("rb2005", 1) # 以市价单全平空仓

# 大于3为在中间网格的上方,做多
elif grid >= 3:
    obj.closesell("rb2005", 1) # 以市价单全平空仓
    obj.OpenLong("rb2005", 1) # 以市价单开多仓到仓位

相关文章推荐

发表评论