主题
系统接口
定时周期性接口
run_daily
中文名
按日周期处理
接口说明
按日周期处理,以日为单位周期性运行指定函数,可对运行触发时间进行指定。
接口定义
python
run_daily(context, func, time="9:31")注意事项
1、该函数只能在初始化阶段 initialize 函数中调用。
2、该函数可以多次设定,以实现多个定时任务。
3、股票策略回测中,当回测周期为分钟时,time 的取值指定在 09:31~11:30 与 13:00~15:00 之间,当回测周期为日时,无论设定值是多少都只会在 15:00 执行;交易中不受此时间限制。
使用场景
❌研究 ✅回测 ✅交易
参数
context
- 类型:
Context
存放有当前的账户及持仓信息,必传字段;
func
- 类型:
Callable[[Context], None]
自定义函数名称,此函数有且只有context一个参数,且该字段不能为量化系统内部定义函数,如handle_data等,必传字段;
time
- 类型:
str
指定周期运行具体触发运行时间点,交易场景可设置范围:00:00~23:59,必传字段。
返回
None
示例
python
# 定义一个财务数据获取函数,每天执行一次
def initialize(context):
run_daily(context, get_finance, time="9:31")
g.security = "600570.XSHG"
set_universe(g.security)
def get_finance(context):
re = get_fundamentals(g.security,"balance_statement","total_assets")
log.info(re)
def handle_data(context, data):
passrun_interval
按设定周期处理,设定时间间隔(单位为秒)周期性运行指定函数,可对运行触发时间间隔进行指定。
python
run_interval(context, func, seconds=10)使用场景
❌研究 ❌回测 ✅交易
注意事项
1、该函数只能在初始化阶段 initialize 函数中调用。
2、该函数可以多次设定,会以多个线程并行运行,但要小心不同线程之间的逻辑关联处理
3、seconds 设置最小时间间隔为 3 秒,小于 3 秒默认设定为 3 秒。
参数
context
- 类型:
Context
存放有当前的账户及持仓信息,必填字段
func
- 类型:
Callable[[Context], None]
自定义函数名称,此函数有且只有context一个参数,且该字段不能为量化系统内部定义函数,如handle_data等,必填字段
seconds
- 类型:
int - 默认:
10
设定时间间隔(单位为秒),取值为正整数,选填字段
返回
None
示例
python
# 定义一个周期处理函数,每10秒执行一次
def initialize(context):
run_interval(context, interval_handle, seconds = 10)
g.security = "600570.SS"
set_universe(g.security)
def interval_handle(context):
snapshot = get_snapshot(g.security)
log.info(snapshot)
def handle_data(context, data):
pass设置接口
set_universe
中文名
设置股票池
接口说明
用于设置或者更新此策略要操作的股票池。
接口定义
python
set_universe(security_list)使用场景
❌研究 ✅回测 ✅交易
注意事项
股票策略中,该函数只用于设定 get_history 函数的默认 security_list 入参;
期货策略中,会获取指定期货代码的交易时间,在指定期货代码的交易时间内执行handle_data函数,不设置时默认以股票交易时间为准。
参数
security_list
- 类型:
list[str]/str
股票列表,支持单支或者多支股票,必填字段
返回
None
示例
python
def initialize(context):
g.security = ["600570.XSHG", "600571.XSHG"]
# 将g.security中的股票设置为股票池
set_universe(g.security)
def handle_data(context, data):
# 获取初始化设定的股票池行情数据
his = get_history(5, "1d", "close", security_list=None)set_benchmark
中文名
设置基准
接口说明
用于设置策略的比较基准,前端展现的策略评价指标都基于此处设置的基准标的。
接口定义
python
set_benchmark(sids)使用场景
❌研究 ✅回测 ✅交易
注意事项
如果不做基准设置,默认选定沪深 300 指数(000300.XSHG)的每日价格作为判断策略好坏和一系列风险值计算的基准。如果要指定其他股票/指数/ETF 的价格作为基准,就需要使用 set_benchmark。
参数
sids
- 类型:
str
股票/指数/ETF/港股通代码,必填字段
返回
None
示例
python
def initialize(context):
g.security = "000001.XSHE"
set_universe(g.security)
#将上证50(000016.XSHG)设置为参考基准
set_benchmark("000016.XSHG")
def handle_data(context, data):
order("000001.XSHE", 100)set_commission
中文名
设置佣金费率
接口说明
用于设置佣金费率。
接口定义
python
set_commission(commission_ratio=0.0003, min_commission=5.0, type="STOCK")使用场景
❌研究 ✅回测 ❌交易
注意事项
- 关于回测手续费计算:手续费=佣金费+经手费+印花税。
- 佣金费=佣金费率*交易总金额(若佣金费计算后小于设置的最低佣金,则佣金费取最小佣金)。
- 经手费=经手费率(万分之 0.487)*交易总金额。
- 印花税=印花税率(千分之1)*交易总金额,仅卖出时收。
参数
commission_ratio
- 类型:
float - 默认:
0.0003
佣金费率,默认股票每笔交易的佣金费率是万分之三,ETF 基金、LOF 基金每笔交易的佣金费率是万分之八,选填字段
min_commission
- 类型:
float - 默认:
5.0
最低交易佣金,默认每笔交易最低扣 5 元佣金,选填字段
type
- 类型:
str - 默认:
STOCK
交易类型,不传参默认为 STOCK(目前只支持 STOCK, ETF, LOF),选填字段
返回
None
示例
python
def initialize(context):
g.security = "600570.XSHG"
set_universe(g.security)
#将佣金费率设置为万分之三,将最低手续费设置为3元
set_commission(commission_ratio=0.0003, min_commission=3.0)
def handle_data(context, data):
passset_fixed_slippage
中文名
设置固定滑点
接口说明
用于设置固定滑点,滑点在真实交易场景是不可避免的,因此回测中设置合理的滑点有利于让回测逼近真实场景。
接口定义
python
set_fixed_slippage(fixedslippage=0.0)使用场景
❌研究 ✅回测 ❌交易
参数
fixedslippage
- 类型:
float - 默认:
0.0
固定滑点,委托价格与最后的成交价格的价差设置,这个价差是一个固定的值(比如 0.02 元,撮合成交时委托价格 ±0.01 元)。最终的成交价格=委托价格 ±float(fixedslippage)/2,选填字段
返回
None
示例
python
def initialize(context):
g.security = "600570.XSHG"
set_universe(g.security)
# 将滑点设置为固定的0.2元,即原本买入交易的成交价为10元,则设置之后成交价将变成10.1元或9.9元
set_fixed_slippage(fixedslippage=0.2)
def handle_data(context, data):
passset_slippage
中文名
设置滑点
接口说明
用于设置滑点比例,滑点在真实交易场景是不可避免的,因此回测中设置合理的滑点有利于让回测逼近真实场景。
接口定义
python
set_slippage(slippage=0.1)使用场景
❌研究 ✅回测 ❌交易
参数
slippage
- 类型:
float - 默认:
0.1
滑点比例,委托价格与最后的成交价格的价差设置,这个价差是当时价格的一个百分比(比如设置 0.002 时,撮合成交时委托价格 ± 当前周期价格*0.001)。最终成交价格=委托价格 ± 委托价格*float(slippage)/2,选填字段
返回
None
示例
python
def initialize(context):
g.security = "600570.XSHG"
set_universe(g.security)
# 将滑点设置为0.002
set_slippage(slippage=0.002)
def handle_data(context, data):
passset_volume_ratio
中文名
设置成交比例
接口说明
用于设置回测中单笔委托的成交比例,使得盘口流动性方面的设置尽量逼近真实交易场景。
接口定义
python
set_volume_ratio(volume_ratio=0.25)使用场景
❌研究 ✅回测 ❌交易
注意事项
假如委托下单数量大于成交比例计算后的数量,系统会按成交比例计算后的数量撮合,差额部分委托数量不会继续挂单。
参数
volume_ratio
- 类型:
float - 默认:
0.25
设置成交比例,即指本周期最大成交数量为本周期市场可成交总量的四分之一,选填字段
返回
None
示例
python
def initialize(context):
g.security = "600570.XSHG"
set_universe(g.security)
#将最大成交数量设置为本周期可成交总量的二分之一
set_volume_ratio(volume_ratio=0.5)
def handle_data(context, data):
passset_limit_mode
中文名
设置成交数量限制模式
接口说明
用于设置回测的成交数量限制模式。对于月度调仓等低频策略,对流动性冲击不是很敏感,不做成交量限制可以让回测更加便捷。
接口定义
python
set_limit_mode(limit_mode="LIMIT")使用场景
❌研究 ✅回测 ❌交易
注意事项
不做限制之后实际撮合成交量是可以大于该时间段的实际成交总量。
参数
limit_mode
- 类型:
str - 默认:
LIMIT
设置成交数量限制模式,即指回测撮合交易时对成交数量是否做限制进行控制,选填字段
默认为限制,入参"LIMIT",不做限制则入参"UNLIMITED"
返回
None
示例
python
def initialize(context):
g.security = "600570.XSHG"
set_universe(g.security)
#回测中不限制成交数量
set_limit_mode("UNLIMITED")
def handle_data(context, data):
passset_yesterday_position
中文名
设置底仓
接口说明
用于设置回测的初始底仓。
接口定义
python
set_yesterday_position(poslist)使用场景
❌研究 ✅回测 ❌交易
注意事项
该函数会使策略初始化运行就创建出持仓对象,里面包含了设置的持仓信息。
参数
poslist
- 类型:
list[dict[str:str],...]
list 类型数据,该 list 中是字典类型的元素,参数不能为空,必填字段
数据格式及参数字段如下:
[{
"sid":标的代码,
"amount":持仓数量,
"enable_amount":可用数量,
"cost_basis":每股的持仓成本价格,
}]
参数也可通过 csv 文件的形式传入,参考接口convert_position_from_csv
返回
None
示例
python
def initialize(context):
g.security = "600570.XSHG"
set_universe(g.security)
# 设置底仓
pos={}
pos["sid"] = "600570.XSHG"
pos["amount"] = "1000"
pos["enable_amount"] = "600"
pos["cost_basis"] = "55"
set_yesterday_position([pos])
def handle_data(context, data):
#卖出100股
order(g.security,-100)set_parameters
中文名
设置策略配置参数
接口说明
用于设置策略中的配置参数,包括:交易中节假日是否执行 before_trading_start;tick_data 中 data 是否包含 order 和 transcation;策略中是否接收非本交易产生的主推;交易时间段若服务器重启,是否自动执行重新拉起本交易;若服务器重启导致重拉交易,是否重复执行 before_trading_start 函数。
接口定义
python
set_parameters(**kwargs)使用场景
❌研究 ✅回测 ✅交易
注意事项
1、该函数入参格式必须为 a=b 样式。
2、not_restart_trade、server_restart_not_do_before 两个入参必须在 initialize 模块中设置
3、not_restart_trade 入参配置说明(交易场景务必了解):
服务器环境重启拉起交易时,initialize 和 before_trading_start 函数会被重复调用,请务必检查策略编写逻辑:
(1)避免在这两个函数中设置无法被系统持久化保存的变量,变量一旦被初始化会导致策略逻辑异常。
(2)避免在这两个函数中调用委托接口,造成重复委托。
您可将 not_restart_trade 入参设置为 1,在交易时间段避免重复执行的问题,交易时间段默认为 09:00-11:30、13:00-15:30,实际以券商的配置为准。
4、server_restart_not_do_before 入参配置说明(交易场景务必了解):
服务器环境重启拉起交易时,before_trading_start 函数默认会被调用,为了避免重复调用带来的一系列问题(同上),您可将 server_restart_not_do_before 入参设置为"1",即一个交易日内 before_trading_start 函数仅调用一次。
参数
holiday_not_do_before
- 类型:
str - 默认:
0
交易中节假日是否执行 before_trading_start。缺省,执行;1,不执行。
tick_data_no_l2
- 类型:
str - 默认:
0
tick_data 中 data 是否包含 order 和 transcation。缺省,包含;1,不包含。
receive_other_response
- 类型:
str - 默认:
0
策略中是否接收非本交易产生的主推。缺省,不接收;1,接收。
receive_cancel_response
- 类型:
str - 默认:
0
策略中是否接收撤单委托产生的主推。缺省,不接收;1,接收。
not_restart_trade
- 类型:
str - 默认:
0
交易时间段若服务器重启,是否自动执行重新拉起本交易。缺省,执行;1,不执行。
server_restart_not_do_before
- 类型:
str - 默认:
0
若服务器重启导致重拉交易,是否重复执行 before_trading_start 函数。缺省,执行;1,不执行。
返回
None
示例
python
def initialize(context):
# 初始化策略
g.security = "600570.XSHG"
set_universe(g.security)
# 设置非交易日不执行before_trading_start
# 设置tick_data中data不包含order和transaction
# 设置接收非本交易产生的主推
# 设置接收撤单委托产生的主推
set_parameters(holiday_not_do_before="1", tick_data_no_l2="1", receive_other_response="1",
receive_cancel_response="1", not_restart_trade="1", server_restart_not_do_before="1")
def before_trading_start(context, data):
log.info("do before_trading_start")
g.count = 0
def on_order_response(context, order_list):
log.info("委托主推:%s" % order_list)
def on_trade_response(context, trade_list):
log.info("成交主推:%s" % trade_list)
def tick_data(context, data):
if g.count == 0:
log.info(data[g.security])
g.count += 1
def handle_data(context, data):
passset_email_info
中文名
设置邮件信息
接口说明
该函数用于设置邮件信息,当交易报错终止时会发送提示邮件。
接口定义
python
set_email_info(email_address, smtp_code, email_subject)使用场景
❌研究 ❌回测 ✅交易
注意事项
如要使用该函数,需咨询券商当前环境是否支持发送邮件。
当前仅支持设置QQ邮箱地址。
参数
email_address
- 类型:
str
邮箱地址(发送方与接收方一致),必填字段
smtp_code
- 类型:
str
邮箱SMTP授权码,必填字段
email_subject
- 类型:
str
邮件主题,必填字段
返回
bool:
- 正常返回True
- 失败返回False
示例
python
def initialize(context):
g.security = "600570.XSHG"
set_universe(g.security)
# 设置邮件信息
set_email_info("2222@qq.com", "AABB", "【PTrade量化-策略交易异常终止提醒】")
def before_trading_start(context, data):
raise BaseException("test send error email")
def handle_data(context, data):
pass其他接口
log
中文名
日志记录
接口说明
用于打印日志,与 python 的 logging 模块用法一致。
接口定义
python
log.debug("debug")
log.info("info")
log.warning("warning")
log.error("error")
log.critical("critical")使用场景
❌研究 ✅回测 ✅交易
参数
参数可以是字符串、对象等。
返回
None
示例
python
# 打印出一个格式化后的字符串
g.security='600570.XSHG'
log.info("Selling %s, amount=%s" % (g.security, 10000))is_trade
中文名
业务代码场景判断
接口说明
用于提供业务代码执行场景判断依据,明确标识当前业务代码运行场景为回测还是交易。因部分函数仅限回测或交易场景使用,该函数可以协助区分对应场景,以便限制函数可以在一套策略代码同时兼容回测与交易场景。
接口定义
python
is_trade()使用场景
❌研究 ✅回测 ✅交易
返回
bool:
当前代码在交易中运行返回 True
当前代码在回测中运行返回 False
示例
python
def initialize(context):
g.security = '600570.XSHG'
set_universe(g.security)
def handle_data(context, data):
_id = order(g.security, 100)
if is_trade():
log.info("当前运行场景:交易")
else:
log.info("当前运行场景:回测")send_email
中文名
发送邮箱信息
接口说明
用于通过 QQ 邮箱发送邮件内容。
接口定义
python
send_email(send_email_info, get_email_info, smtp_code, info='', path='', subject='')使用场景
❌研究 ❌回测 ✅交易
注意事项
1、该接口需要服务端连通外网,是否开通由所在券商决定
2、是否允许发送附件(即 path 参数),由所在券商的配置管理决定
3、邮件中接受到的附件为文件名而非附件路径
参数
send_email_info
- 类型:
str
发送方的邮箱地址,必填字段,如:50xxx00@qq.com
get_email_info
- 类型:
list[str]/str
接收方的邮箱地址,必填字段,如:[50xxx00@qq.com, 1xxx10@126.com]
smtp_code
- 类型:
str
邮箱的 smtp 授权码,注意,不是邮箱密码,必填字段
info
- 类型:
str - 默认:
""
发送内容,选填字段
path
- 类型:
str - 默认:
""
附件路径,选填字段,如: '/home/fly/notebook/stock.csv'
subject
- 类型:
str - 默认:
""
邮件主题
返回
None
示例
python
def initialize(context):
g.security = '600570.XSHG'
set_universe(g.security)
def handle_data(context, data):
#发送文字信息
send_email('53xxxxxx7@qq.com', ['53xxxxx7@qq.com', 'Kxxxxn@126.com'], 'phfxxxxxxxxxxcd', info='今天的股票池信息')send_qywx
中文名
发送企业微信信息
接口说明
该接口用于通过企业微信发送内容,使用方法请查看企业微信功能使用手册。
接口定义
python
send_qywx(corp_id, secret, agent_id, info='', path='', toparty='', touser= '', totag= '')使用场景
❌研究 ❌回测 ✅交易
注意事项
1、该接口需要服务端连通外网,是否开通由所在券商决定
2、是否允许发送文件(即 path 参数),由所在券商的配置管理决定
3、企业微信不能同时发送文字和文件,当同时入参 info 和 path 的时候,默认发送文件
4、企业微信接受到的文件为文件名而非文件路径
5、2022年6月20日之后创建的应用由于需要配置企业可信ip(企业微信官方升级)导致企业微信功能不可用,该日期之前创建的应用仍可以正常使用
参数
corp_id
- 类型:
str
企业 ID,必填字段
secret
- 类型:
str
企业微信应用的密码,必填字段
agent_id
- 类型:
str
企业微信应用的 ID,必填字段
info
- 类型:
str - 默认:
""
发送内容,选填字段
path
- 类型:
str - 默认:
""
附件路径,选填字段,如: '/home/fly/notebook/stock.csv'
toparty
- 类型:
str - 默认:
""
发送对象为部门,选填字段,多个对象之间用'|' 符号分割
touser
- 类型:
str - 默认:
""
发送内容为个人,选填字段,多个对象之间用'|' 符号分割
totag
- 类型:
str - 默认:
""
发送内容为分组,选填字段,多个对象之间用'|' 符号分割
注意:toparty、touser、totag 如果都不传入,接口默认发送至应用中设定的第一个 toparty
返回
None
示例
python
def initialize(context):
g.security = '600570.XSHG'
set_universe(g.security)
def handle_data(context, data):
#发送文字信息
send_qywx('wwxxxxxxxxxxxxf9', 'hixxxxxxxxxxxxxxxxxxxBX8', '10xxxx3', info='已触发委托买入', toparty='1|2')permission_test
中文名
权限校验
接口说明
该接口用于账号和有效期的权限校验,用户可以在接口中入参指定账号和指定有效期截止日,策略运行时会校验运行策略的账户与指定账户是否相符,以及运行当日日期是否超过指定的有效期截止日,任一条件校验失败,接口都会返回 False,两者同时校验成功则返回 True。校验失败会在策略日志中提示原因。
接口定义
python
permission_test(account=None, end_date=None)使用场景
❌研究 ❌回测 ✅交易
注意事项
如果需要使用授权模式下载功能,不要在接口中入参,策略编码时候直接调用 permission_test(),授权工具会把需要授权的账号和有效期信息放到策略文件中。
参数
account
- 类型:
str - 默认:
None
授权账号,选填字段,如果不填就代表不需要验证账号
end_date
- 类型:
str - 默认:
None
授权有效期截止日,选题字段,如果不填就代表不需要验证有效期,日期格式必须为'YYYYmmdd'的 8 位日期格式,如'20200101'
返回
bool:
校验成功返回 True
校验失败返回 False
示例
python
def initialize(context):
g.security = '600570.XSHG'
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('授权不通过,终止程序,抛出异常')check_strategy
中文名
检查策略内容
接口说明
该接口用于检查策略内容是否涉及升级过程中变动的API和Python库。
接口定义
python
check_strategy(strategy_content=None, strategy_path=None)使用场景
✅研究 ❌回测 ❌交易
注意事项
每次版本升级后应当将使用的策略内容统一检查一遍。
strategy_content和strategy_path都传入时仅对strategy_content入参内容进行检查。
如果传入strategy_path,需要将对应策略文件上传至研究,且必须是utf-8编码的文本文件。
如果日志打印策略内容涉及升级过程变动,需根据告警信息参考API接口说明调整策略内容。
参数
strategy_content
- 类型:
str
策略内容, 选填字段
strategy_path
- 类型:
str
策略路径, 选填字段
返回
list:
- 策略内容涉及升级过程中变动的API和Python库信息
接收到的数据如下:
json
{
"api_change_list": [
"margincash_open",
"get_history",
"get_fundamentals",
"get_etf_info",
"get_individual_transaction",
"get_individual_transcation",
"check_limit",
"get_price",
"get_snapshot",
"on_trade_response",
"set_parameters",
"set_yesterday_position",
"marginsec_open",
"order_market",
"margin_trade",
"get_user_name",
"debt_to_stock_order",
"get_instruments",
"get_margincash_open_amount",
"get_all_orders",
"run_interval",
"get_trades",
"margincash_close",
"marginsec_close",
"get_margin_assert",
"ipo_stocks_order",
"neeq_ipo_stocks_order",
"get_enslo_security_info",
"get_hks_unit_amount",
"get_individual_entrust",
"get_tick_direction",
"get_margin_contractreal",
"get_gear_price",
"get_stock_status"],
"package_change_list": [
"walrus",
"keras",
"pykalman",
"arch",
"cvxopt",
"pulp"],
}示例
python
check_strategy(strategy_content="""
import arch
import cvxopt
import keras
import pulp
import pykalman
import tensorflow
import walrus
def initialize(context):
g.security = "600570.XSHG"
set_universe(g.security)
pos={}
pos["sid"] = "600570.XSHG"
pos["amount"] = "1000"
pos["enable_amount"] = "600"
pos["cost_basis"] = "55"
set_yesterday_position([pos])
run_interval(context, interval_handle, seconds=10)
def interval_handle(context):
pass
def before_trading_start(context, data):
get_history(100, frequency="1d", field=["close"], security_list=g.security)
get_fundamentals(g.security, "balance_statement", "total_assets")
get_etf_info("510020.XSHG")
get_individual_transaction()
get_individual_transcation()
check_limit(g.security)
get_price(g.security, start_date="20150101", end_date="20150131", frequency="1d")
get_snapshot(g.security)
set_parameters(holiday_not_do_before="1")
get_user_name(False)
get_instruments(g.security)
get_all_orders()
get_trades()
get_margin_assert()
get_enslo_security_info()
get_hks_unit_amount("02899.XHKG-SS", "1")
get_individual_entrust()
get_tick_direction([g.security])
get_margin_contractreal()
get_gear_price(g.security)
get_stock_status([g.security], "ST")
def on_trade_response(context, trade_list):
pass
def handle_data(context, data):
margincash_open(g.security, 100)
marginsec_open(g.security, 100)
order_market(g.security, 100, 0, 35)
margin_trade(g.security, 100)
get_margincash_open_amount(g.security)
debt_to_stock_order("110033.XSHG", -1000)
margincash_close(g.security, 100)
marginsec_close(g.security, 100)
ipo_stocks_order(submarket_type=0)
neeq_ipo_stocks_order({"889913.NEEQ":1000})
""")python
check_strategy(strategy_path="./strategy.txt")create_dir
中文名
创建文件路径
接口说明
由于 PTrade量化 引擎禁用了 os 模块,因此用户无法在策略中通过编写代码实现子目录创建。用户可以通过此接口来创建文件的子目录路径。
接口定义
python
create_dir(user_path=None)使用场景
✅研究 ✅回测 ✅交易
注意事项
文件根目录路径为'/home/fly/notebook'。
参数
user_path
- 类型:
str - 默认:
None
子目录路径,选填字段。
比如 user_path='download',会在研究中生成/home/fly/notebook/download 的目录;
比如 user_path='download/2022',会在研究中生成/home/fly/notebook/download/2022 的目录;
返回
None
示例
python
def initialize(context):
g.security = '600570.XSHG'
set_universe(g.security)
create_dir(user_path=g.security)
def handle_data(context, data):
passget_research_path
中文名
获取研究路径
接口说明
该接口用于获取研究根目录路径,该路径为'/home/fly/notebook/'。
接口定义
python
get_research_path()使用场景
❌研究 ✅回测 ✅交易
返回
str:
- 返回一个字符串类型对象
示例
python
def initialize(context):
g.security = "600570.XSHG"
set_universe(g.security)
path = get_research_path()
def handle_data(context, data):
passget_frequency
中文名
获取当前业务代码的周期
接口说明
该接口用于返回当前业务代码的周期,如在周期为分钟的情况下执行回测或交易,该函数返回minute;在周期为每日的情况下执行回测或交易,该函数返回daily。
接口定义
python
get_frequency()使用场景
❌研究 ✅回测 ✅交易
返回
str:
- 周期为分钟返回minute,周期为每日返回daily
示例
python
def initialize(context):
g.security = '600570.XSHG'
set_universe(g.security)
log.info(get_frequency())
def handle_data(context, data):
passget_business_type
中文名
获取当前策略的业务类型
接口说明
该接口用于返回当前策略的业务类型。
接口定义
python
get_business_type()使用场景
❌研究 ✅回测 ✅交易
返回
str:
- 策略业务类型:
stock -- 股票
rzrq -- 融资融券
future -- 期货
hks -- 港股通
示例
python
def initialize(context):
# 初始化策略
g.security = "600570.XSHG"
set_universe(g.security)
def before_trading_start(context, data):
g.flag = False
g.business_type = get_business_type()
log.info("当前策略的业务类型为:%s" % g.business_type)
def handle_data(context, data):
if g.flag is False:
if g.business_type == "stock":
order("600570.XSHG", 100)
elif g.business_type == "future":
buy_open("IF2309.CCFX", 1, 3816.0)
g.flag = Trueget_trade_name
中文名
获取交易名称
接口说明
该接口用于获取当前交易的名称。
接口定义
python
get_trade_name()使用场景
❌研究 ❌回测 ✅交易
注意事项
- 当获取失败时,返回空字符串。
返回
str:
- 返回一个字符串类型对象
示例
python
def initialize(context):
g.security = "600570.XSHG"
set_universe(g.security)
def handle_data(context, data):
name = get_trade_name()get_trades_file
中文名
获取对账数据文件
接口说明
该接口用于获取对账数据文件。
接口定义
python
get_trades_file(save_path='')使用场景
❌研究 ✅回测 ❌交易
注意事项
文件目录的命名需要遵守如下规则:
1、长度不能超过 256 个字符;
2、名称中不能出下如下字符::?,@#$&();\"\'<>`~!%^*;
参数
save_path
- 类型:
str - 默认:
""
导出对账数据存储的路径,选填字段,默认在 notebook 的根目录下
返回
str|None:
成功返回导出文件的路径
失败返回
None
python
导出数据格式的说明:
交易数据文件的组织格式为csv文件,表头信息为:
订单编号,成交编号,委托编号,标的代码,交易类型,成交数量,成交价,成交金额,交易费用,交易时间,对应的表头字段为:
[order_id,trading_id,entrust_id,security_code,order_type,volume,price,total_money,trading_fee, trade_time]注意:
order_id 列中可能出现如下几种取值:
1、M000000,通过外部系统委托的成交数据;
2、类似 a6fbc145958843cc86639b23fbcfdc4c 的字符串,通过平台委托的成交数据;
3、H000000,引入对账数据接口前的版本产生的交易数据;
示例
python
def initialize(context):
g.security = '600570.XSHG'
set_universe(g.security)
def handle_data(context, data):
# 委托
order_obj = order(g.security, 100)
log.info('订单编号为:%s'% order_obj)
def after_trading_end(context, data):
# 获取对账数据,存放到默认目录
data_path = get_trades_file()
log.info(data_path)
# 获取对账数据,存放到notebook下的指定目录
user_data_path = get_trades_file('user_data/data')
log.info(user_data_path)convert_position_from_csv
中文名
获取设置底仓的参数列表(股票)
接口说明
该接口用于从 csv 文件中获取设置底仓的参数列表。
接口定义
python
convert_position_from_csv(path)使用场景
❌研究 ✅回测 ❌交易
注意事项
文件目录的命名需要遵守如下规则:
1、长度不能超过 256 个字符;
2、名称中不能出下如下字符::?,@#$&();\"\'<>`~!%^*;
参数
path
- 类型:
str
csv 文件对应路径及文件名(需要在研究中上传该文件)
csv 文件内容格式要求如下:
csv
sid,enable_amount,amount,cost_basis
600570.XSHG,10000,10000,45返回
list[dict[str:str],...]:
- 用于设置底仓的参数列表,该 list 中是字典类型的元素;
返回一个 list,该 list 中是一个字典类型的元素,如:
[{
'sid':标的代码,
'amount':持仓数量,
'enable_amount':可用数量,
'cost_basis':每股的持仓成本价格,
}]
示例
python
def initialize(context):
g.security = '600570.XSHG'
set_universe(g.security)
# 设置底仓
poslist= convert_position_from_csv("Poslist.csv")
set_yesterday_position(poslist)
def handle_data(context, data):
# 卖出100股
order(g.security, -100)filter_stock_by_status
中文名
过滤指定状态的股票代码
接口说明
该接口用于过滤指定状态的股票代码。
接口定义
python
filter_stock_by_status(stocks, filter_type=["ST", "HALT", "DELISTING"], query_date=None)使用场景
✅研究 ✅回测 ✅交易
参数
stocks
- 类型:
list[str]/str
单只代码或代码列表,必填字段
filter_type
- 类型:
list[str]/str - 默认:
["ST", "HALT", "DELISTING"]
支持以下四种类型属性的过滤条件,选填字段
- 具体支持输入的字段包括 :
- 'ST' - 查询是否属于ST股票
- 'HALT' - 查询是否停牌
- 'DELISTING' - 查询是否退市
- 'DELISTING_SORTING' - 查询是否退市整理期(只过滤交易当日数据)
query_date
- 类型:
list[str]/str - 默认:
None
格式为YYYYmmdd,默认为None,表示当前日期(回测为回测当前周期,研究与交易则取系统当前时间),选填字段
返回
list:
- 股票列表(该列表已剔除符合任一指定状态的标的)
示例
python
def initialize(context):
g.security = ['123002.XSHE',"688500.XSHG","000001.XSHE", "603997.XSHG", '123181.XSHE']
set_universe(g.security)
def before_trading_start(context, data):
filter_stock = filter_stock_by_status(g.security, ["ST", "HALT", "DELISTING"])
log.info(filter_stock)
def handle_data(context, data):
passget_current_kline_count
中文名
获取股票业务当前时间的分钟bar数量
接口说明
该接口获取当前时间股票的k线根数。
接口定义
python
get_current_kline_count()使用场景
✅研究 ✅回测 ✅交易
注意事项
- 回测中返回回测日当前时间的分钟bar数量。
- 研究中返回最新交易日当前时间的分钟bar数量,非交易日执行均返回0。
- 交易中返回最新交易日当前时间的分钟bar数量。
返回
int:
- 当前时间的分钟bar数量
示例
python
def initialize(context):
g.security = '600570.XSHG'
set_universe(g.security)
def handle_data(context, data):
log.info(get_current_kline_count())说明
接口支持的业务范围以及支持在引擎的哪些流程函数中调用,详见 接口列表