开发问题
这里汇总了一些在 PythonGo 开发过程中可能会遇到的问题
数据提取相关问题
get_InstListByExchAndProduct 查询期权数据的具体参数
IO 期权用 IO
,ETF 期权用 ETF_O
,其他商品期权用品种名
数据类型可以看该方法的注释
怎么取 50ETF 期权的所有合约数据
def get_etf50_data(self) -> list:
products = ctaEngine.getInstListByExchAndProduct("SSE", "ETF_O")
return list(filter(lambda x: x['ProductClass'] == b'8' and x['UnderlyingInstrID'] == '510050', products))
fak,fok,以及普通发单方式的区别?
如何获取价格?
收盘价:K 线:bar.close,tick 行情:tick.close
买卖价:只有 tick 数据有,bar 数据中没有
有的数据有五档行情,有的数据没有五档行情,如果你在你的无限易软件界面中能看到该合约的五档行情,那么就可以在 PythonGo 中取到五档行情数据
如何获取保证金?
保证金占用可以使用 get_investor_account
方法
如果想获取某品种的保证金,暂时没有接口获取保证金预估。
但是无限易客服 QQ 群:335124099 中有预估保证金的 Excel 模板【群文件 - 实用工具 - 无限易期权预估保证金动态计算】,可以参考一下。
如何获取多合约的数据?
vtSymbol 可以写入多合约,以英文分号隔开,例如:IC2209;ru2209
,交易所字段也以同样格式写即可
但是需要注意,loadBar, BarManager 和 ArrayManager 也需要进行相应设定
多合约 tick 数据的传入顺序?
根据无限易面板更新时间决定,无限易面板更新了,就会传入,可以看无限易【实时行情 - 更新时间】
如何获取发单后委托状态变化后的合约状态?
继承 onOrder 函数后,通过 self.orderId 或者 order.status 可以看到
没有行情数据?
除 QuantFair 以外的行情都来源于期货公司,需要去问期货公司
交易所套利合约如何获取历史数据和 tick 数据?如何发单?
- 交易所标准套利合约没有历史数据,也没有 tick 数据,需要自己合成
- 发单可以选择对套利合约发单,而不是对两腿分别发单
获取不了标准套利合约的 K 线,获取出来价格都是 0?
交易所的套利没有 K 线,交易所套利合约 因为交易所不发布成交价 所以没法落第数据成为 K 线
self.buy() 函数内部合约是否可以填套利合约?
合约名称与无限易界面上的行情名称一致就可以
onOrder 什么时候调用?
委托变化之后就调用,其中,一定注意:发单未成交也算委托状态变化
订阅多合约后怎么区分不同合约的 tick 数据?
根据 tick.symbol 或 tick.vtSymbol 字段
收盘了,但是我还是想要 tick 数据进行策略的测试怎么办呢?
使用模拟客户端登录 QuantFair_2.历史回放_7*24 站点
错误集锦
为什么改了策略文件名字就无法运行了?
策略文件名需要和策略类名一致
为什么我再次加载策略,无法在加载实例处找到之前加载过是实例?
- 第一次加载的时候策略有错误被终止
- 无限易直接退出没有点暂停,需要点击暂停才会保存该实例
- 策略的 className 写的不对,className 需要和策略名(策略类名)一致
明明已经在代码里面写了合约和交易所,为什么加载的时候显示参数为空?
不建议把合约和交易所写在代码里,请从 PythonGo 界面传入
明明有持仓却显示平仓时持仓不足?
- 没有可平量,发了平仓单,错单被拒,看实时持仓窗口的可平量栏位。可能是之前有发平仓的单子,未成交,占用了可平量
- 考虑平仓和平今
KeyError: '合约名称' : {'errCode': '0001', 'errMsg': '0001'}
错误原因是你直接在 __init__
方法中设置了合约,但是没有在 __init__
方法中的最后面调用 self.onUpdate
方法
我们不建议你将合约直接写在策略文件中,正确做法是在 PythonGo 界面设置好合约
闪退
点击开始运行策略的时候闪退
策略代码有问题,请检查代码,尤其是 onStart
, setParam
, onUpdate
函数
关于已有策略的说明
DMA 和 KC 策略中关于周期的参数设定
最小不能小于 2,因为需要算均值,最小是 2
最大不能大于自己设定的 size 的值
关于 vtSymbol 的填写
合约名称与无限易界面上的行情名称一致就可以(包括套利合约,只要是和你的实时行情中合约的名字一样就行)
实时行情没有的合约无法获取,所以需要注意自己登录的是期货账号还是期权账号,是否在实时行情处能看到该合约
由于有的交易所用的是大写字母合约,有的是小写字母,所以请一定注意合约名称的大小写
其他
每种回调函数的调用是异步还是同步?
同步
为什么策略有些合约合成不了最后一根 K 线
因为该交易时段最后一个 tick 没有推送过来,程序不知道这一分钟已经结束了,所以合成不了,需要等到下一个交易时段第一个 tick 推送过来后才能继续合成。