本模块是最重要的一个模块,定义了一些父类,几乎所有策略都需要继承本模块中的父类。
继承简介
在 Python 中,子类通过继承语法继承父类后,可以拥有父类的所有属性或方法,这样极大的减少了重复的代码,可以让代码更加简洁高效。
当我们继承父类后,拥有了父类的所有属性和方法,有时候我们需要对该父类的一些方法进行重写,但同时还需要继续使用父类的方法,这个时候就需要使用 super()
函数了。
因为我们对该方法重写后,再使用 self.method_name()
准备调用父类的方法,会发现其实调用的还是自身类(子类)的方法,也就是你自己重写后的方法,这个时候需要使用 super().method_name()
来调用父类的同名方法,就能达到我们想要的效果了。
具体的继承概念可以自行查阅互联网资料。
BaseParams
参数映射模型
定义好的映射关系,会展示在「PythonGO 窗口 - 参数」一栏,这样就可以在界面直接编辑参数
默认定义了 exchange
(交易所代码) 和 instrument_id
(合约代码),这两个参数是固定参数,在继承本类后,你可以不再定义这两个参数,但建议还是显式的定义这两个参数。
BaseState
状态映射模型
定义好的映射关系,会展示在「PythonGO 窗口 - 状态」一栏,数据仅供显示,无法编辑
BaseStrategy
策略模板
所有策略的父类,定义好了回调函数,以及一些全局变量,还封装了一些获取数据的方法
strategy_id
类型:int
策略实例 ID
由无限易自动自增赋值,不可自行更改
一个客户端中,每创建一个实例,ID
加 1
strategy_name
类型:str
策略实例名称
「创建实例」时填写的「实例名称」,由无限易自动赋值,不可自行更改
params_map
类型:BaseParams
实例化后的参数映射模型 BaseParams
,用于父类参数映射
state_map
类型:BaseState
实例化后的状态映射模型 BaseState
,用于父类状态映射
limit_time
类型:int
错单限制时间(单位:秒)
控制错单后 N 秒不报单,防止错单后继续发单
trading
类型:bool
是否允许交易
可以控制报单函数是否对外报单,如果设为 False
,则即使调用报单函数也不会报单。
class_name
类型:str
策略的类名
exchange_list
类型:list[str]
交易所列表
通过分号分割 params_map
中的 exchange
得到
实现方法为:
self.params_map.exchange.split(";")
instrument_list
类型:list[str]
合约列表
通过分号分割 params_map
中的 instrument_id
得到
实现方法为:
self.params_map.instrument_id.split(";")
instance_file
类型:str
保存的实例信息文件路径
get_params()
获取策略参数
无限易调用此方法来获取定义好的属性和对应的值,自己无需使用
返回:
类型 | 描述 |
---|---|
list[dict[str, str]] | 定义的策略参数名和参数值 |
set_params()
设置策略参数
修改界面参数时无限易主动调用,自己无需使用
参数:
参数名 | 类型 | 描述 |
---|---|---|
data | dict[str, str] | 修改后的界面参数数据 |
update_status_bar()
更新无限易 PythonGO 窗口状态栏显示值
save_instance_file()
保存实例信息
暂停策略时会主动调用
load_instance_file()
加载实例文件并对策略设置对应属性
on_init
会主动调用
on_init()
创建实例回调
界面创建实例或加载实例会触发此方法
on_start()
启动策略回调
界面点击运行按钮会触发此方法
此方法会将 self.trading
设置为 True
,然后订阅合约行情
on_stop()
停止策略回调
界面点击暂停按钮会触发此方法
此方法会将 self.trading
设置为 False
,保存实例信息,然后取消订阅合约行情
on_tick()
收到行情 tick 推送回调
参数:
参数名 | 类型 | 描述 |
---|---|---|
tick | TickData | 行情切片数据对象 |
on_contract_status()
合约状态变化回调
参数:
参数名 | 类型 | 描述 |
---|---|---|
status | InstrumentStatus | 合约状态对象 |
on_order_cancel()
收到撤单推送回调
参数:
参数名 | 类型 | 描述 |
---|---|---|
order | OrderData | 报单数据对象 |
on_order_trade()
收到报单成交推送回调
回调是 on_order
主动触发的,等同于 on_trade
,最好使用 on_trade
参数:
参数名 | 类型 | 描述 |
---|---|---|
order | OrderData | 报单数据对象 |
on_order()
报单变化回调
报单成功就会进入此回调
参数:
参数名 | 类型 | 描述 |
---|---|---|
order | OrderData | 报单数据对象 |
on_trade()
报单成交推送回调
参数:
参数名 | 类型 | 描述 |
---|---|---|
trade | TradeData | 成交数据对象 |
log | bool | 是否输出成交日志 |
on_error()
收到报单错误推送回调
参数:
参数名 | 类型 | 描述 |
---|---|---|
error | dict[str, str] | 错误信息 包含 errCode (错误代码) 和 errMsg (错误信息) |
其中需要注意的就是当 errCode
为 0004
的时候,是撤单错误,你可以根据该值做一些撤单错误后的处理。
pause_strategy()
暂停策略函数
效果和客户端点击暂停一样
请勿在 on_start
和 on_stop
中使用本方法,否则会进入死循环
output()
输出信息到控制台
参数:
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
*msg | Any | 准备输出的信息,支持任意类型和任意参数 | 必填 |
sub_market_data()
订阅合约行情函数
使用此方法订阅合约时,交易所代码和合约代码可以为空,当两者为空时,会自动取 self.exchange_list
和 self.instrument_list
中的合约来订阅
参数:
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
exchange | str | 交易所代码 | None |
instrument_id | str | 合约代码 | None |
unsub_market_data()
取消订阅合约行情函数
同 sub_market_data
注意事项
参数:
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
exchange | str | 交易所代码 | None |
instrument_id | str | 合约代码 | None |
sync_position()
同步持仓数据函数
该方法会从无限易获取所有帐号的持仓并存储到 self._position
中。 self.get_position
会自动调用该方法,如无特殊情况,自己无需调用。
get_position()
获取持仓数据函数
参数:
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
instrument_id | str | 合约代码 | 必填 |
hedgeflag | TypeHedgeFlag | 投机套保标志 | "1" |
investor | str | 资金账号(默认使用查询到的第一个帐号) | None |
返回:
类型 | 描述 |
---|---|
Position | 单合约的双向持仓数据 |
send_order()
报单函数(开仓)
参数:
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
exchange | str | 交易所代码 | 必填 |
instrument_id | str | 合约代码 | 必填 |
volume | int | 报单手数 | 必填 |
price | float | int | 报单价格 | 必填 |
order_direction | TypeOrderDIR | 报单方向 | 必填 |
order_type | TypeOrderFlag | 报单指令 | "GFD" |
investor | str | 报单账号 | "" |
hedgeflag | TypeHedgeFlag | 投机套保标志 | "1" |
market | bool | True 市价单,False 非市价单 | False |
memo | Any | 报单备注 | None |
返回:
类型 | 描述 |
---|---|
int | None | 报单编号(-1 为报单失败) |
auto_close_position()
自动平仓函数(平今优先)
当平上期所、能源中心仓位的时候,如果既平了昨仓,又平了今仓,只会返回最后一次平仓的报单编号
参数:
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
exchange | str | 交易所代码 | 必填 |
instrument_id | str | 合约代码 | 必填 |
volume | int | 报单手数 | 必填 |
price | float | int | 报单价格 | 必填 |
order_direction | TypeOrderDIR | 报单方向 | 必填 |
order_type | TypeOrderFlag | 报单指令 | "GFD" |
investor | str | 报单账号 | "" |
hedgeflag | TypeHedgeFlag | 投机套保标志 | "1" |
shfe_close_first | bool | 上期平仓(昨仓)优先 | False |
memo | Any | 报单备注 | None |
返回:
类型 | 描述 |
---|---|
int | None | 报单编号(-1 为报单失败) |
cancel_order()
撤单函数
参数:
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
order_id | int | 报单编号 | 必填 |
返回:
类型 | 描述 |
---|---|
int | -1 表示报单编号不存在,0 表示撤单请求发送成功(不代表撤单成功) |
make_order_req()
发送报单请求函数
参数:
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
exchange | str | 交易所代码 | 必填 |
instrument_id | str | 合约代码 | 必填 |
volume | int | 报单手数 | 必填 |
price | float | int | 报单价格 | 必填 |
order_direction | TypeOrderDIR | 报单方向 | 必填 |
offset | TypeOffsetFlag | 开平标志 | 必填 |
order_type | TypeOrderFlag | 报单指令 | 必填 |
investor | str | 报单账号 | 必填 |
hedgeflag | TypeHedgeFlag | 投机套保标志 | 必填 |
market | bool | True 市价单,False 非市价单 | False |
memo | Any | 报单备注 | None |
返回:
类型 | 描述 |
---|---|
int | 报单编号(-1 为报单失败) |
get_account_fund_data()
获取账号资金数据函数
参数:
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
investor | str | 投资者账号 | 必填 |
返回:
类型 | 描述 |
---|---|
AccountData | 账号资金数据对象 |
get_instrument_data()
获取合约信息函数
参数:
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
exchange | str | 交易所代码 | 必填 |
instrument_id | str | 合约代码 | 必填 |
返回:
类型 | 描述 |
---|---|
InstrumentData | 合约信息数据对象 |
get_instruments_by_product()
查询指定品种的所有合约信息或者仅合约代码函数
品种代码可以在无限易的「期权 - T 型报价」窗口查询「交易所」和「品种」字段。ETF 期权品种代码是 ETF_O
参数:
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
exchange | str | 交易所代码 | 必填 |
product_id | str | 品种代码 | 必填 |
raw_data | bool | 是否返回原始数据(如果传入 False 则列表中只返回合约代码) | True |
返回:
类型 | 描述 |
---|---|
TypeInstResult | 所有合约信息数据对象或者仅合约代码字段 |
get_investor_data()
获取投资者信息函数
参数:
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
index | int | 帐号的顺序(1 表示第一个,以此类推) | 1 |
返回:
类型 | 描述 |
---|---|
InvestorData | 投资者信息数据对象 |