跳转到内容

系统接口

定时周期性接口

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):
    pass

run_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")

使用场景

❌研究 ✅回测 ❌交易

注意事项

  1. 关于回测手续费计算:手续费=佣金费+经手费+印花税。
  2. 佣金费=佣金费率*交易总金额(若佣金费计算后小于设置的最低佣金,则佣金费取最小佣金)。
  3. 经手费=经手费率(万分之 0.487)*交易总金额。
  4. 印花税=印花税率(千分之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):
    pass

set_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):
    pass

set_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):
    pass

set_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):
    pass

set_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):
    pass

set_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):
    pass

set_email_info

中文名

设置邮件信息

接口说明

该函数用于设置邮件信息,当交易报错终止时会发送提示邮件。

接口定义

python
set_email_info(email_address, smtp_code, email_subject)

使用场景

❌研究 ❌回测 ✅交易

注意事项

  1. 如要使用该函数,需咨询券商当前环境是否支持发送邮件。

  2. 当前仅支持设置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)

使用场景

✅研究 ❌回测 ❌交易

注意事项

  1. 每次版本升级后应当将使用的策略内容统一检查一遍。

  2. strategy_content和strategy_path都传入时仅对strategy_content入参内容进行检查。

  3. 如果传入strategy_path,需要将对应策略文件上传至研究,且必须是utf-8编码的文本文件。

  4. 如果日志打印策略内容涉及升级过程变动,需根据告警信息参考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):
    pass

get_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):
    pass

get_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):
    pass

get_business_type

中文名

获取当前策略的业务类型

接口说明

该接口用于返回当前策略的业务类型。

接口定义

python
get_business_type()

使用场景

❌研究 ✅回测 ✅交易

返回

str:

  • 策略业务类型:
  1. stock -- 股票

  2. rzrq -- 融资融券

  3. future -- 期货

  4. 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 = True

get_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):
    pass

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

说明

接口支持的业务范围以及支持在引擎的哪些流程函数中调用,详见 接口列表