策略代码:
#coding=utf-8
from __future__ import print_function,absolute_import
from gm.api import*
import string
import pandas as pd
def get_main_future(context):
'''
此函数用于获取全市场当前时间的主力合约
'''
#查询全市场期货合约
ins_data=get_instruments(sec_types=4,df=True)
#筛选掉已经退市的合约
live_future=ins_data[ins_data['delisted_date']>context.now.strftime('%Y-%m-%d')]
#返回当前日期的前一个交易日时间
last_day=get_previous_trading_date(exchange='SHFE',date=context.now.strftime('%Y-%m-%d'))
#获取全市场期货合约前一个交易日的信息
future=get_history_instruments(symbols=live_future['symbol'].tolist(),start_date=last_day,end_date=last_day,df=True)
#对期货合约代码做处理,处理成为‘交易所 名称’的格式
future['name']=future.apply(lambda x:x['symbol'].rstrip(string.digits),axis=1)
#将当前成交量最大的规则筛选出主力合约
future['max_position']=future.groupby('name')['position'].transform('max')
#取出主力合约代码
main_future=future[(future['position']==future['max_position'])&(future['position']>0)]['symbol'].tolist()
#返回主力合约代码
return main_future
#策略中必须有init方法
def init(context):
#高开或者低开的幅度要求
context.multiple=0.01
#定义上轨
context.up=pd.DataFrame()
#定义下轨
context.dowm=pd.DataFrame()
#限制每一支标的的开仓次数最大为5
策略逻辑:
1、判断当天高开或低开时,即当开盘价≥昨天收盘价*1.01或开盘价≤昨天收盘价*0.99。如果为高开,则进入第二步。低开则进入第三步。
2、定义上轨=第一根K线的最高价;如果突破上轨则进入第四步。
3、定义下轨=第一根K线的最低价;如果突破下轨则进入第五步。
4、价格突破上轨,则买入开仓。
5、价格跌穿下轨,则卖出开仓。
6、第二天开盘平所有持仓。