量化,是指利用统计办法、数学模型来领导投资,其本质是定性投资的数量化实际,争取通过模型构建出能够继续跑赢市场的投资组合,从而获取超额利润收益。
对冲,是指同时进行两笔行情相干、方向相同、数量相当、盈亏相抵的交易,通过对冲策略升高组合系统性危险,取得对冲后的相对收益。
咱们举个例子:
假如某一股票某年的收益可分为两局部:
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) # 以市价单开多仓到仓位