前言
今天分享的是在写策略过程中可能用到的一些函数,函数类型很杂乱,但是又必不可少!因此也就单开一篇文章详细介绍一下!
具体的开通渠道可以看文章末尾!
一、log——日志记录
这个接口是用来打印日志的,一些策略中的问题,交易过程遇到的困难都是可以再日志记录中找到问题所在,因此比较重要!
log(content)
可以支持下面这些场景的应用,和python的logging用法是一样的
支持如下场景的日志记录:
log.debug("debug")
log.info("info")
log.warning("warning")
log.error("error")
log.critical("critical")
示例
# 打印出一个格式化后的字符串
g.security='600570.SS'
log.info("Selling %s, amount=%s" % (g.security, 10000))
二、is_trade——业务代码场景判断
该接口用于提供业务代码执行场景判断依据,明确标识当前业务代码运行场景为回测还是交易。因部分函数仅限回测或交易场景使用,该函数可以协助区分对应场景,以便限制函数可以在一套策略代码同时兼容回测与交易场景。
is_trade()
示例
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
_id = order(g.security, 100)
if is_trade():
log.info("当前运行场景:交易")
else:
log.info("当前运行场景:回测")
三、check_limit - 代码涨跌停状态判断
这个接口主要用于标识一些涨跌停股票的
比较重要的是一个返回值,具体展示如下
返回
正常返回一个dict类型数据,包含每只股票代码的涨停状态。多只股票代码查询时其中部分股票代码查询异常则该代码返回既不涨停也不跌停状态0。(dict[str:int])
涨跌停状态说明:
2:触板涨停(已经是涨停价格,但还有卖盘);
1:涨停;
0:既不涨停也不跌停;
-1:跌停;
-2:触板跌停(已经是跌停价格,但还有买盘);
示例
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
# 代码涨跌停状态
stock_flag = check_limit(g.security)
log.info(stock_flag)
四、send_email —— 发送邮箱信息
是通过QQ邮箱发送邮件消息的接口,在策略运行过程中,可能不能及时的发现一些突发情况,就可以通过邮箱来获取!
注意事项:
1、该接口需要服务端连通外网,是否开通由所在券商决定
2、是否允许发送附件(即path参数),由所在券商的配置管理决定
3、邮件中接受到的附件为文件名而非附件路径
在使用过程中的一些主要参数!
参数
send_email_info:发送方的邮箱地址,必填字段,如:50xxx00@qq.com(str);
get_email_info:接收方的邮箱地址,必填字段,如:[50xxx00@qq.com, 1xxx10@126.com](list[str]/str);
smtp_code:邮箱的smtp授权码,注意,不是邮箱密码,必填字段(str);
info:发送内容,选填字段,默认空字符串(str);
path:附件路径,选填字段,如:'/home/fly/notebook/stock.csv',默认空字符串(str);
subject:邮件主题,默认空字符串(str);
示例
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
#发送文字信息
send_email('53xxxxxx7@qq.com', ['53xxxxx7@qq.com', 'Kxxxxn@126.com'], 'phfxxxxxxxxxxcd', info='今天的股票池信息')
五、send_qywx ——发送企业微信信息
这个接口可以通过企业微信发送消息,部分朋友可能需要,就一起帖在这里了!
具体的接口函数如下
send_qywx(corp_id, secret, agent_id, info='', path='', toparty='', touser= '', totag= '')
注意事项:
1、该接口需要服务端连通外网,是否开通由所在券商决定
2、是否允许发送文件(即path参数),由所在券商的配置管理决定
3、企业微信不能同时发送文字和文件,当同时入参info和path的时候,默认发送文件
4、企业微信接受到的文件为文件名而非文件路径
其中的一些参数设置
corp_id:企业ID,必填字段(str);
secret:企业微信应用的密码,必填字段(str);
agent_id:企业微信应用的ID,必填字段(str);
info:发送内容,选填字段,默认空字符串(str);
path:发送文件,选填字段,如:'/home/fly/notebook/stock.csv',默认空字符串(str);
toparty:发送对象为部门,选填字段,默认空字符串(str),多个对象之间用 '|' 符号分割;
touser:发送内容为个人,选填字段,默认空字符串(str),多个对象之间用 '|' 符号分割;
totag:发送内容为分组,选填字段,默认空字符串(str),多个对象之间用 '|' 符号分割;
注意:toparty、touser、totag如果都不传入,接口默认发送至应用中设定的第一个toparty
示例
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
#发送文字信息
send_qywx('wwxxxxxxxxxxxxf9', 'hixxxxxxxxxxxxxxxxxxxBX8', '10xxxx3', info='已触发委托买入', toparty='1|2')
六、permission_test——权限校验
该接口用于账号和有效期的权限校验,用户可以在接口中入参指定账号和指定有效期截止日,策略运行时会校验运行策略的账户与指定账户是否相符,以及运行当日日期是否超过指定的有效期截止日,任一条件校验失败,接口都会返回False,两者同时校验成功则返回True。校验失败会在策略日志中提示原因。
permission_test(account=None, end_date=None)
注意事项:
如果需要使用授权模式下载功能,不要在接口中入参,策略编码时候直接调用permission_test(),授权工具会把需要授权的账号和有效期信息放到策略文件中。
该函数仅在initialize、before_trading_start、after_trading_end模块中支持调用
参数
account:授权账号,选填字段,如果不填就代表不需要验证账号(str);
end_date:授权有效期截止日,选题字段,如果不填就代表不需要验证有效期(str),日期格式必须为'YYYYmmdd'的8位日期格式,如'20200101';
示例
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
pass
def after_trading_end(context, data):
# 需要用授权模式下载功能的情况下不用入参
flag = permission_test()
if not flag:
raise RuntimeError('授权不通过,终止程序,抛出异常')
# 不需要用授权模式下载功能的情况下通过入参来进行授权校验
flag = permission_test(account='10110922',end_date='20220101')
if not flag:
raise RuntimeError('授权不通过,终止程序,抛出异常')
七、create_dir——创建文件目录路径
由于ptrade引擎禁用了os模块,因此用户无法在策略中通过编写代码实现子目录创建。用户可以通过此接口来创建文件的子目录路径。
create_dir(user_path=None)
注意事项:
文件根目录路径为'/home/fly/notebook'。
参数
user_path:子目录路径,选填字段,(str)。
比如user_path='download',会在研究中生成/home/fly/notebook/download的目录;
比如user_path='download/2022',会在研究中生成/home/fly/notebook/download/2022的目录;
示例
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
create_dir(user_path=g.security)
def handle_data(context, data):
pass