期权量化学习(3)——找到交易对象
简单来看,登陆账户并了解了账户信息后,我们就可以进行交易了;交易的前提是我们要以行情数据(事件)为基础。
行情初始化事件—OnMarketQuotationInitialEx(context, exchange, daynight)
触发时间,行情初始化时触发,一般夜盘交易所在晚上20点40分左右调用,白盘交易所在早上8点40左右调用。每个交易所的行情初始化是分开的。即每个交易所行情初始化时都会触发该事件。上交所、深交所、中金所因为没有夜盘不会在夜盘初始化时触发。
1 2 3 4 5 | #每天行情初始化的,获取当前的豆粕期货主力合约作为标的,获取对应的平价期权 def OnMarketQuotationInitialEx(context, exchange,daynight): #过滤掉非大商所的信号 if exchange ! = 'DCE' or daynight! = 'night' : return <br> print ( '登陆交易账户' ) |
参数:
context:上下文信息对象
exchange:行情市场代码,表示此次初始化事件对应的是哪个交易所,交易所代码是全部大写组成,小写的话平台将不与识别
上交所-SHSE、深交所-SZSE、上期所-SHFE、大商所-DCE、郑商所-CZCE、中金所-CFFEX、上海能源中心-INE
daynight:夜盘或者日盘标志,表示此次初始化的是夜盘还是白盘,'night'表示夜盘,会在晚上20点40分左右行情初始化,'day'表示白盘,在早上8点40左右行情初始化
开盘事件OnExchangeOpen(context, accountname, exchangecode, productcode),市场开盘时调用(之前必须先登录账号)
收盘事件OnExchangeClose(context, accountname, exchangecode, productcode),市场收盘时调用(之前必须先登录账号)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #收盘后打印资金情况 def OnExchangeClose(context, accountname, exchangecode, productcode): if exchangecode = = 'DCE' : print ( '收盘啦++++++++++++++++++++++' ) bal = context.myacc.AccountBalance print ( '资金余额: ' + str (bal.CashBalance)) print ( '昨日资金余额: ' + str (bal.CashBalanceYesterday)) print ( '当日手续费: ' + str (bal.DailyFee)) print ( '当日盈亏: ' + str (bal.CashBalance - bal.CashBalanceYesterday)) print ( '浮动盈亏: ' + str (bal.FloatingProfit)) print ( '可用保证金: ' + str (bal.AvailableMargin)) print ( '持仓占用保证金: ' + str (bal.FrozenMargin)) print ( '净资产: ' + str (bal.NetAssets)) print ( '动态权益: ' + str (bal.DynamicNetAssets)) print ( '风险度: ' + str (bal.RiskDegree)) |
品种主力合约—GetMainContract (ExchangeCode, VarietyCode, Type),用于查询某一品种的主力合约
1 2 3 | #获取主力合约期权标的 g.biaodi = GetMainContract( 'DCE' , 'm' , 20 ) print (g.biaodi) |
常见的交易所代码以及品种代码: https://quant.pobo.net.cn/doc?name=api#%E9%99%84%E5%BD%95%E5%9B%9B-%E5%B8%B8%E8%A7%81%E7%9A%84%E4%BA%A4%E6%98%93%E6%89%80%E4%BB%A3%E7%A0%81%E4%BB%A5%E5%8F%8A%E5%93%81%E7%A7%8D%E4%BB%A3%E7%A0%81
查询交易所信息—GetExchangeInfo, 一个词典,包含id对应的交易所信息,字段有:代码、名称、简称
1 2 | exchange = GetExchangeInfo( 'DCE' ) print (exchange) |
获取标的K线——GetHisData2 (code, bar_type=BarType.Day, start_date=None, end_date=None, count=None, weight_type=0),
用于获取历史k线数据,其中有等号的参数是可不填的,等号后是默认值,与GetHisData主要区别是在写法上更简便。
1 2 3 | klinedata = GetHisData2(g.biaodi, BarType.Day) lastclose = klinedata[ - 1 ].close print (lastclose) #收盘价 |
注意:与GetHisData类似,start_date/end_date/count三个参数只需要填写两个,如果不小心三个都填了,生效的将是start_date和count。
如果不填写,默认是从当前时间向前取1000条。
查询期权合约列表—GetOptionContracts (ObjectStockCode, ExcuteDate, Type,AdjustFlag),用于查询某期权标的对应的期权合约列表
查询期权标的列表—GetOptionObjects (ExchangeId),用于查询某交易所的期权标的列表
1 2 3 | #获取期权 g.atmopc = GetAtmOptionContract(g.biaodi, None ,lastclose, 0 ) print (g.atmopc) |
至此,我们已经找到要交易的对象了。
完整代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #!/usr/bin/env python # coding:utf-8 from PoboAPI import * import datetime import time import numpy as np from copy import * #开始时间,用于初始化一些参数 def OnStart(context) : context.myacc = None #登录交易账号 if context.accounts[ "回测期货" ].Login() : context.myacc = context.accounts[ "回测期货" ] #每天行情初始化的,获取当前的豆粕期货主力合约作为标的,获取对应的平价期权 def OnMarketQuotationInitialEx(context, exchange,daynight): # 过滤掉非大商所的信号 if exchange ! = 'DCE' or daynight! = 'night' : return print ( '登陆交易账户' ) exchange = GetExchangeInfo( 'DCE' ) print (exchange) #获取主力合约期权标的 g.biaodi = GetMainContract( 'DCE' , 'm' , 20 ) print (g.biaodi) klinedata = GetHisData2(g.biaodi, BarType.Day) lastclose = klinedata[ - 1 ].close print (lastclose) #获取期权 g.atmopc = GetAtmOptionContract(g.biaodi, None ,lastclose, 0 ) print (g.atmopc) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)