值JoinQuant聚宽一周年生日之际,伴随着广大宽粉的期盼,我们推出了金融期货策略研究框架Beta版,现在面向全员进行公测。
主要功能:
提供股指期货的回测与模拟
可同时交易股指期货以及股票,提供各种风险指标
支持分账户操作:股票、股指期货分账户操作,完全无干扰
支持账户之间的资金转移功能,灵活调控每个账户的资金
提供持仓均价, 开仓均价,盯市浮盈, 平仓盈亏、保证金等其他期货软件上都有的数据
可自行设置交易手续费、平今仓手续费、保证金比例等
在保证金不足时,会强制平仓
交割日未卖出时,自动进行交割平仓
完全符合历史上股指期货的开盘、闭盘时间
实时更新保证金,并提供保证金预警功能,随时查看保证金的状态,避免因保证金不足导致的强制平仓
更多功能详见API
还有更多功能等你来发现,小伙伴们赶快来试用吧~~~
下面是一个简单的股指期货策略demo —— 期现套利:
股票现货市场和股指期货市场紧密相连,根据股指期货的制度设计,期货价格在合约到期日会与现货市场标的指数的价格相等。但实际行情中,期货指数价格常受多种因素影响而偏离其合理的理论价格,与现货指数之间的价格差距往往出现过大或过小的情况,一旦这种偏离出现,就会带来在期货市场和现货市场之间套利的机会,我们把这种跨越期市和现市同时进行交易的操作称之为期现套利。
期现套利有两种类型:当现货指数被低估,某个交割月份的期货合约被高估时,投资者可以卖出该期货合约,同时根据指数权重买进成份股,建立套利头寸。当现货和期货价格差距趋于正常时,将期货合约平仓,同时卖出全部成份股,可以获得套利利润,这种策略称为正向基差套利。
当现货指数被高估,某个交割月份的期货合约被低估时,如果允许融券,投资者可以买入该期货合约,同时按照指数权重融券卖空成份股,建立套利头寸。当现货和期货价格趋于正常时,同时平仓,获利了结,这是反向基差套利。
期现套利的实质是对现货指数和期货指数的基差进行投机。基差的变动是可以分析和预测的,分析正确可以获利,即使分析失误套利的风险也远比单向投机的风险低。
因为A股市场没有办法做空,这里只是进行了正向基差套利,我们选择300ETF代替一揽子股票,进行指数跟踪。
策略基本思路:
当基差大于100则买入ETF,卖出股指期货;
当基差缩小至20内,则获利清仓;
金融期货相关函数¶
def get_stock_index_futrue_code(context,symbol,month='current_month'):''' 获取当天时间正在交易的股指期货合约。其中: symbol: 'IF' #沪深300指数期货 'IC' #中证500股指期货 'IH' #上证50股指期货 month: 'current_month' #当月 'next_month' #隔月 'next_quarter' #下季 'skip_quarter' #隔季 '''display_name_dict = {'IC':'中证500股指期货','IF':'沪深300指数期货','IH':'上证50股指期货'}month_dict = {'current_month':0, 'next_month':1, 'next_quarter':2, 'skip_quarter':3}display_name = display_name_dict[symbol]n = month_dict[month]dt = context.current_dt.date()a = get_all_securities(types=['futures'], date=dt)try:df = a[(a.display_name == display_name) & (a.start_date <= dt) & (a.end_date >= dt)]return df.index[n]except:return 'WARRING: 无此合约'def get_treasury_futrue_code(context,symbol,month='current'):''' 获取当天时间正在交易的国债期货合约。其中: symbol: 'T' #10年期国债期货 'TF' #5年期国债期货 month: 'current' #最近期 'next' #次近期 'skip' #最远期 '''display_name_dict = {'T':'10年期国债期货','TF':'5年期国债期货'}month_dict = {'current':0, 'next':1, 'skip':2}display_name = display_name_dict[symbol]n = month_dict[month]dt = context.current_dt.date()a = get_all_securities(types=['futures'], date=dt)try:df = a[(a.display_name == display_name) & (a.start_date <= dt) & (a.end_date >= dt)]return df.index[n]except:return 'WARRING: 无此合约'def get_CCFX_end_date(fature_code):# 获取金融期货合约到期日return get_security_info(fature_code).end_date