深入框架
pythongo.base

本模块是最重要的一个模块,定义了一些父类,几乎所有策略都需要继承本模块中的父类。

继承简介

在 Python 中,子类通过继承语法继承父类后,可以拥有父类的所有属性或方法,这样极大的减少了重复的代码,可以让代码更加简洁高效。

当我们继承父类后,拥有了父类的所有属性和方法,有时候我们需要对该父类的一些方法进行重写,但同时还需要继续使用父类的方法,这个时候就需要使用 super() 函数了。

因为我们对该方法重写后,再使用 self.method_name() 准备调用父类的方法,会发现其实调用的还是自身类(子类)的方法,也就是你自己重写后的方法,这个时候需要使用 super().method_name() 来调用父类的同名方法,就能达到我们想要的效果了。

具体的继承概念可以自行查阅互联网资料。

BaseParams

参数映射模型

定义好的映射关系,会展示在「PythonGO 窗口 - 参数」一栏,这样就可以在界面直接编辑参数

默认定义了 exchange(交易所代码) 和 instrument_id(合约代码),这两个参数是固定参数,在继承本类后,你可以不再定义这两个参数,但建议还是显式的定义这两个参数。

BaseState

状态映射模型

定义好的映射关系,会展示在「PythonGO 窗口 - 状态」一栏,数据仅供显示,无法编辑

BaseStrategy

策略模板

所有策略的父类,定义好了回调函数,以及一些全局变量,还封装了一些获取数据的方法

strategy_id

类型:int

策略实例 ID

由无限易自动自增赋值,不可自行更改

一个客户端中,每创建一个实例,ID1

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()

设置策略参数

修改界面参数时无限易主动调用,自己无需使用

参数:

参数名类型描述
datadict[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 推送回调

参数:

参数名类型描述
tickTickData行情切片数据对象

on_contract_status()

合约状态变化回调

参数:

参数名类型描述
statusInstrumentStatus合约状态对象

on_order_cancel()

收到撤单推送回调

参数:

参数名类型描述
orderOrderData报单数据对象

on_order_trade()

收到报单成交推送回调

回调是 on_order 主动触发的,等同于 on_trade,最好使用 on_trade

参数:

参数名类型描述
orderOrderData报单数据对象

on_order()

报单变化回调

报单成功就会进入此回调

参数:

参数名类型描述
orderOrderData报单数据对象

on_trade()

报单成交推送回调

参数:

参数名类型描述
tradeTradeData成交数据对象
logbool是否输出成交日志

on_error()

收到报单错误推送回调

参数:

参数名类型描述
errordict[str, str]错误信息 包含 errCode (错误代码) 和 errMsg (错误信息)

其中需要注意的就是当 errCode0004 的时候,是撤单错误,你可以根据该值做一些撤单错误后的处理。

pause_strategy()

暂停策略函数

效果和客户端点击暂停一样

请勿在 on_starton_stop 中使用本方法,否则会进入死循环

output()

输出信息到控制台

参数:

参数名类型描述默认值
*msgAny准备输出的信息,支持任意类型和任意参数必填

sub_market_data()

订阅合约行情函数

使用此方法订阅合约时,交易所代码和合约代码可以为空,当两者为空时,会自动取 self.exchange_listself.instrument_list 中的合约来订阅

参数:

参数名类型描述默认值
exchangestr交易所代码None
instrument_idstr合约代码None

unsub_market_data()

取消订阅合约行情函数

sub_market_data 注意事项

参数:

参数名类型描述默认值
exchangestr交易所代码None
instrument_idstr合约代码None

sync_position()

同步持仓数据函数

该方法会从无限易获取所有帐号的持仓并存储到 self._position 中。 self.get_position 会自动调用该方法,如无特殊情况,自己无需调用。

get_position()

获取持仓数据函数

参数:

参数名类型描述默认值
instrument_idstr合约代码必填
hedgeflagTypeHedgeFlag投机套保标志"1"
investorstr资金账号(默认使用查询到的第一个帐号)None

返回:

类型描述
Position单合约的双向持仓数据

send_order()

报单函数(开仓)

参数:

参数名类型描述默认值
exchangestr交易所代码必填
instrument_idstr合约代码必填
volumeint报单手数必填
pricefloat | int报单价格必填
order_directionTypeOrderDIR报单方向必填
order_typeTypeOrderFlag报单指令"GFD"
investorstr报单账号""
hedgeflagTypeHedgeFlag投机套保标志"1"
marketboolTrue 市价单,False 非市价单False
memoAny报单备注None

返回:

类型描述
int | None报单编号(-1 为报单失败)

auto_close_position()

自动平仓函数(平今优先)

当平上期所、能源中心仓位的时候,如果既平了昨仓,又平了今仓,只会返回最后一次平仓的报单编号

参数:

参数名类型描述默认值
exchangestr交易所代码必填
instrument_idstr合约代码必填
volumeint报单手数必填
pricefloat | int报单价格必填
order_directionTypeOrderDIR报单方向必填
order_typeTypeOrderFlag报单指令"GFD"
investorstr报单账号""
hedgeflagTypeHedgeFlag投机套保标志"1"
shfe_close_firstbool上期平仓(昨仓)优先False
memoAny报单备注None

返回:

类型描述
int | None报单编号(-1 为报单失败)

cancel_order()

撤单函数

参数:

参数名类型描述默认值
order_idint报单编号必填

返回:

类型描述
int-1 表示报单编号不存在,0 表示撤单请求发送成功(不代表撤单成功)

make_order_req()

发送报单请求函数

参数:

参数名类型描述默认值
exchangestr交易所代码必填
instrument_idstr合约代码必填
volumeint报单手数必填
pricefloat | int报单价格必填
order_directionTypeOrderDIR报单方向必填
offsetTypeOffsetFlag开平标志必填
order_typeTypeOrderFlag报单指令必填
investorstr报单账号必填
hedgeflagTypeHedgeFlag投机套保标志必填
marketboolTrue 市价单,False 非市价单False
memoAny报单备注None

返回:

类型描述
int报单编号(-1 为报单失败)

get_account_fund_data()

获取账号资金数据函数

参数:

参数名类型描述默认值
investorstr投资者账号必填

返回:

类型描述
AccountData账号资金数据对象

get_instrument_data()

获取合约信息函数

参数:

参数名类型描述默认值
exchangestr交易所代码必填
instrument_idstr合约代码必填

返回:

类型描述
InstrumentData合约信息数据对象

get_instruments_by_product()

查询指定品种的所有合约信息或者仅合约代码函数

品种代码可以在无限易的「期权 - T 型报价」窗口查询「交易所」和「品种」字段。ETF 期权品种代码是 ETF_O

参数:

参数名类型描述默认值
exchangestr交易所代码必填
product_idstr品种代码必填
raw_databool是否返回原始数据(如果传入 False 则列表中只返回合约代码)True

返回:

类型描述
TypeInstResult所有合约信息数据对象或者仅合约代码字段

get_investor_data()

获取投资者信息函数

参数:

参数名类型描述默认值
indexint帐号的顺序(1 表示第一个,以此类推)1

返回:

类型描述
InvestorData投资者信息数据对象