python API
基本方法
编写策略过程中所需要使用的基本函数。其中init和handle_bar是必须实现的两个方法,其余是可选择实现的方法。
init (必须实现)
init(context)
初始化方法--你的算法会使用这个方法来设置你需要的各种初始化配置。context 对象将会在你的算法的所有其他的方法之间进行传递以方便你可以拿取到。
详情参考:'backtest'回测 和 'paper_trading'实际交易模式中 在回测和实时交易只会在启动的时候触发一次。
'pel_call'被PEL公式调用时,在公式被初次加载时被触发一次。
参数参数类型说明context将会在整个算法中当做一个全局变量来使用。属性通过点标记('.')来取到。
范例def init(context):# cash_limit的属性是根据用户需求自己定义的,你可以定义无限多种自己随后需要的属性 context.cash_limit = 5000
handle_bar (必须实现)
函数原型
handle_bar(context)
bar数据的更新会自动触发该方法的调用。策略具体逻辑可在该方法内实现,在实时交易中,该函数在交易时间内会根据选择运行模式被触发。注意:由于该方法可能会被频繁触发,请尽量不要在该函数中放入查询类代码以免运行时间过长,该类逻辑可放在 init() 中执行。
参数参数类型说明context储存策略自定义参数、设置的全局变量,属性通过点标记('.')来取到
范例def handle_bar(context):# 市价开多100手/股。自己构建开仓条件 buy_open('SZ000001', 'Market',0 ,100)
before_trading (选择实现)
函数原型
before_trading(context)
每天在基准合约开盘前30分钟会被调用。不能在这个函数中发送订单。注意:该函数的触发时间取决于用户当前基准合约的交易时间。(仅策略交易状态时有效,'backtest'回测 和 'paper_trading'模式)。
参数参数类型说明context储存策略自定义参数、设置的全局变量,属性通过点标记('.')来取到。
范例
def before_trading (context): #获取平安银行EPS财务字段数据 dataval = fin_indicator('SZ000001','EPS',1,0,0) #将查询到的财务数据保存到context对象中 context.eps = dataval
after_trading (选择实现)
函数原型after_trading(context)
每天在基准合约收盘后5分钟被调用。不能在这个函数中发送订单。您可以在该函数中进行当日收盘后的一些计算。(仅策略交易状态时有效,'backtest'回测 和 'paper_trading'模式)
参数参数类型说明context储存策略自定义参数、设置的全局变量,属性通过点标记('.')来取到。
order_status(选择实现)
函数原型
order_status(context,order)
当委托下单,成交,撤单等与下单有关的动作时,该方法就会被调用。(仅策略交易状态时有效,'backtest'回测 和 'paper_trading'模式)
参数参数类型说明context储存策略自定义参数、设置的全局变量,属性通过点标记('.')来取到。
order用于捕获处理交易过程中产生的各种下单动作,根据捕获的信息,进行相应的处理。
范例def order_status(context,order): #判断柜台回报信息,是否为全部成交。 if order.status=='filled': print('全部成交')
order_action (选择实现)
函数原型
order_action(context,type, account, datas)
当查询交易接口信息时返回的通知。注意:该事件函数仅在融资融券、新股申购操作刷新动作时才会触发,一般账户无效。
参数参数类型说明context储存策略自定义参数、设置的全局变量,属性通过点标记('.')来取到。
typeinttype=1 表示可融券品种查询完成
type=2 表示当日可申购新股查询完成
type=3 表示中签查询完成
accountstr交易账户
datasint数量
type=1时为可融券品种数量
type=2时为新股数量
type=3时为中签新股数量
exit(选择实现)
函数原型exit(context)
用户可以在该函数中处理一些退出后需要做的事情,比如记录一些变量到硬盘等。'backtest'回测模式下,当测评结束时,该函数被调用。
'paper_trading'实际交易模式下,停止策略运行时,该函数被调用。
'pel_call'被PEL公式调用时,在PEL公式关闭时调用。
参数参数类型说明context储存策略自定义参数、设置的全局变量,属性通过点标记('.')来取到。
parameter (选择实现)
parameter()
参数定义区,这里定义的参数可以直接在context对象中获取。--(选择实现)参数定义区定义的变量,可以用于策略运行中动态调整参数。
必须使用input_par函数,定义变量,并且此函数仅支持在parameter()方法内使用。
parameter 方法仅对'backtest'回测 和 'paper_trading'模式有效。
参数
无
范例def parameter(): # 使用input_par函数定义变量'myvalues1',默认值5,最小值1,最大值100,步长1。 input_par('myvalues1',5,1,20,1) # 使用input_par函数定义变量'myvalues2',默认值10,最小值1,最大值100,步长1。 input_par('myvalues2',10,1,20,1) . . .def handle_bar(context): print(context.myvalues1+context.myvalues2)
模式说明
Python策略分为三类:Python策略、Python引用、Python模块
Python策略:Python运行策略
Python引用:编写可用于PEL调用Python模块
Python模块:供Python调用的用户模块或供VBA调用的模块。
上述3类受python运行模式限制,具体区别见下表:
策略分组 支持模式 模式说明
Python策略 paper_trading 交易模式,即进行模拟或者实盘交易状态。
backtest 回测模式,即使用策略回测功能时,绝大部分API函数均支持,部分不支持回测的函数在API函数说明中有具体说明。例如:定时器函数settimer 则不支持回测模式
Python引用 pel_call pel引用python模式,此模式仅支pel_history_bars,log_debug_info,settimer,killtimer 这4个函数的调用,其他的API函数均不可以使用。
Python模块 无 供Python调用的用户模块或供VBA调用的模块
交易函数
buy_open 开多(买开)
函数原型
buy_open(order_book_id,style,price,volume,amount,hedge_flag,order_queue,slithermethod,account)
参数参数类型说明order_book_idstr合约代码,必填项
stylestr交易类型 'Market'市价 'Limit'限价 'Stop'停损,'ThisClose'当前价,必须填
pricefloat交易价格,当交易类型为'Market'市价或'ThisClose'时可以省略,其他类型必须填
volumeint交易数量,单位期货为手,股票为股,默认参数为1
amountfloat交易金额,可以指定本次交易以交易金额为单位,软件会自动换算为相应的交易数量,可以省略
hedge_flagbool交易标志,默认为False, 对于期货品种 True:保值 False投机 ; 对于股票 True:融资 False普通 ;对于期权 True:备兑 False:非备兑,该标志对于回测无效
order_queuebool是否为队列单,默认为False,该标志对于回测无效
slithermethodbool指示是否使用大单处理下单模式,默认为False,该标志对于回测无效
accountstr对指定具体的交易帐号下单,若不指定帐号,对默认登录帐号下单,该标志对于回测无效
返回值
int类型的order_id,即订单id ,当返回-1表示下单失败,失败原因需要翻阅日志记录。
当order_queue或slithermethod为True时,无法返回实际order_id,返回值恒定为0,失败返回 None。
范例#市价委托方式,买入平安银行1000股buy_open('SZ000001', 'Market',0 ,1000)#使用账号'12345'以市价方式买入2手螺纹钢。buy_open('SQRB00', 'Market',0 ,2,account='12345')
sell_close 平多(卖平)
函数原型
sell_close (order_book_id,style,price,volume,amount,hedge_flag,order_queue,slithermethod,account)
参数参数类型说明order_book_idstr合约代码,必填项
stylestr交易类型 'Market'市价 'Limit'限价 'Stop'停损,'ThisClose'当前价,必须填
pricefloat交易价格,当交易类型为'Market'市价或'ThisClose'时可以省略,其他类型必须填
volumeint交易数量,单位期货为手,股票为股,默认参数为1
amountfloat交易金额,可以指定本次交易以交易金额为单位,软件会自动换算为相应的交易数量,可以省略
hedge_flagbool交易标志,默认为False, 对于期货品种 True:保值 False投机 ; 对于股票 True:融资 False普通 ;对于期权 True:备兑 False:非备兑,该标志对于回测无效
order_queuebool是否为队列单,默认为False,该标志对于回测无效
slithermethodbool指示是否使用大单处理下单模式,默认为False,该标志对于回测无效
accountstr对指定具体的交易帐号下单,若不指定帐号,对默认登录帐号下单,该标志对于回测无效
返回值
int类型的order_id,即订单id ,当返回-1表示下单失败,失败原因需要翻阅日志记录。
当order_queue或slithermethod为True时,无法返回实际order_id,返回值恒定为0,失败返回 None。
范例#限价3600元,将当前账户的RBOO品种的20手仓位平掉。(平多)sell_close('SQRB00', 'Limit',3600 ,20)
sell_open 开空(卖开/融券开仓)
函数原型
sell_open (order_book_id,style,price,volume,amount,hedge_flag,order_queue,slithermethod,account)
参数参数类型说明order_book_idstr合约代码,必填项
stylestr交易类型 'Market'市价 'Limit'限价 'Stop'停损,'ThisClose'当前价,必须填
pricefloat交易价格,当交易类型为'Market'市价或'ThisClose'时可以省略,其他类型必须填
volumeint交易数量,单位期货为手,股票为股,默认参数为1
amountfloat交易金额,可以指定本次交易以交易金额为单位,软件会自动换算为相应的交易数量,可以省略
hedge_flagbool交易标志,默认为False, 对于期货品种 True:保值 False投机 ; 对于股票 True:融资 False普通 ;对于期权 True:备兑 False:非备兑,该标志对于回测无效
order_queuebool是否为队列单,默认为False,该标志对于回测无效
slithermethodbool指示是否使用大单处理下单模式,默认为False,该标志对于回测无效
accountstr对指定具体的交易帐号下单,若不指定帐号,对默认登录帐号下单,该标志对于回测无效
返回值
int类型的order_id,即订单id ,当返回-1表示下单失败,失败原因需要翻阅日志记录。
当order_queue或slithermethod为True时,无法返回实际order_id,返回值恒定为0,失败返回 None。
范例#开空sell_open ('SQRB00', 'Limit',3600 ,20)
buy_close 平空(买平/买券还券)
函数原型
buy_close (order_book_id,style,price,volume,amount,hedge_flag,order_queue,slithermethod,account)
参数参数类型说明order_book_idstr合约代码,必填项
stylestr交易类型 'Market'市价 'Limit'限价 'Stop'停损,'ThisClose'当前价,必须填
pricefloat交易价格,当交易类型为'Market'市价或'ThisClose'时可以省略,其他类型必须填
volumeint交易数量,单位期货为手,股票为股,默认参数为1
amountfloat交易金额,可以指定本次交易以交易金额为单位,软件会自动换算为相应的交易数量,可以省略
hedge_flagbool交易标志,默认为False, 对于期货品种 True:保值 False投机 ; 对于股票 True:融资 False普通 ;对于期权 True:备兑 False:非备兑,该标志对于回测无效
order_queuebool是否为队列单,默认为False,该标志对于回测无效
slithermethodbool指示是否使用大单处理下单模式,默认为False,该标志对于回测无效
accountstr对指定具体的交易帐号下单,若不指定帐号,对默认登录帐号下单,该标志对于回测无效
返回值
int类型的order_id,即订单id ,当返回-1表示下单失败,失败原因需要翻阅日志记录。
当order_queue或slithermethod为True时,无法返回实际order_id,返回值恒定为0,失败返回 None。
范例#平空buy_close ('SQRB00', 'Limit',3600 ,20)
get_orders 获取当日委托订单
函数原型
get_orders (order_book_id, type, account)
获取当日委托订单。其数据来自账户栏的“委托记录”中的记录。
参数参数类型说明order_book_idstr合约代码,或者为'all'全部合约,必填项
typeint0:只取未成交订单 1:取全部订单,必须填
accountstr指定具体的交易帐号,若不指定帐号,则取默认登录帐号
返回值
list of Order对象,失败返回 None
范例示例1:#获取当日平安银行所有委托单的价格id_list = get_orders('SZ000001', 1)if not(id_list == None): for i in id_list: write_logging(str(i.price))示例2:#获取所有平安银行的未成交订单order对象a = get_orders('SZ000001', 0)
get_orders_id 获取当日指定id的委托订单
函数原型
get_orders_id (order_id,account)
获取当日指定id的委托订单 。
参数参数类型说明order_idint唯一标识订单的id,必须填
accountstr指定具体的交易帐号,若不指定帐号,则取默认登录帐号
返回值
Order对象,失败返回 None
范例#获取当日订单Id列表id_list=get_orders('SQRB00', 1, '5')#得到上一次委托订单的order对象属性。并输出成交状态。if not(id_list == None): id_last=get_orders_id (id_list[-1].order_id) write_logging(id_last.status)
cancel_order 撤销指定order_id的订单
函数原型
cancel_order (order_id,queue,account)
撤销指定order_id的订单 。(仅策略交易状态时有效,'backtest'回测 和 'paper_trading'模式)
参数参数类型说明order_idint唯一标识订单的id,必须填
queuebool指示是否为队列单,默认为False
accountstr指定具体的交易帐号,若不指定帐号,则取默认登录帐号
返回值
无
范例#获取最近一个订单状态。id_list=get_orders('SQRB00', 1, '5')if not(id_list == None): id_last=get_orders_id (id_list[-1].order_id)#如果最近一次订单状态为未成交,则进行撤单操作。 if id_last.status =='submitted': cancel_order (id_last.order_id)
get_traders 获取当日成交订单
函数原型
get_traders (order_book_id, account)
获取当日成交订单
参数参数类型说明order_book_idstr合约代码,或者为'all'全部合约,必填项
accountstr指定具体的交易帐号,若不指定帐号,则取默认登录帐号
返回值
list of trader对象,失败返回 None
范例#获得平安银行当日第一笔成交单的类型a = get_traders('SZ000001')if not(a==None): print(a[0].type)
get_account 得到投资者账户信息
函数原型
get_account (type,account)
得到投资者账户信息。
参数参数类型说明int账户信息类别,参数同PEL,必须填
accountstr指定具体的交易帐号,若不指定帐号,则取默认登录帐号
返回值
返回相应账户信息数值,失败返回None
范例#获取账号'60032182'当前的浮动盈利get_account(4,'60032182')
get_account_book 得到当前登录所有账户列表
函数原型
get_a