期权量化学习(4)——K线及指标
找到操作的标的合约,我们就可以调用其历史K线,进行判断分析。
获取基本信息 GetContractInfo (code) 返回一个字典,包含该code的所有信息。
其中期权合约信息的key值有行权比率、名称、期权标的、合约乘数、行权价格、行权方式(int型):0为欧式1为美式;期权类型:0为股票期权,1为指数期权,2为期货期权;
行权到期日(datetime型)、合约存续(int型,65-当日新挂牌69-存续68-当日摘牌48-未上市49-已退市)、合约调整(int型,48-近期未做调整,49-最近10个交易日内合约发生过调整。)、期权种类(int型):0为认购期权,1为认沽期权。
期货合约信息的key值有品种代码、合约乘数、上市日期、名称、最后交易日。
指数信息的key值有名称、基准点数、上市日期。
info1 = GetContractInfo(g.atmopc) print(info1)
#订阅日K线用来驱动onbar事件 SubscribeBar(g.atmopc,BarType.Day)
订阅K线数据—SubscribeBar (code,BarType),订阅品种K线数据,用来驱动OnBar事件。
每天的行情初始化事件,系统会自动退订掉之前订阅的K线,需要重新订阅。
K线类型
K线更新事件OnBar (context, code, type),当有新的一根K线出现时,调用该事件。每当有新的一根K线产生时触发。根据订阅K线的频率触发。
实时行情事件OnQuote (context, code),当有品种行情过来时,调用该事件。按天回测时,每个订阅过行情的合约每天触发会一次,在收盘时触发(一般是交易日的15:00)。
两者都需要提前使用SubscribeQuote订阅行情才能触发,需要在行情初始化事件里SubscribeQuote订阅行情。每天新的行情初始化事件触发时,系统会自动将前一天订阅的行情退订掉,所以每一天都需要重新退订。
定时器OnTimer (context, timerid),在时间达到设置的定时时间时调用;需要配合SetTimer函数使用。
# 在k线出现的时候,如果没持仓就买开,如果有就平仓 def OnBar(context,code,bartype): posi = context.myacc.GetPositions() #获取所有持仓 if len(posi) == 0: #下单买开,2表示最新价 print("买开") QuickInsertOrder(context.myacc,g.atmopc,'buy','open',PriceType(PbPriceType.Limit,2), 10)
elif len(posi) >0: opcode = posi[0].contract print("卖平") #下单卖平,16表示对手价 QuickInsertOrder(context.myacc,opcode,'sell','close',PriceType(PbPriceType.Limit,16), 10)
UnsubscribeBar(g.atmopc,BarType.Day)
获取所有的持仓信息—Account.GetPositions (option),返回一个list,包含符合查询条件的所有持仓对象
快捷下单QuickInsertOrder (account,code,direction,open_or_close,price_type,volume,today_first=True),其中有等号的参数是可不填的,等号后是默认值
PbPriceType 下单价位类型,用于下单、追单时指定价位。可以用于InsertOrder,QuickInsertOrder,等各处下单函数中价格的位置。