Skip to content

策略开发 API

基本方法

你的算法策略目前必须实现至少两个方法:inithandle_bar,而before_tradingafter_trading是可选择实现的方法。

init (必须实现)

init(context)

初始化方法 - 在回测和实时模拟交易只会在启动的时候触发一次。你的算法会使用这个方法来设置你需要的各种初始化配置。 context 对象将会在你的算法的所有其他的方法之间进行传递以方便你可以拿取到。

参数

参数类型注释
contextpython 简单对象将会在整个算法中当做一个全局变量来使用。属性通过点标记(".")来取到。

返回

范例

python
def init(context):
 # cash_limit的属性是根据用户需求自己定义的,你可以定义无限多种自己随后需要的属性,ricequant的系统默认只是会占用context.portfolio的关键字来调用策略的投资组合信息
 context.cash_limit = 5000

handle_bar (必须实现)

handle_bar(context, bar_dict)

bar 数据的更新会自动触发该方法的调用。策略具体逻辑可在该方法内实现,包括交易信号的产生、订单的创建等。在实时模拟交易中,该函数在交易时间内会每分钟被触发一次。 注意:由于该方法会每分钟被触发,请尽量不要在该函数中放入查询类(如带有 query()参数的 API)代码以免运行时间过长,该类逻辑可放在 init() 中执行。

参数

参数类型注释
contextpython 简单对象储存策略自定义参数、设置、仓位、投资组合信息的全局变量,属性通过点标记(".")来取到
bar_dictdictkey 为 order_book_id,value 为 bar 数据。当前合约池内所有合约的 bar 数据信息都会更新在 bar_dict 里面

返回

范例

python
def handle_bar(context, bar_dict):
 # put all your algorithm main logic here.
 # ...
 order_shares('000001.XSHE', 500)
 # ...

handle_tick

handle_tick(context, tick)

已订阅(subscribe)合约tick 数据的更新会自动触发该方法的调用。策略具体逻辑可在该方法内实现,包括交易信号的产生、订单的创建等。

参数

参数类型注释
contextpython 简单对象储存策略自定义参数、设置、仓位、投资组合信息的全局变量,属性通过点标记(".")来取到
ticktick已订阅合约的 tick 行情

返回

范例

python
def handle_tick(context, tick):
 # put all your algorithm main logic here.
 # ...
 logger.info(tick.last)
 # ...

open_auction (选择实现)

open_auction(context, bar_dict)

可选择实现的函数。盘前集合竞价发生时会触发该函数的调用,在该函数内发出的订单会以当日开盘价被撮合。

参数

参数类型注释
contextpython 简单对象储存策略自定义参数、设置、仓位、投资组合信息的全局变量,属性通过点标记(".")来取到
bar_dictdictkey 为 order_book_id,value 为 bar 数据。当前合约池内所有合约的 bar 数据信息都会更新在 bar_dict 里面

返回

范例

python
def open_auction(context, bar_dict):
    # put all your algorithm main logic here.
    # ...
    order_book_id = "000001.XSHE"
    order_shares(order_book_id, 500)
    # ...

before_trading (选择实现)

before_trading(context)

可选择实现的函数。每天在策略开始交易前会被调用。**不能在这个函数中发送订单。**需要注意,该函数的触发时间取决于用户当前所订阅合约的交易时间。

举例来说,如果用户订阅的合约中存在有夜盘交易的期货合约,则该函数可能会在前一日的 20:30 触发,而不是早晨 08:00.

参数

参数类型注释
contextpython 简单对象储存策略自定义参数、设置、仓位、投资组合信息的全局变量,属性通过点标记(".")来取到。

返回

范例

python
def before_trading(context):
    # 拿取财务数据的逻辑
    fundamental_df = get_factor(factor_names)

    # 把查询到的财务数据保存到conext对象中
    context.fundamental_df = fundamental_df

    # 手动更新股票池
    update_universe(context.fundamental_df.index.values)

after_trading (选择实现)

after_trading(context)

可选择实现的函数。每天在收盘后被调用。**不能在这个函数中发送订单。**您可以在该函数中进行当日收盘后的一些计算。

在实时模拟交易中,该函数会在每天 15:30 触发。

参数

参数类型注释
contextpython 简单对象储存策略自定义参数、设置、仓位、投资组合信息的全局变量,属性通过点标记(".")来取到。

返回

交易相关函数

order_shares - 指定股数交易(股票专用)

order_shares(id_or_ins, amount, style=MarketOrder())

落指定股数的买/卖单,最常见的落单方式之一。如有需要落单类型当做一个参量传入,如果忽略掉落单类型,那么默认是市价单(market order)。

参数

参数类型注释
id_or_insstr 或 instrument 对象order_book_id 或 symbol 或 instrument 对象,用户必须指定
amountfloat-required需要落单的股数。正数代表买入,负数代表卖出。将会根据一手 xx 股来向下调整到一手的倍数,比如中国 A 股就是调整成 100 股的倍数。
styleOrderType订单类型,默认是市价单。目前支持的订单类型有:
  • style=MarketOrder
  • style=LimitOrder(limit_price)

返回Order 对象

范例

  • 购买 Buy 2000 股的平安银行股票,并以市价单发送:
order_shares('000001.XSHE', 2000)
  • 卖出 2000 股的平安银行股票,并以市价单发送:
order_shares('000001.XSHE', -2000)
  • 购买 1000 股的平安银行股票,并以限价单发送,价格为¥ 10:
order_shares('000001.XSHE', 1000, style=LimitOrder(10))

order_lots - 指定手数交易(股票专用)

order_lots(id_or_ins, amount, style=OrderType)

指定手数发送买/卖单。如有需要落单类型当做一个参量传入,如果忽略掉落单类型,那么默认是市价单(market order)。

参数

参数类型注释
id_or_insstr或 instrument 对象order_book_id 或 symbol 或 instrument 对象,用户必须指定
amountfloat多少手的数目。正数表示买入,负数表示卖出,用户必须指定
styleOrderType订单类型,默认是市价单。目前支持的订单类型有:
  • style=MarketOrder
  • style=LimitOrder(limit_price)

返回Order 对象

范例

  • 买入 20 手的平安银行股票,并且发送市价单:
order_lots('000001.XSHE', 20)
  • 买入 10 手平安银行股票,并且发送限价单,价格为¥ 10:
order_lots('000001.XSHE', 10, style=LimitOrder(10))

order_value - 指定价值交易(股票专用)

order_value(id_or_ins, cash_amount, style=OrderType)

使用想要花费的金钱买入/卖出股票,而不是买入/卖出想要的股数,正数代表买入,负数代表卖出(暂不支持卖空)。股票的股数总是会被调整成对应的 100 的倍数(在 A 中国 A 股市场 1 手是 100 股)。当您提交一个卖单时,该方法代表的意义是您希望通过卖出该股票套现的金额。如果金额超出了您所持有股票的价值,那么您将卖出所有股票。需要注意,如果资金不足,该 API 将不会创建发送订单。

参数

参数类型注释
id_or_insstr或 instrument 对象order_book_id 或 symbol 或 instrument 对象,用户必须指定
cash_amountfloat需要花费现金购买/卖出证券的数目。正数代表买入,负数代表卖出,用户必须指定
styleOrderType订单类型,默认是市价单。目前支持的订单类型有:
  • style=MarketOrder()
  • style=LimitOrder(limit_price)

返回Order 对象

范例

  • 买入价值¥ 10000 的平安银行股票,并以市价单发送。如果现在平安银行股票的价格是¥ 7.5,那么下面的代码会买入 1300 股的平安银行,因为少于 100 股的数目将会被自动删除掉:
order_value('000001.XSHE', 10000)
  • 卖出价值¥ 10000 的现在持有的平安银行:
order_value('000001.XSHE', -10000)

order_percent - 一定比例下单(股票专用)

order_percent(id_or_ins, percent, style=OrderType)

发送一个等于目前投资组合价值(市场价值和目前现金的总和)一定百分比的买/卖单,正数代表买,负数代表卖(暂不支持卖空)。股票的股数总是会被调整成对应的一手的股票数的倍数(1 手是 100 股)。百分比是一个小数,并且小于 1(<100%),0.5 表示的是 50%.需要注意,百分比不能为 1,因为下单时手续费将会计入下单金额中。当买入股票所需金额加上手续费大于资金时,该 API 将不会创建发送订单。

参数

参数类型注释
id_or_insstr或 instrument 对象order_book_id 或 symbol 或 instrument object,用户必须指定
percentfloat占有现有的投资组合价值的百分比。正数表示买入,负数表示卖出。用户必须指定
styleOrderType订单类型,默认是市价单。目前支持的订单类型有:
  • style=MarketOrder()
  • style=LimitOrder(limit_price)

返回Order 对象

范例

  • 买入等于现有投资组合 50%价值的平安银行股票。如果现在平安银行的股价是¥ 10/股并且现在的投资组合总价值是¥ 4000,用来买入的资金为¥ 2000,那么将会买入 200 股的平安银行股票。(不包含交易成本和滑点的损失):
order_percent('000001.XSHE', 0.5)

order_target_value - 目标价值下单(股票专用)

order_target_value(id_or_ins, cash_amount, style=OrderType)

买入/卖出并且自动调整该证券的仓位到一个目标价值(暂不支持卖空)。如果还没有任何该证券的仓位,那么会买入全部目标价值的证券。如果已经有了该证券的仓位,则会买入/卖出调整该证券的现在仓位和目标仓位的价值差值的数目的证券。需要注意,如果资金不足,该 API 将不会创建发送订单。

参数

参数类型注释
id_or_insstr或 instrument 对象order_book_id 或 symbol 或 instrument object,用户必须指定
cash_amountfloat-required最终的该证券的仓位目标价值
styleOrderType订单类型,默认是市价单。目前支持的订单类型有:
  • style=MarketOrder()
  • style=LimitOrder(limit_price)

返回Order 对象

范例

  • 如果现在的投资组合中持有价值¥ 3000 的平安银行股票的仓位并且设置其目标价值为¥ 10000,以下代码范例会发送价值¥ 7000 的平安银行的买单到市场。(向下调整到最接近每手股数即 100 的倍数的股数):
order_target_value('000001.XSHE', 10000)

order_target_percent - 目标比例下单(股票专用)

order_target_percent(id_or_ins, percent, style=OrderType)

买入/卖出证券以自动调整该证券的仓位到占有一个指定的投资组合的目标百分比(暂不支持卖空)。

  • 如果投资组合中没有任何该证券的仓位,那么会买入等于现在投资组合总价值的目标百分比的数目的证券。
  • 如果投资组合中已经拥有该证券的仓位,那么会买入/卖出目标百分比和现有百分比的差额数目的证券,最终调整该证券的仓位占据投资组合的比例至目标百分比。

其实我们需要计算一个 position_to_adjust (即应该调整的仓位)

position_to_adjust = target_position - current_position

投资组合价值等于所有已有仓位的价值和剩余现金的总和。买/卖单会被下舍入一手股数(A 股是 100 的倍数)的倍数。目标百分比应该是一个小数,并且最大值应该<=1,比如 0.5 表示 50%。

如果position_to_adjust 计算之后是正的,那么会买入该证券,否则会卖出该证券。 需要注意,如果资金不足,该 API 将不会创建发送订单。

参数

参数类型注释
id_or_insstr或 instrument 对象order_book_id 或 symbol 或 instrument object,用户必须指定
percentfloat-required仓位最终所占投资组合总价值的目标百分比。
styleOrderType订单类型,默认是市价单。目前支持的订单类型有:
  • style=MarketOrder()
  • style=LimitOrder(limit_price)

返回Order 对象

范例

  • 如果投资组合中已经有了平安银行股票的仓位,并且占据目前投资组合的 10%的价值,那么以下代码会买入平安银行股票最终使其占据投资组合价值的 15%:
order_target_percent('000001.XSHE', 0.15)

buy_open - 买开(期货专用)

buy_open(id_or_ins, amount, price=None, style=None)

买入开仓。

参数

参数类型注释
id_or_insstr 或 instrument 对象order_book_id 或 symbol 或 instrument 对象
amountfloat下单的手数
pricefloat下单价格,默认为 None,表示市价单,填写价格则代表限价单。此参数主要用于简化 style 参数
styleOrderType订单类型,默认是市价单。目前支持的订单类型有:
  • style=MarketOrder()
  • style=LimitOrder(limit_price)

返回Order 对象

范例

  • 以价格为 3500 的限价单开仓买入 2 张上期所 AG1607 合约:
buy_open('AG1607', amount=2, price=3500)

sell_close - 平多仓(期货专用)

sell_close(id_or_ins, amount, price=None, style=None, close_today=False)

平多仓。

参数

参数类型注释
id_or_insstr 或 instrument 对象order_book_id 或 symbol 或 instrument 对象
amountfloat下单的手数
pricefloat下单价格,默认为 None,表示市价单,填写价格则代表限价单。此参数主要用于简化 style 参数
styleOrderType订单类型,默认是市价单。目前支持的订单类型有:
  • style=MarketOrder()
  • style=LimitOrder(limit_price)
close_todaybool是否为平今单。默认为 False。上期所对于平今仓需要显式设置平今为 True

返回

Order 对象 或 order list

注意,当前持仓如果包含昨仓与今仓,平仓时候默认按照先进先出的规则,函数可能存在返回 order list 的情况。 例如,目前持仓多方向 8 张,其中昨仓 3 今仓 5。如果平仓 4 张,按照先进先出原则,此时策略框架会创建两个平仓单,一个平 3 张昨仓,一个平 1 张今仓。

sell_open - 卖开(期货专用)

sell_open(id_or_ins, amount, price=None, style=None)

卖出开仓。

参数

参数类型注释
id_or_insstr 或 instrument 对象order_book_id 或 symbol 或 instrument 对象
amountfloat下单的手数
pricefloat下单价格,默认为 None,表示市价单,填写价格则代表限价单。此参数主要用于简化 style 参数
styleOrderType订单类型,默认是市价单。目前支持的订单类型有:
  • style=MarketOrder()
  • style=LimitOrder(limit_price)

返回Order 对象

buy_close - 平空仓(期货专用)

buy_close(id_or_ins, amount, price=None, style=None, close_today=False)

平空仓。

参数

参数类型注释
id_or_insstrinstrument 对象order_book_id 或 symbol 或 instrument 对象
amountfloat下单的手数
pricefloat下单价格,默认为 None,表示市价单,填写价格则代表限价单。此参数主要用于简化 style 参数
styleOrderType订单类型,默认是市价单。目前支持的订单类型有:
  • style=MarketOrder()
  • style=LimitOrder(limit_price)
close_todaybool是否为平今单。默认为 False。上期所对于平今仓需要显式设置平今为 True

返回

Order 对象 或 order list

注意,当前持仓如果包含昨仓与今仓,平仓时候默认按照先进先出的规则,函数可能存在返回 order list 的情况。 例如,目前持仓多方向 8 张,其中昨仓 3 今仓 5。如果平仓 4 张,按照先进先出原则,此时策略框架会创建两个平仓单,一个平 3 张昨仓,一个平 1 张今仓。

范例

  • 市价单将现有 IF1603 空仓买入平仓 2 张:
buy_close('IF1603', 2)

cancel_order - 撤单

cancel_order(order)

参数

参数类型注释
orderOrder需要撤销的 order 对象,用户必须指定

返回

get_open_orders - 拿到未成交订单信息

get_open_orders()

获取一个 order 对象的 list,凡在此 list 中的 order 都未被完全成交或取消。

参数

返回list of Orders, 当前所有活跃的订单(未全部成交,未被撤单)。

exercise -行权

exercise(id_or_ins, amount, convert=False)

行权。针对期权、可转债等含权合约,行使合约权利方被赋予的权利。

参数

参数类型注释
id_or_insstrinstrument 对象行权合约,order_book_id 或 symbol 或 instrument 对象
amountint参与行权的合约数量
convertbool是否为转股(转债行权时可用)

返回

Order 对象

范例

python
# 行使一张豆粕1905购2350的权力
exercise("M1905C2350", 1)

get_position - 持仓查询

get_position(order_book_id, direction)

查询指定合约、方向的仓位信息和策略收益信息。

参数

参数类型注释
order_book_idstr合约代码
directionPOSITION_DIRECTION持仓多空方向, 如股票仓位查询, 请填写 POSITION_DIRECTION.LONG

返回POSITION 对象。注意, 如果当前策略并未持有该合约仓位, 仍然会返回持仓对象, 但仓位数量、开仓均价等字段都为 0

范例

def init(context):
    # 使用关键字 g 保存全局变量
    context.count = 0
    context.s1 = '000001.XSHE'

def handle_bar(context, bar_dict):
 # 打印持仓信息
    print(get_position(context.s1, POSITION_DIRECTION.LONG))
    if context.count == 0:
        px = bar_dict[context.s1].last + 0.2
        submit_order(context.s1, amount=100, side=SIDE.BUY, price=px)
        context.count += 1

get_positions - 全量持仓查询

get_positions()

查询当前策略全部持仓列表及对应的收益信息。

参数

返回position list 注意, 如果当前策略无任何持仓, 则 list 为空。

context 属性

now - 当前时间

context.now

使用以上的方式就可以在handle_bar中拿到当前的 bar 的时间,比如 day bar 的话就是那天的时间,minute bar 的话就是这一分钟的时间点。

返回数据类型为 datetime.datetime

portfolio - 投资组合信息

context.portfolio

该投资组合在单一股票或期货策略中分别为股票投资组合和期货投资组合。在股票+期货的混合策略中代表汇总之后的总投资组合。请参考 portfolio

stock_account - 股票资金账户信息

context.stock_account

获取股票资金账户信息。请参考 stock_account

future_account - 期货资金账户信息

context.future_account

获取期货资金账户信息。请参考 future_account

run_info - 策略运行信息

context.run_info
属性类型注释
run_typeRUN_TYPERUN_TYPE.BACKTEST 表示当前策略在进行回测,RUN_TYPE.PAPER_TRADING 表示当前策略在进行实盘模拟
start_datedatetime.date策略的开始日期
end_datedatetime.date策略的结束日期
frequencystr策略频率,1d1m
stock_starting_cashfloat股票账户初始资金
future_starting_cashfloat期货账户初始资金
slippagefloat滑点水平
margin_multiplierfloat保证金倍率
commission_multiplierfloat佣金倍率
benchmarkstr基准合约代码
matching_typeMATCHING_TYPE撮合方式,MATCHING_TYPE.NEXT_BAR_OPEN 代表以下一 bar 开盘价撮合,MATCHING_TYPE.CURRENT_BAR_CLOSE 代表以当前 bar 收盘价撮合

universe - 策略合约池

context.universe

在运行update_universesubscribe或者unsubscribe的时候,合约池会被更新。

需要注意,合约池内合约的交易时间(包含股票的策略默认会在股票交易时段触发)是 handle_bar 被触发的依据。

scheduler 定时器

scheduler.run_daily - 每天运行

scheduler.run_daily(function)

每日运行一次指定的函数,只能在 init 内使用

注意,schedule 一定在其对应时间点的 handle_bar 之前执行,如果定时运行函数运行时间较长,则中间的 handle_bar 事件将会被略过。

参数

参数类型注释
functionfunction使传入的function每日运行。注意,function 函数一定要包含(并且只能包含)context, bar_dict 两个输入参数

返回

范例

以下的范例代码片段是一个非常简单的例子,在每天交易开始时查询现在portfolio中剩下的 cash 的情况:

python
#scheduler调用的函数需要包括context, bar_dict两个输入参数
def log_cash(context, bar_dict):
    logger.info("Remaning cash: %r" % context.portfolio.cash)

def init(context):
 #...
 # 每天运行一次
 scheduler.run_daily(log_cash)

scheduler.run_weekly - 每周运行

scheduler.run_weekly(function, weekday=x, tradingday=t)

每周运行一次指定的函数,只能在 init 内使用

注意

  • tradingday中的负数表示倒数。

  • tradingday表示交易日。如某周只有四个交易日,则此周的tradingday=4tradingday=-1表示同一天。

  • weekdaytradingday不能同时使用。

参数

参数类型注释
functionfunction使传入的function每日交易开始前运行。注意,function 函数一定要包含(并且只能包含)context, bar_dict 两个输入参数
weekdayint1~5 分别代表周一至周五,用户必须指定
tradingdayint范围为[-5,1],[1,5] 例如,1 代表每周第一个交易日,-1 代表每周倒数第一个交易日,用户可以不填写

返回

范例

以下的代码片段非常简单,在每周二固定运行打印一下现在的portfolio剩余的资金:

python
#scheduler调用的函数需要包括context, bar_dict两个参数
def log_cash(context, bar_dict):
    logger.info("Remaning cash: %r" % context.portfolio.cash)

def init(context):
 #...
 # 每周二打印一下剩余资金:
 scheduler.run_weekly(log_cash, weekday=2)
 # 每周第二个交易日打印剩余资金:
 #scheduler.run_weekly(log_cash, tradingday=2)

scheduler.run_monthly - 每月运行

scheduler.run_monthly(function,tradingday=t)

每月运行一次指定的函数,只能在 init 内使用

注意:

  • tradingday的负数表示倒数。

  • tradingday表示交易日,如某月只有三个交易日,则此月的 tradingday=3 与 tradingday=-1 表示同一。

参数

参数类型注释
functionfunction使传入的function每日交易开始前运行。注意,function 函数一定要包含(并且只能包含)context, bar_dict 两个输入参数
tradingdayint范围为[-23,1], [1,23] ,例如,1 代表每月第一个交易日,-1 代表每月倒数第一个交易日,用户必须指定

返回

范例 以下的代码片段非常简单的展示了每个月第一个交易日的时候我们进行一次财务数据查询,这样子会非常有用在一些根据财务数据来自动调节仓位股票组合的算法来说:

python
#scheduler调用的函数需要包括context, bar_dict两个参数
def query_fundamental(context, bar_dict):
        # 查询revenue前十名的公司的股票并且他们的pe_ratio在25和30之间。
    stocks = all_instruments('CS').order_book_id
    fundamental_df = get_factor(stocks, ['pe_ratio', 'revenue'])
    fundamental_df = fundamental_df[(fundamental_df['pe_ratio'] > 25) & (fundamental_df['pe_ratio'] < 30)]
    fundamental_df = fundamental_df.sort_values(by='revenue', ascending=False).head(10).reset_index(1, drop=True)


    # 将查询结果dataframe的fundamental_df存放在context里面以备后面只需:
    context.fundamental_df = fundamental_df

    # 实时打印日志看下查询结果,会有我们精心处理的数据表格显示:
    logger.info(context.fundamental_df)
    update_universe(context.fundamental_df.index.values)

 # 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
def init(context):
 # 每月的第一个交易日查询以下财务数据,以确保可以拿到最新更新的财务数据信息用来调整仓位
 scheduler.run_monthly(query_fundamental, tradingday=1)

time_rule - 定时间运行

scheduler还可以用来做定时间运行,比如在每天开盘后的一小时后或一分钟后定时运行,这里有很多种组合可以让您达到各种自己想要达到的定时运行的目的。

使用的方法是和上面的scheduler.run_daily,scheduler.run_weeklyscheduler.run_monthly进行组合加入time_rule来一起使用。

注意:

  • market_openmarket_close都跟随中国 A 股交易时间进行设置,即 09:31~15:00。
  • 使用time_rule定时运行只会在分钟级别回测和实时模拟交易中有定义的效果,在日回测中只会默认依然在该天运行,并不能在固定的时间运行。
  • 在分钟回测中如未指定time_rule,则默认在开盘后第一个分钟线运行,即 09:31 分, 等同于 market_open(minute=0, hour=0)。
  • 如果两个schedule,分别使用market_openmarket_close规则,但规则触发时间在同一时刻,则market_openhandle一定在market_closehandle前执行。
  • market_open(minute=119)将在 11:30 执行, market_open(minute=120)在 13:01 执行,中午休市的区间会被忽略。
  • time_rule='before_trading'表示在开市交易前运行 scheduler 函数。该函数运行时间将在 before_trading 函数运行完毕之后 handle_bar 运行之前。

参数

参数类型注释
time_rulemarket_open, market_close, str定时具体几点几分运行某个函数。time_rule='before_trading' 表示开始交易前运行;market_open(hour=x, minute=y)表示 A 股市场开市后 x 小时 y 分钟运行,market_close(hour=x, minute=y)表示 A 股市场收市前 x 小时 y 分钟运行。如果不设置time_rule默认的值是中国 A 股市场开市后一分钟运行。

market_open, market_close 参数如下:

参数类型注释
hourint - option [1,4]具体在 market_open/market_close 后/前第多少小时执行, 股票的交易时间为[9:31 - 11:30],[13:01 - 15:00]共 240 分钟,所以 hour 的范围为 [1,4]
minuteint - option [0,239]具体在 market_open/market_close 的后/前第多少分钟执行,同上,股票每天交易时间 240 分钟,minute 的范围为 [0,239],中午休市的时间区间会被忽略

返回

范例

  • 每天的开市后 10 分钟(股票即 9:41)运行:
scheduler.run_daily(function, time_rule=market_open(minute=10))
  • 每周的第 t 个交易日闭市前 1 小时运行:
scheduler.run_weekly(function, tradingday=t, time_rule=market_close(hour=1))
  • 每月的第 t 个交易日开市后 1 小时运行:
scheduler.run_monthly(function, tradingday=t, time_rule=market_open(hour=1))
  • 每天开始交易前运行:
scheduler.run_daily(function, time_rule='before_trading')

数据查询相关函数

get_pit_financials_ex - 查询季度财务信息(point-in-time 形式)

get_pit_financials_ex(order_book_ids, fields, count, statements='latest')

以给定 N 个报告期回溯的方式获取过去 N 个季度基础财务数据(三大表),即利润表(income_statement),资产负债表(balance_sheet),现金流量表(cash_flow_statement)。

参数

参数类型说明
fieldslist需要返回的财务字段。支持的字段仅限三大基础财报,具体可以参看财务数据页介绍。
countint往前追朔多少期财报数据,例如填 2 代表站在回测日期往前追朔 3 个报告期的数据;填 0,返回最近一期的数据,该参数必填 。
order_book_idsstr or str list合约代码,可传入 order_book_id, order_book_id list ,该参数必填。
statementsstr基于查询日期,返回某一个报告期的所有记录或最新一条记录,设置 statements 为 all 时返回所有记录,statements 等于 latest 时返回最新的一条记录,默认为 latest.

返回

pandas DataFrame

固定字段类型说明
fieldslist需要返回的财务字段。支持的字段仅限三大基础财报,具体可以参看财务数据页介绍。
if_adjustedint是否为非当期财报数据, 0 代表当期,1 代表非当期(比如 18 年的财报会披露本期和上年同期的数值,17 年年报的财务数值在 18 年年报中披露的记录则为非当期, 17 年年报的财务数值在 17 年年报中披露则为当期。
quarterstr报告期
info_datestr公告发布日

范例

  • 获取股票最近一个报告期的 revenue、net_profit 数据
python
[In]
get_pit_financials_ex(fields=['revenue','net_profit'], count=0,order_book_ids=['000001.XSHE'],statements='latest')
[Out]
                  info_date net_profit revenue net_profit
order_book_id quarter
000001.XSHE 2015q4     2017-03-17     2.186500e+10 9.616300e+10

get_factor - 获取因子

python
get_factor(order_book_ids, factors,count=1,universe=None,expect_df=False)

获取股票截止 T-1 日的因子数据,包括财务衍生指标因子alpha101 因子技术指标 等。

参数

参数类型说明
order_book_idsstr or str list合约代码,可传入 order_book_id, order_book_id list
factorsstr or str list因子名称,可查询 rqdatac.get_all_factor_names() 得到所有有效因子字段
countint默认为 1,获取多少个交易日的数据
universestr当获取界面因子时,universe 指定了因子计算时的股票池
expect_dfbool默认为 False,当设置为 True 时,返回 multi-index DataFrame。

返回

pandas DataFrame

范例

python
def init(context):
 # 查询revenue前十名的公司的股票并且他们的pe_ratio在55和60之间。
    stocks = all_instruments('CS').order_book_id
    fundamental_df=get_factor(stocks,['pe_ratio','revenue'])
    fundamental_df = fundamental_df[(fundamental_df['pe_ratio'] > 55) & (fundamental_df['pe_ratio'] < 60)]
    fundamental_df = fundamental_df.sort_values(by='revenue', ascending=False).head(10).reset_index(1,drop=True)

    # 将查询结果dataframe的fundamental_df存放在context里面以备后面只需:
    context.fundamental_df = fundamental_df

    # 实时打印日志看下查询结果,会有我们精心处理的数据表格显示:
    logger.info(context.fundamental_df)
    update_universe(context.fundamental_df.index.values)

all_instruments - 所有合约基础信息

all_instruments(type=None)

获取某个国家市场的所有合约信息。使用者可以通过这一方法很快地对合约信息有一个快速了解,目前仅支持中国市场。

参数

参数类型说明
typestr需要查询合约类型,例如:type='CS'代表股票。默认是所有类型

其中 type 参数传入的合约类型和对应的解释如下:

合约类型说明
CSCommon Stock, 即股票
ETFExchange Traded Fund, 即交易所交易基金
LOFListed Open-Ended Fund,即上市型开放式基金 (以下分级基金已并入)
INDXIndex, 即指数
FutureFutures,即期货,包含股指、国债和商品期货
SpotSpot,即现货,目前包括上海黄金交易所现货合约
Option期权,包括目前国内已上市的全部期权合约
Convertible沪深两市场内有交易的可转债合约

返回

pandas DataFrame - 所有合约的基本信息。

范例

  • 获取中国市场所有上市型开放式基金的基础信息:
python
[In]all_instruments('LOF')
[Out]
    abbrev_symbol order_book_id product sector_code  symbol
0 CYGA 150303.XSHE null null 华安创业板50A
1 JY500A 150088.XSHE null null 金鹰500A
2 TD500A 150053.XSHE null null 泰达稳健
3 HS500A 150110.XSHE null null 华商500A
4 QSAJ 150235.XSHE null null 鹏华证券A
...

提示

个人版用户使用all_instruments()时若不指定type参数会因为没有期权/可转债/现货数据权限报错

instruments - 合约详细信息

instruments(id_or_symbols)

获取某个国家市场内一个或多个合约最新的详细信息。目前仅支持中国市场。

参数

参数类型说明
id_or_symbolsstr OR str list合约代码或合约代码列表,可传入 order_book_id, order_book_id list。中国市场的 order_book_id 通常类似'000001.XSHE'。需要注意,国内股票、ETF、指数合约代码分别应当以'.XSHG'或'.XSHE'结尾,前者代表上证,后者代表深证。
比如查询平安银行这个股票合约,则键入'000001.XSHE',前面的数字部分为交易所内这个股票的合约代码,后半部分为对应的交易所代码。
期货则无此要求

返回 一个Instrument 对象,或一个 instrument list。

目前系统并不支持跨国家市场的同时调用。传入 order_book_id list 必须属于同一国家市场,不能混合着中美两个国家市场的 order_book_id。请注意,在回测和模拟交易中使用 instruments 返回的都是合约的最新信息。

范例

  • 获取单一股票合约的详细信息:
python
[In]instruments('000001.XSHE')
[Out]
Instrument(order_book_id=000001.XSHE, symbol=平安银行, abbrev_symbol=PAYH, listed_date=19910403, de_listed_date=null, board_type=MainBoard, sector_code_name=金融, sector_code=Financials, round_lot=100, exchange=XSHE, special_type=Normal, status=Active)
  • 获取多个股票合约的详细信息:
python
[In]instruments(['000001.XSHE', '000024.XSHE'])
[Out]
[Instrument(order_book_id=000001.XSHE, symbol=平安银行, abbrev_symbol=PAYH, listed_date=19910403, de_listed_date=null, board_type=MainBoard, sector_code_name=金融, sector_code=Financials, round_lot=100, exchange=XSHE, special_type=Normal, status=Active), Instrument(order_book_id=000024.XSHE, symbol=招商地产, abbrev_symbol=ZSDC, listed_date=19930607, de_listed_date=null, board_type=MainBoard, sector_code_name=金融, sector_code=Financials, round_lot=100, exchange=XSHE, special_type=Normal, status=Active)]
  • 获取合约已上市天数:
instruments('000001.XSHE').days_from_listed()
  • 获取合约距离到期天数:
instruments('IF1701').days_to_expire()

history_bars - 某一合约历史数据

history_bars(order_book_id, bar_count, frequency, fields=None, skip_suspended=True, include_now=False)

获取指定合约的历史行情,同时支持日以及分钟历史数据。不能在 init 中调用。

参数

参数类型注释
order_book_idstr合约代码,必填项
bar_countint获取的历史数据数量,必填项
frequencystr获取数据什么样的频率进行。'1d'或'1m'分别表示每日和每分钟,必填项。您可以指定不同的分钟频率,例如'5m'代表 5 分钟线
fieldsstr OR str list返回数据字段。必填项。见下方列表
skip_suspendedbool是否跳过停牌,默认 True,跳过停牌
include_nowbool是否包括不完整的 bar 数据。默认为 False,不包括。举例来说,在 09:39 的时候获取上一个 5 分钟线,默认将获取到 09:31~09:35 合成的 5 分钟线。如果设置为 True,则将获取到 09:36~09:39 之间合成的"不完整"5 分钟线
adjust_typestr复权方式,默认为pre
不复权 - none
动态前复权 - pre,后复权 - post
fields字段名
open开盘价
high最高价
low最低价
close收盘价
volume成交量
total_turnover成交额
datetimeint 类型时间戳
open_interest持仓量(期货专用)
settlement结算价(期货日线专用)
prev_settlement结算价(期货日线专用)

返回

ndarray ,方便直接与 talib 等计算库对接,效率较 history 返回的 DataFrame 更高。

范例

  • 获取最近 5 天的日线收盘价序列(策略当前日期为 20160706)
python
[In]
logger.info(history_bars('000002.XSHE', 5, '1d', 'close'))
[Out]
[ 8.69  8.7   8.71  8.81  8.81]
  • 获取最近 2 个 5 分钟 bar 数据时间戳以及成交量(策略当前日期为 2015-02-10)
python
[In]
    logger.info('INCLUDE NOW')
    logger.info(history_bars(context.s1, 2, '5m', ['datetime','volume'],include_now=True))
    logger.info('NO INCLUDE NOW')
    logger.info(history_bars(context.s1, 2, '5m', ['datetime','volume'],include_now=False))


[Out]
2016-07-01 09:31:00.00  INFO   INCLUDE NOW
2016-07-01 09:31:00.00  INFO   [(20160630150000, 1420219) (20160701093100, 665317)]
2016-07-01 09:31:00.00  INFO   NO INCLUDE NOW
2016-07-01 09:31:00.00  INFO   [(20160630145500, 654006) (20160630150000, 1420219)]

注:

  • bar 数据为切片数据,例如当前时间为 12:00,使用history_bars(context.s1,3,'60m','close',include_now=True),获取到的是(9:30,10:30],(10:30,11:30],(11:30,12:00]三个时间段的数据(切片是从开盘计算)。
  • 对于获取日线数据,期货指数连续合约(99 结尾合约)在盘中实时行情的场景下将只能获取截止到上一交易日的数据,无法获取当天截止到当前的日线数据;其他合约则无此限制。

history_ticks - 某一合约历史 tick 数据

history_ticks(order_book_id, count)

获取指定合约的历史 tick 行情。只能在 handle_tick 中调用。

参数

参数类型注释
order_book_idstr合约代码,必填项
countint获取的历史 tick 数据数量,必填项

返回

list tick 数据的列表。

范例

python
[In]
logger.info(history_ticks('TF1803', 2))
[Out]
2017-12-25  09:14:00.300000 INFO [Tick(ask_vols: [1.0], asks: [96.640000000000001], bid_vols: [1.0], bids: [96.635000000000005], datetime: 2017-12-22 15:34:34.700000, high: 96.64, last: 96.64, limit_down: 95.27, limit_up: 97.58, low: 96.425, open: 96.47, open_interest: 46121.0, order_book_id: TF1803, prev_close: 96.64, prev_settlement: 96.425, total_turnover: 7463149750.0, volume: 7729.0), Tick(ask_vols: [1.0], asks: [96.599999999999994], bid_vols: [1.0], bids: [96.579999999999998], datetime: 2017-12-25 09:14:00.300000, high: 96.6, last: 96.6, limit_down: 95.445, limit_up: 97.755, low: 96.6, open: 96.6, open_interest: 46115.0, order_book_id: TF1803, prev_close: 96.64, prev_settlement: 96.6, total_turnover: 8694000.0, volume: 9.0)]

get_price - 合约历史数据

get_price(order_book_ids, start_date, end_date=None, frequency='1d', fields=None, adjust_type='pre', skip_suspended=False,expect_df=False)

获取指定合约或合约列表的历史行情(包含起止日期,日线或分钟线),不能在'handle_bar'函数中进行调用。

注意, 这一函数主要是为满足在研究平台编写策略习惯而引入。在编写策略中,使用history_bars进行数据获取会更方便。

参数

参数类型说明
order_book_idsstr OR str list合约代码,合约代码,可传入 order_book_id, order_book_id list
start_datestr, datetime.date, datetime.datetime, pandasTimestamp开始日期,用户必须指定
end_datestr, datetime.date, datetime.datetime, pandasTimestamp结束日期,默认为策略当前日期前一天
frequencystr历史数据的频率。 现在支持日/分钟级别的历史数据,默认为'1d'。使用者可自由选取不同频率,例如'5m'代表 5 分钟线
fieldsstr OR str list返回字段名称
adjust_typestr权息修复方案。前复权 - pre,后复权 - post,不复权 - none
skip_suspendedbool是否跳过停牌数据。默认为 False,不跳过,用停牌前数据进行补齐。True 则为跳过停牌期。注意,当设置为 True 时,函数 order_book_id 只支持单个合约传入
expect_dfbool默认返回原有的 Panel 数据结构。如果调为真,则返回 pandas dataframe

返回

pandas Panel/DataFrame/Series

  • 传入一个 order_book_id,多个 fields,函数会返回一个pandas DataFrame
  • 传入一个 order_book_id,一个 field,函数会返回pandas Series
  • 传入多个 order_book_id,一个 field,函数会返回一个pandas DataFrame
  • 传入多个 order_book_id,函数会返回一个pandas Panel
参数类型说明
openfloat开盘价
closefloat收盘价
highfloat最高价
lowfloat最低价
limit_upfloat涨停价
limit_downfloat跌停价
total_turnoverfloat总成交额
volumefloat总成交量
settlementfloat结算价 (仅限期货日线数据)
prev_settlementfloat昨日结算价(仅限期货日线数据)
open_interestfloat累计持仓量(期货专用)
trading_datepandasTimestamp交易日期(仅限期货分钟线数据),对应期货夜盘的情况

范例

  • 获取单一股票历史日线行情(返回pandas DataFrame):
python
[In]get_price('000001.XSHE', start_date='2015-04-01', end_date='2015-04-12')
[Out]
open close high low total_turnover volume limit_up limit_down
2015-04-01 10.7300 10.8249 10.9470 10.5469 2.608977e+09 236637563.0 11.7542 9.6177
2015-04-02 10.9131 10.7164 10.9470 10.5943 2.222671e+09 202440588.0 11.9102 9.7397
2015-04-03 10.6486 10.7503 10.8114 10.5876 2.262844e+09 206631550.0 11.7881 9.6448
2015-04-07 10.9538 11.4015 11.5032 10.9538 4.898119e+09 426308008.0 11.8288 9.6787
2015-04-08 11.4829 12.1543 12.2628 11.2929 5.784459e+09 485517069.0 12.5409 10.2620
2015-04-09 12.1747 12.2086 12.9208 12.0255 5.794632e+09 456921108.0 13.3684 10.9403
2015-04-10 12.2086 13.4294 13.4294 12.1069 6.339649e+09 480990210.0 13.4294 10.9877
...

current_snapshot - 当前快照数据

current_snapshot(id_or_symbol)

获得当前市场快照数据。只能在日内交易阶段调用,获取当日调用时点的tick数据。市场快照数据记录了每日从开盘到当前的数据信息(集合竞价数据同样支持),可以理解为一个动态的 day bar 数据。在目前分钟回测中,快照数据为当日所有分钟线累积而成,一般情况下,最后一个分钟线获取到的快照数据应当与当日的日线行情保持一致。需要注意,在实盘模拟中,该函数返回的是调用当时的市场快照情况,所以在同一个 handle_bar 中不同时点调用可能返回的数据不同。如果当日截止到调用时候对应股票没有任何成交,那么 snapshot 中的 close, high, low 几个价格水平都将以 0 表示,而 last 将以最近的成交价表示。

参数

参数类型注释
id_or_symbolstr合约代码或简称

返回

调用时点的市场快照tick

范例

  • 在 handle_bar 中调用该函数,假设策略当前时间是 20160104 09:33
python
[In]
logger.info(current_snapshot('000001.XSHE'))
[Out]
2016-01-04 09:33:00.00  INFO
Snapshot(order_book_id: '000001.XSHE', datetime: datetime.datetime(2016, 1, 4, 9, 33), open: 10.0, high: 10.025, low: 9.9667, last: 9.9917, volume: 2050320, total_turnover: 20485195, prev_close: 9.99)

get_dominant_future - 期货主力合约

get_dominant_future(underlying_symbol,rule=0)

获取某一期货品种策略当前日期的主力合约代码。 合约首次上市时,以当日收盘同品种持仓量最大者作为从第二个交易日开始的主力合约。当同品种其他合约持仓量在收盘后超过当前主力合约 1.1 倍时,从第二个交易日开始进行主力合约的切换。日内不会进行主力合约的切换。合约品种详情请见交易费用

参数

参数类型说明
underlying_symbolstr期货合约品种,例如沪深 300 股指期货为'IF'
rulestr or int默认是 rule=0,采用最大昨仓为当日主力合约,每个合约只能做一次主力合约,不会重复出现。针对股指期货,只在当月和次月选择主力合约。
当 rule=1 时,主力合约的选取只考虑最大昨仓这个条件。

返回str - 主力合约 order_book_id

范例

  • 获取某一天的主力合约代码(策略当前日期是 20160801)
python
[In]
get_dominant_future('IF')
[Out]
'IF1608'

get_future_contracts - 期货可交易合约列表

get_future_contracts(underlying_symbol)

获取某一期货品种在策略当前日期的可交易合约 order_book_id 列表。按照到期月份,下标从小到大排列,返回列表中第一个合约对应的就是该品种的近月合约。

参数

参数类型说明
underlying_symbolstr期货合约品种,例如沪深 300 股指期货为'IF'

返回str list - 当日可交易的 order_book_id list

范例

python
[In]
logger.info(get_future_contracts('IF'))
[Out]
['IF1612', 'IF1701', 'IF1703', 'IF1706']

get_securities_margin - 融资融券信息

get_securities_margin(id_or_symbols, count=1, fields=None,expect_df=False)

获取融资融券信息。包括深证融资融券数据以及上证融资融券数据情况。既包括个股数据,也包括市场整体数据。需要注意,T 日的数据将在 T+1 日上午 09:00 左右更新,所以可能无法在 before_trading 阶段获取到上一交易日的最新数据。融资融券的开始日期为 2010 年 3 月 31 日。

参数

参数类型说明
id_or_symbolsstr or str list可输入 order_book_id, order_book_id list。另外,输入'XSHG'或'sh'代表整个上证整体情况;'XSHE'或'sz'代表深证整体情况
countint回溯获取的数据个数。默认为当前能够获取到的最近的数据
fieldsstr OR str list默认为所有字段。见下方列表
expect_dfbool默认返回原有的 Panel 数据结构。如果调为真,则返回 pandas dataframe
fields字段名
margin_balance融资余额
buy_on_margin_value融资买入额
margin_repayment融资偿还额
short_balance融券余额
short_balance_quantity融券余量
short_sell_value融券卖出额
short_sell_quantity融券卖出量
short_repayment_quantity融券偿还量
total_balance融资融券余额

返回

  • 多个 order_book_id,单个 field 的时候返回pandas DataFrame,index 为 date,column 为 order_book_id
  • 单个 order_book_id,多个 fields 的时候返回pandas DataFrame,index 为 date,column 为 fields
  • 单个 order_book_id,单个 field 返回pandas Series
  • 多个 order_book_id,多个 fields 的时候返回pandas Panel Items axis 为 fields Major_axis axis 为时间戳 Minor_axis axis 为 order_book_id

范例

  • 获取沪深两个市场一段时间内的融资余额
python
[In]
logger.info(get_securities_margin('510050.XSHG', count=5))
[Out]
margin_balance buy_on_margin_value short_sell_quantity margin_repayment short_balance_quantity short_repayment_quantity short_balance total_balance
2016-08-01 7.811396e+09 50012306.0 3597600.0 41652042.0 15020600.0 1645576.0 NaN NaN
2016-08-02 7.826381e+09 34518238.0 2375700.0 19532586.0 14154000.0 3242300.0 NaN NaN
2016-08-03 7.733306e+09 17967333.0 4719700.0 111043009.0 16235600.0 2638100.0 NaN NaN
2016-08-04 7.741497e+09 30259359.0 6488600.0 22068637.0 17499000.0 5225200.0 NaN NaN
2016-08-05 7.726343e+09 25270756.0 2865863.0 40423859.0 14252363.0 6112500.0 NaN NaN
  • 获取沪深两个市场一段时间内的融资余额
python
[In]
logger.info(get_securities_margin(['XSHE', 'XSHG'], count=5, fields='margin_balance'))
[Out]
  XSHE  XSHG
2016-08-01 3.837627e+11 4.763557e+11
2016-08-02 3.828923e+11 4.763931e+11
2016-08-03 3.823545e+11 4.769321e+11
2016-08-04 3.833260e+11 4.776380e+11
2016-08-05 3.812751e+11 4.766928e+11
  • 获取上证个股以及整个上证市场融资融券情况
python
[In]
logger.info(get_securities_margin(['XSHG', '601988.XSHG', '510050.XSHG'], count=5))
[Out]
<class 'pandas.core.panel.Panel'>
Dimensions: 8 (items) x 5 (major_axis) x 3 (minor_axis)
Items axis: margin_balance to total_balance
Major_axis axis: 2016-08-01 00:00:00 to 2016-08-05 00:00:00
Minor_axis axis: XSHG to 510050.XSHG
  • 获取 50ETF 融资偿还额情况
python
[In]
logger.info(get_securities_margin('510050.XSHG', count=5, fields='margin_repayment'))
[Out]
2016-08-01     41652042.0
2016-08-02     19532586.0
2016-08-03    111043009.0
2016-08-04     22068637.0
2016-08-05     40423859.0
Name: margin_repayment, dtype: float64

get_shares - 流通股信息

get_shares(id_or_symbols, count=1, fields=None,expect_df=False)

获取某只股票在一段时间内的流通情况。

参数

参数类型说明
id_or_symbolsstr可输入 order_book_id, order_book_id list
countint回溯获取的数据个数。默认为当前能够获取到的最近的数据
fieldsstr oR str list默认为所有字段。见下方列表
expect_dfbool默认返回原有的 Panel 数据结构。如果调为真,则返回 pandas dataframe
fields字段名
total总股本
circulation_a流通 A 股
management_circulation已流通高管持股
non_circulation_a非流通 A 股合计
total_aA 股总股本

返回

  • 多个 order_book_id,多个 fields 的时候返回pandas Panel
  • 单个 order_book_id,多个 fields 的时候返回pandas DataFrame
  • 单个 order_book_id,单个 field 返回pandas Series

范例

  • 获取平安银行总股本数据
python
[In]
logger.info(get_shares('000001.XSHE', count=5, fields='total'))
[Out]
2016-08-01    1.717041e+10
2016-08-02    1.717041e+10
2016-08-03    1.717041e+10
2016-08-04    1.717041e+10
2016-08-05    1.717041e+10
Name: total, dtype: float64

get_stock_connect - 沪深港通持股信息

get_stock_connect(id_or_symbols, count=1, fields=None,expect_df=False)

获取 A 股股票在香港上市交易的持股情况。

参数

参数类型说明
id_or_symbolsstr可输入 order_book_id, order_book_id list,注这里输入的是 A 股编码
countint回溯获取的数据个数。默认为当前能够获取到的最近的数据
fieldsstr oR str list默认为所有字段。见下方列表
expect_dfbool默认返回原有的 Panel 数据结构。如果调为真,则返回 pandas dataframe
fields字段名
shares_holding持股量
holding_ratio持股比例

返回

  • 多个 order_book_id,多个 fields 的时候返回pandas Panel
  • 单个 order_book_id,多个 fields 的时候返回pandas DataFrame
  • 单个 order_book_id,单个 field 返回pandas Series

范例

  • 获取平安银行数据
python
[In]
logger.info(get_stock_connect('000001.XSHE', count=1, fields='shares_holding'))
[Out]
2018-05-10    414866956
Name: total, dtype: float64

get_turnover_rate - 历史换手率

get_turnover_rate(id_or_symbols, count=1, fields=None,expect_df=False)

参数

参数类型说明
id_or_symbolsstr or str list可输入 order_book_id, order_book_id list
countint回溯获取的数据个数。默认为当前能够获取到的最近的数据
fieldsstr OR str list默认为所有字段。见下方列表
expect_dfbool默认返回原有的 Panel 数据结构。如果调为真,则返回 pandas dataframe
fields字段名
today当天换手率
week过去一周平均换手率
month过去一个月平均换手率
year过去一年平均换手率
current_year当年平均换手率

返回

  • 如果只传入一个 order_book_id,多个 fields,返回pandas DataFrame
  • 如果传入 order_book_id list,并指定单个 field,函数会返回一个pandas DataFrame
  • 如果传入 order_book_id list,并指定多个 fields,函数会返回一个pandas Panel

范例

  • 获取平安银行历史换手率情况
python
[In]
logger.info(get_turnover_rate('000001.XSHE', count=5))
[Out]
             today    week   month  three_month  six_month    year  \
2016-08-01  0.5190  0.4478  0.3213       0.2877     0.3442  0.5027
2016-08-02  0.3070  0.4134  0.3112       0.2843     0.3427  0.5019
2016-08-03  0.2902  0.3460  0.3102       0.2823     0.3432  0.4982
2016-08-04  0.9189  0.4938  0.3331       0.2914     0.3482  0.4992
2016-08-05  0.4962  0.5031  0.3426       0.2960     0.3504  0.4994

            current_year   total
2016-08-01        0.3585  1.1341
2016-08-02        0.3570  1.1341
2016-08-03        0.3565  1.1339
2016-08-04        0.3604  1.1339
2016-08-05        0.3613  1.1338

industry - 行业股票列表

industry(code)

获得属于某一行业的所有股票列表。

参数

参数类型注释
codestr OR industry_code item行业名称或行业代码。例如,农业可填写 industry_code.A01 或 'A01'

返回

获得属于某一行业的所有股票的 order_book_id list。

范例

def init(context):
 stock_list = industry('A01')
    logger.info("农业股票列表:" + str(stock_list))

得到的结果是:

INITINFO 农业股票列表:['600354.XSHG', '601118.XSHG', '002772.XSHE', '600371.XSHG', '600313.XSHG', '600672.XSHG', '600359.XSHG', '300143.XSHE', '002041.XSHE', '600762.XSHG', '600540.XSHG', '300189.XSHE', '600108.XSHG', '300087.XSHE', '600598.XSHG', '000998.XSHE', '600506.XSHG']

我们目前使用的行业分类来自于中国国家统计局的国民经济行业分类,可以使用这里的任何一个行业代码来调用行业的股票列表:

行业代码行业名称
A01农业
A02林业
A03畜牧业
A04渔业
A05农、林、牧、渔服务业
B06煤炭开采和洗选业
B07石油和天然气开采业
B08黑色金属矿采选业
B09有色金属矿采选业
B10非金属矿采选业
B11开采辅助活动
B12其他采矿业
C13农副食品加工业
C14食品制造业
C15酒、饮料和精制茶制造业
C16烟草制品业
C17纺织业
C18纺织服装、服饰业
C19皮革、毛皮、羽毛及其制品和制鞋业
C20木材加工及木、竹、藤、棕、草制品业
C21家具制造业
C22造纸及纸制品业
C23印刷和记录媒介复制业
C24文教、工美、体育和娱乐用品制造业
C25石油加工、炼焦及核燃料加工业
C26化学原料及化学制品制造业
C27医药制造业
C28化学纤维制造业
C29橡胶和塑料制品业
C30非金属矿物制品业
C31黑色金属冶炼及压延加工业
C32有色金属冶炼和压延加工业
C33金属制品业
C34通用设备制造业
C35专用设备制造业
C36汽车制造业
C37铁路、船舶、航空航天和其它运输设备制造业
C38电气机械及器材制造业
C39计算机、通信和其他电子设备制造业
C40仪器仪表制造业
C41其他制造业
C42废弃资源综合利用业
C43金属制品、机械和设备修理业
D44电力、热力生产和供应业
D45燃气生产和供应业
D46水的生产和供应业
E47房屋建筑业
E48土木工程建筑业
E49建筑安装业
E50建筑装饰和其他建筑业
F51批发业
F52零售业
G53铁路运输业
G54道路运输业
G55水上运输业
G56航空运输业
G57管道运输业
G58装卸搬运和运输代理业
G59仓储业
G60邮政业
H61住宿业
H62餐饮业
I63电信、广播电视和卫星传输服务
I64互联网和相关服务
I65软件和信息技术服务业
J66货币金融服务
J67资本市场服务
J68保险业
J69其他金融业
K70房地产业
L71租赁业
L72商务服务业
M73研究和试验发展
M74专业技术服务业
M75科技推广和应用服务业
N76水利管理业
N77生态保护和环境治理业
N78公共设施管理业
O79居民服务业
O80机动车、电子产品和日用产品修理业
O81其他服务业
P82教育
Q83卫生
Q84社会工作
R85新闻和出版业
R86广播、电视、电影和影视录音制作业
R87文化艺术业
R88体育
R89娱乐业
S90综合

sector - 板块股票列表

sector(code)

获得属于某一板块的所有股票列表。

参数

参数类型注释
codestr OR sector_code items板块代码。例如,能源板块可填写'Energy'

返回

属于该板块的股票 order_book_id 或 order_book_id list.

范例

def init(context):

    id = sector("ConsumerDiscretionary")
    logger.info(id)

得到的结果是:

INIT INFO
['002045.XSHE', '603099.XSHG', '002486.XSHE', '002536.XSHE', '300100.XSHE', '600633.XSHG', '002291.XSHE', ..., '600233.XSHG']

目前支持的板块分类如下,其取值参考自 MSCI 发布的全球行业标准分类:

板块代码中文板块名称英文板块名称
Energy能源energy
Materials原材料materials
ConsumerDiscretionary非必需消费品consumer discretionary
ConsumerStaples必需消费品consumer staples
HealthCare医疗保健health care
Financials金融financials
RealEstate房地产real estate
InformationTechnology信息技术information technology
TelecommunicationServices电信服务telecommunication services
Utilities公共服务utilities
Industrials工业industrials

get_instrument_industry - 获取股票行业分类

get_instrument_industry(order_book_ids,level=1,source="citics")

获得

参数

参数类型注释
order_book_jdsstr OR list股票代码
sourcestr分类依据。 citics: 中信, gildata: 聚源
levelinteger行业分类级别,共三级,默认返回一级分类。参数 0,1,2,3 一一对应,其中 0 返回三级分类完整情况

返回

所属合约的对应行业分类。 pandas DataFrame

范例

python
def init(context):
    pass

def before_trading(context):

    print(get_instrument_industry(["000001.XSHE","000002.XSHE"],level=1,source="citics"))


def handle_bar(context, bar_dict):

    pass

得到的结果是:

python
    2016-01-04 00:00:00 INFO     first_industry_code first_industry_name
    order_book_id
    000001.XSHE                    40                  银行
    000002.XSHE                    42                 房地产
    2016-01-05 00:00:00 INFO     first_industry_code first_industry_name
    order_book_id
    000001.XSHE                    40                  银行
    000002.XSHE                    42                 房地产

concept - 概念股票列表

concept(concept_name1, concept_name2, ...)

获取属于某个或某几个概念的股票列表。

参数

参数类型说明
concept_namesstr or 多个str概念名称。可以从概念列表中选择一个或多个概念填写

返回

属于该概念的股票 order_book_id 或 order_book_id list.

范例

  • 得到一个概念的股票列表:
python
[In]concept('民营医院')
[Out]
['600105.XSHG',
 '002550.XSHE',
 '002004.XSHE',
 '002424.XSHE',
 ...]
  • 得到某几个概念的股票列表:
python
[In]concept('民营医院', '国企改革')
[Out]
['601607.XSHG',
 '600748.XSHG',
 '600630.XSHG',
 ...]

概念列表

3D打印  3D玻璃  4G概念  5G概念  360私有化  AB股  AH股  BDI指数  IPV6  ITO导电玻璃
LED  MLCC  MSCI概念  O2O概念  OLED  P2P概念  PET薄膜  PM2.5  PPP模式  QFII重仓
ST概念  S股  VA  VB1  VC  VD3  VE  一带一路  万达私有化  三七概念
三沙概念  三网融合  三聚氰胺  上海国资改革  上海房价上涨  上海自贸区  不锈钢概念  丙烯类  东盟自贸区  东莞房价上涨
丝绸之路  两桶油改革  中厚板  中央政务区  中字头  中山房价上涨  中成药  中药饮片  中超概念  中韩自贸区
临沂房价上涨  丹参概念  举牌概念  乙二醇概念  乳业  二胎概念  云计算  互联网+  互联网金融  京津冀一体化
人免疫球蛋白概念  人凝血因子概念  人参概念  人工智能  人工牛黄概念  人民币贬值概念  人脑工程  人脸识别  人血白蛋白概念  休闲食品
低碳经济  体检与健康管理  体育产业  何首乌概念  佛山房价上涨  供应链金融  供热  保健酒  债转股  健康中国
充电桩  光伏概念  光伏电池  光学膜  光学镜头  免疫治疗  党参概念  兜底增持概念  全息技术  六味地黄
六氟磷酸锂  兰州房价上涨  共享单车  养老概念  养老金持股  军工  军民融合  农业现代化  农机  农村电商
冬虫夏草概念  冷轧  冷链物流  切片  创投  制冷剂  券商  前海概念  动力煤  化学制剂
化学原料药  北京冬奥会  北京房价上涨  北斗导航  区块链  医用医疗器械  医用耗材  医疗器械  医疗机构配套服务  医药中间体
医药工业配套服务  医药电商  医药设备和实验室工程  医院  单抗概念  单晶硅  南京房价上涨  南宁房价上涨  南昌房价上涨  南通房价上涨
印刷电路板(PCB)  厦门房价上涨  参股券商  参股新股  可燃冰  合同能源  合肥房价上涨  吉林房价上涨  含氟精细化工  含氟聚合物材料
呼和浩特房价上涨  咖啡因概念  哈尔滨房价上涨  唐山房价上涨  徐州房价上涨  微信小程序  快递  恒大概念  惠州房价上涨  成渝特区
啤酒  固废处理  国产软件  国企改革  土地流转  在线教育  地下管网  地热能  地黄概念  型材
型材(钢材)  基因工程药物  基因测序  塑料钞票  增强现实  壳资源  复合肥  大数据  大理房价上涨  大输液
大连房价上涨  大金融  大飞机  天津房价上涨  家用电器  宽带中国  尼龙66切片  尼龙薄膜  尾气治理  尿素
天津自贸区  天然气  天然气供应  太阳能  头孢  宁波房价上涨  安防  宜兴房价上涨  实体药店  家用医疗器械
川贝概念  工业4.0  工业导爆索  工业雷管  己二酸概念  布洛芬概念  常州房价上涨  广州房价上涨  廊坊房价上涨  建筑节能
彩票概念  成都房价上涨  房地产开发  房屋租赁  手游概念  振兴东北  摘帽  新零售  无人机  无人零售
数字电视  文化传媒  新三板  新型城镇化  新材料  新疆基建  新疆振兴  新股与次新股  新能源  新能源车
无人驾驶  无汞电解二氧化锰  无烟煤  棒材(钢材)  武汉房价上涨  民营医院  民营银行  氟化工  氧化铁  氧化锆
无线充电  无锡房价上涨  昆山房价上涨  普通电解二氧化锰  景点旅游  智慧停车  智慧城市  智能交通  智能医疗  智能家居
智能电网  智能电视  智能穿戴  智能音箱  有机硅类  期货概念  机器人概念  杀菌剂  杀虫剂  杭州亚运会
杭州房价上涨  杭州湾大湾区  板材  板材(钢材)  板蓝根概念  染料类  柴油  柴胡概念  核电  棉花
氨纶  水利建设  水泥  水电  汕头房价上涨  江苏国资改革  污水处理  汽油  汽车电子概念  沈阳房价上涨
沥青类  沪港通  油品升级  油改概念  油气设备服务  泉州房价上涨  济南房价上涨  海参  海口房价上涨  海峡西岸
海工装备  海洋经济  海绵城市  涤纶类  液晶面板  液氨  液碱  深圳国资改革  深圳房价上涨  深港通
湖州房价上涨  滨海新区  火电  炭黑概念  炸药  烟台房价上涨  烧碱  热轧  焦炭概念  焦煤
煤化工  煤改气  燃料乙醇  燃料电池  牛黄概念  物流电商平台  物联网  特斯拉  特色小镇  特钢概念
特高压  独家药品  猪  王者荣耀概念  环戊烷  环氧丙烷  玻璃基板  玻璃概念  玻璃纤维  玻纤类
珠海房价上涨  生态农业  生物医药  生物疫苗  生物质能  甲醇概念  电力改革  电商概念  电子信息  电子发票
电子竞技  疫苗  病毒防治  白炭黑  白酒  白银  白马股  盖板玻璃  石墨烯  石油
磁性材料  磷矿石  磷酸  磷酸盐  磷酸铁  磷铵  票交所  福州房价上涨  福建自贸区  禽流感
移动互联网  移动支付  稀土  稀土永磁  稀缺资源  管材  管材(钢材)  粘胶短纤  粘胶长丝  粤港澳自贸区
精对苯二甲酸(PTA)  糖  红参概念  红花概念  纯碱概念  线材(钢材)  绍兴房价上涨  维生素  网上药店  网红直播
网约车  网络安全  网络游戏  美丽中国  耐火材料  职业教育  联碱  联通混改  聚丙烯  聚氨酯
聚氨酯胶  聚氯乙烯  聚氯乙烯树脂  聚氯乙烯糊树脂  聚酯切片  聚酯薄膜  聚醚类  肉制品  股权冻结  股权转让
胶印油墨  能源互联网  腾讯概念  自来水  自由贸易港  航母概念  航空煤油  节能照明  节能环保  芜湖房价上涨
芯片概念  苏州房价上涨  苹果概念  茯苓概念  草甘膦  药品分销  葡萄酒  蓝宝石  虚拟现实  蚂蚁金服概念
蚌埠房价上涨  蛋氨酸  融资融券  螺纹钢  血塞(栓)通  血液制品  装配式建筑  西安房价上涨  西安自贸区  西洋参概念
覆铜板  触摸屏概念  证金持股  诊断试剂  语音技术  调味品  贵阳房价上涨  赛马概念  超导概念  超级品牌
超级电容  超细纤维类  足球概念  跨境电商  车联网  转融券标的  轮胎  连翘概念  迪士尼  送转预期
通用航空  郑州房价上涨  醋酸丁酯  重庆房价上涨  量子通信  金华房价上涨  金融IC  金融改革  金融机具  金银花概念
钒电池  钛白粉  钢坯  钨  钴  钼  铁精粉  铁路基建  铅  铜
铝  铝电解电容器  银川房价上涨  银杏叶概念  锂  锂电池概念  锂离子电解液  锂锰电解二氧化锰  锌  锡盐
锦纶丝类  锦纶切片  镇江房价上涨  镍  长春房价上涨  长沙房价上涨  阻燃树脂  阿胶概念  阿里概念  除草剂
雄安新区  集成电路  青岛房价上涨  青霉素类概念  靶材  页岩气  顺酐类  风电  风能  食品安全
饲料概念  驴皮概念  高校  高端装备  高送转  高铁  鸡  鸡尾酒  黄磷  黄芩概念
黄芪概念  黄连概念  黄酒  黄金  黄金水道  黑磷

index_components - 指数成分股

index_components(order_book_id, date=None)

获取某一指数的股票构成列表,也支持指数的历史构成查询。

参数

参数类型说明
order_book_idstr指数代码,可传入 order_book_id
datestr, date, datetime, pandas Timestamp查询日期,默认为策略当前日期。如指定,则应保证该日期不晚于策略当前日期

返回

构成该指数股票的 order_book_id list

范例

  • 得到上证指数在策略当前日期的构成股票的列表:
python
[In]index_components('000001.XSHG')
[Out]['600000.XSHG', '600004.XSHG', ...]

get_dividend - 分红数据

get_dividend(order_book_id,  start_date)

获取某只股票到策略当前日期前一天的分红情况(包含起止日期)。

参数

参数类型说明
order_book_idstr可输入 order_book_id 或 symbol
start_datestr, date, datetime, pandasTimestamp开始日期,用户必须指定,需要早于策略当前日期

返回

ndarray - 查询时间段内某个股票的分红数据

  • declaration_announcement_date: 分红宣布日,上市公司一般会提前一段时间公布未来的分红派息事件
  • book_closure_date: 股权登记日
  • dividend_cash_before_tax: 税前分红
  • ex_dividend_date: 除权除息日,该天股票的价格会因为分红而进行调整
  • payable_date: 分红到帐日,这一天最终分红的现金会到账
  • round_lot: 分红最小单位,例如:10 代表每 10 股派发 dividend_cash_before_tax 单位的税前现金

范例

  • 获取平安银行 2013-01-04 到策略当前日期前一天的分红数据:
python
[In]
get_dividend('000001.XSHE', start_date='20130104')

[Out]
[(20130614, 20130619, 20130620, 20130620, 1.7 , 10)
 (20140606, 20140611, 20140612, 20140612, 1.6 , 10)
 (20150407, 20150410, 20150413, 20150413, 1.74, 10)]

get_split - 拆分数据

get_split(order_book_id,  start_date)

获取某只股票到策略当前日期前一天的拆分情况(包含起止日期)。

参数

参数类型说明
order_book_idstr证券代码,证券的独特的标识符,例如:'000001.XSHE'
start_datestr, date, datetime, pandasTimestamp开始日期,用户必须指定,需要早于策略当前日期

返回

pandas DataFrame - 查询时间段内的某个股票的拆分数据

  • ex_dividend_date: 除权除息日,该天股票的价格会因为拆分而进行调整
  • book_closure_date: 股权登记日
  • split_coefficient_from: 拆分因子(拆分前)
  • split_coefficient_to: 拆分因子(拆分后)

例如:每 10 股转增 2 股,则 split_coefficient_from = 10, split_coefficient_to = 12.

范例

python
[In]
get_split('000001.XSHE', start_date='2010-01-04')

[Out]
                 book_closure_date payable_date  split_coefficient_from  \
ex_dividend_date
2013-06-20              2013-06-19   2013-06-20                      10

                  split_coefficient_to
ex_dividend_date
2013-06-20                        16.0

get_trading_dates - 交易日列表

get_trading_dates(start_date, end_date)

获取某个国家市场的交易日列表(起止日期加入判断)。目前仅支持中国市场。

参数

参数类型说明
start_datestr, date, datetime, pandasTimestamp开始日期,用户必须指定
end_datestr, date, datetime, pandasTimestamp结束日期,用户必须指定

返回

datetime.date list

范例

python
[In]get_trading_dates(start_date='2016-05-05', end_date='20160505')
[Out]
[datetime.date(2016, 5, 5)]

get_previous_trading_date - 上一交易日

get_previous_trading_date(date, n=1)

获取指定日期的上一(或 n)交易日。

参数

参数类型说明
datestr, date, datetime, pandasTimestamp指定日期
nint第 n 个交易日,默认为 1

返回

datetime.date

范例

python
[In]get_previous_trading_date(date='2016-05-02')
[Out]
[datetime.date(2016, 4, 29)]

get_next_trading_date - 下一交易日

get_next_trading_date(date, n=1)

获取指定日期的下一交易日

参数

参数类型说明
datestr, date, datetime, pandasTimestamp指定日期
nint第 n 个交易日,默认为 1

返回

datetime.date

范例

python
[In]get_next_trading_date(date='2016-05-01')
[Out]
[datetime.date(2016, 5, 3)]

get_price_change_rate - 获取历史涨跌幅

get_price_change_rate(id_or_symbols, count=1)

获取股票或指数的历史涨跌幅。注意目前只支持股票与指数两类合约,基金、期货等目前并不支持。历史涨跌幅基于前复权价格。

参数

参数类型说明
id_or_symbolsstr or str list可输入 order_book_id, order_book_id list
countint回溯获取的数据个数。默认为当前能够获取到的最近的数据

返回

  • 传入多个 order_book_id,函数会返回pandas DataFrame
  • 传入一个 order_book_id,函数会返回pandas Series

范例

  • 获取平安银行以及沪深 300 指数一段时间的涨跌幅情况。
python
[In]
get_price_change_rate(['000001.XSHE', '510050.XSHG'], 1)
[Out]
2016-06-01 15:30:00.00  INFO   order_book_id  000001.XSHE  510050.XSHG
                               date
                               2016-05-31        0.026265     0.033964
2016-06-02 15:30:00.00  INFO   order_book_id  000001.XSHE  510050.XSHG
                               date
                               2016-06-01       -0.006635    -0.008308

get_yield_curve - 收益率曲线

get_yield_curve(date=None, tenor=None)

获取某个国家市场指定日期的收益率曲线水平。

数据为 2002 年至今的中债国债收益率曲线,来源于中央国债登记结算有限责任公司。 注意:回测中的默认返回会是回测日期的前一个交易日。
当回测、模拟实盘中带有期货品种,且品种合约有夜盘交易时(意味着期货合约交易日去到下一天),此时的收益率曲线会是当天数据,然而可能还未生成。因此建议针对回测里可能测到的当前日期和模拟实盘策略,先查验 trading_day 然后再调取收益率曲线。

参数

参数类型说明
datestr, date, datetime, pandasTimestamp查询日期,默认为策略当前日期前一天
tenorstr标准期限,'0S' - 隔夜,'1M' - 1 个月,'1Y' - 1 年,默认为全部期限

返回

pandas DataFrame - 查询时间段内无风险收益率曲线

范例

python
[In]
get_yield_curve('20130104')

[Out]
                0S      1M      2M      3M      6M      9M      1Y      2Y  \
2013-01-04  0.0196  0.0253  0.0288  0.0279  0.0280  0.0283  0.0292  0.0310

                3Y      4Y   ...        6Y      7Y      8Y      9Y     10Y  \
2013-01-04  0.0314  0.0318   ...    0.0342  0.0350  0.0353  0.0357  0.0361
...

is_suspended - 全天停牌判断

is_suspended(order_book_id, count=1)

判断某只股票是否全天停牌。

参数

参数类型说明
order_book_idstr某只股票的代码,可传入单只股票的 order_book_id, symbol
countint回溯获取的数据个数。默认为当前能够获取到的最近的数据

返回

count 为 1 时 bool

count>1 时 list

is_st_stock - ST 股判断

is_st_stock(order_book_id, count=1)

判断一只或多只股票在一段时间内是否为 ST 股(包括 ST 与*ST)。

ST 股是有退市风险因此风险比较大的股票,很多时候您也会希望判断自己使用的股票是否是'ST'股来避开这些风险大的股票。另外,我们目前的策略比赛也禁止了使用'ST'股。

参数

参数类型注释
order_book_idstr股票的代码,可传入 order_book_id, symbol
countint回溯获取的数据个数。默认为当前能够获取到的最近的数据

返回 count 为 1 时 bool

count>1 时 list

其他方法

subscribe_event - 事件订阅

subscribe_event(event_type, handler)

注册回调函数, 当对应事件更新时, 回调逻辑被触发。视对应事件不同, 可用于对订单状态更新、成交发生等事件监控。

参数

参数类型注释
event_typeEVENT需要订阅的事件类别
handlerfunction回调函数, 函数定义中需要包含 event 这一参数

返回

范例

精确控制订单生命周期。您可以使用 RQAlpha 策略框架提供的事件订阅机制来控制订单生命周期, 例如成交发生、订单被撤销等。可以在策略初始化时通过 subscribe_event 这一 API 从 支持的事件列表 中选择对应的事件进行订阅并注册回调函数。这样, 当事件发生的时候, 对应回调函数会被触发。

下面的例子展示了回调函数的注册机制, 当订单创建成功以及成交发生的时候, 对应的回调函数将会分别被触发。

def init(context):
    # 注册成交事件
    subscribe_event(EVENT.TRADE, on_trade)
    # 注册订单成功创建事件
    subscribe_event(EVENT.ORDER_CREATION_PASS, on_order_created)
    context.count = 0
    context.s1 = '000001.XSHE'

# 回调函数定义中需要包含 context, event 参数
def on_trade(context, event):
    # 获取成交信息
    trade = event.trade
    if trade.order_book_id == context.s1:
     print(trade)

# 回调函数定义中需要包含 event 这一参数
def on_order_created(context, event):
    # 获取订单信息
    order = event.order
    print(order)

def handle_bar(context, bar_dict):
    px = bar_dict['000001.XSHE'].last + 0.2
    if context.count == 0:
        # 订单创建, 并使用关键字 context 保存全局变量
        submit_order(context.s1, amount=100, side=SIDE.BUY, price=px)
        context.count += 1

update_universe - 更新股票池

update_universe(order_book_id)

该方法用于更新现在关注的证券的集合(e.g.:股票池)。PS:会在下一个 bar 事件触发时候产生(新的关注的股票池更新)效果。并且 update_universe 会是覆盖(overwrite)的操作而不是在已有的股票池的基础上进行增量添加。比如已有的股票池为['000001.XSHE', '000024.XSHE']然后调用了update_universe(['000030.XSHE'])之后,股票池就会变成000030.XSHE一个股票了,随后的数据更新也只会跟踪000030.XSHE这一个股票了。

参数

参数类型注释
order_book_idstr OR str list合约代码,可传入 order_book_id, order_book_id list

范例

下面的代码是将股票池变更为只有 2 个股票000001.XSHE000024.XSHE:

update_universe(['000001.XSHE', '000024.XSHE'])

当然,您也可以使用合约简称:

update_universe(['平安银行', '招商地产'])

subscribe - 订阅行情

subscribe(order_book_id)

订阅合约行情。该操作会导致合约池内合约的增加,从而影响handle_bar中处理 bar 数据的数量。

需要注意,用户在初次编写策略时候需要首先订阅合约行情,否则handle_bar不会被触发。

参数

参数类型说明
order_book_idstr, str list合约代码,或代码列表,例如'IF1503'

返回

unsubscribe - 取消订阅行情

unsubscribe(order_book_id)

取消订阅合约行情。取消订阅会导致合约池内合约的减少,如果当前合约池中没有任何合约,则策略直接退出。

参数

参数类型说明
order_book_idstr, str list合约代码,或代码列表

返回

reg_indicator - 注册指标

reg_indicator(name, func_obj, freq='1d', win_size=10)

参数

参数类型说明
namestr定义的指标名称
func_objfunction函数对象
freqstr指标计算的周期。支持日级别与分钟级别,'1d'代表每日,'5m'代表 5 分钟
win_sizeint获取数据回溯窗口。该指标用于在注册指标时让系统获取回溯获取数据的最大窗口,便于数据的加载与预计算

返回

get_indicator - 获取指标

get_indicator(order_book_id, name)

参数

参数类型说明
order_book_idstr合约代码
namestr定义的指标名称

name 为您注册的指标中的 name 参数,使用案例请见自定义技术指标返回 定义指标返回值

get_file - 读取文件

python
get_file(file_path)

读取您的私有文件(您的私有文件可以在研究模块中看到)

参数类型注释
file_pathstr相对路径,相对于您的私有的在研究模块空间的根目录的路径

返回 返回文件的原始内容,不做任何 decode。

范例

以下代码可以在回测中使用,读取自己的私有文件:day_px.csv 之后,然后通过 pandas 转换成 dataframe 类型进行方便使用:

python
# 可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。
import pandas as pd
from six import BytesIO

# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
def init(context):
    # 由于保存的是原数据文件,因此需要用BytesIO进行转换
    body = get_file('day_px.csv')
    data=pd.read_csv(BytesIO(body))
    logger.info(data)

put_file - 存储文件

python
put_file(file_path, data, append=False)

将指定信息存储到指定目录的文件中。该 API 只能在回测中调用,研究平台不支持但是存储的文件能够在研究模块中取用。若要在研究平台存储文件,可以参考研究平台 get_file 的样例

参数

参数类型注释
file_pathstr相对路径,相对于您的私有的在研究模块空间的根目录的路径
datastr, bytes保存的信息。如果为 str 类型,则会默认以 utf-8 方式编码存储
appendbool是否续写文件。默认为 False,即每次调用时都会清除原文件内容

返回

范例

运行结束之后,您就能够在研究平台中看到 test_file.csv 文件了。

python
put_file('test_file.csv', 'hello world')

在使用put_file()函数时,如果要存储的数据类型是 DataFrame,则函数中的 data 参数应该添加 DataFrame 的to_csv()方法。

范例

以下代码可在回测中进行使用,通过get_price()读取某个股票在某段时间内的历史行情数据,读取的结果为一个 DataFrame 数据,再通过put_file()将数据进行存储:

python
#可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。
import pandas as pd

# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
def init(context):
    file_data = get_price('000001.XSHE','20190901','20190920','1m')
    put_file('test_file.csv',pd.DataFrame.to_csv(file_data))

# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context, bar_dict):
    # 开始编写你的主要的算法逻辑
    pass

运行结束后,您就能够在研究平台中看到 test_file.csv 文件了。

get_csv - 读取 csv 数据

python
get_csv(csv_file_path)

get_csv 函数支持 pandas.read_csv 的全部参数。

参数

参数类型注释
'csv_file_path'str - requiredipython 策略研究部分上传的 csv 文件的路径。

返回pandas Dataframe - 里面保存着 csv 文件中的数据内容

范例

如果仅仅是想使用 csv 文件格式的话可以使用 get_csv 接口,我们在投资研究部分提供了上传自己数据的功能,您从这里进入 ipython 投资研究:

图片描述

接着可以点击右上角的上传文件:

图片描述

那么在 ipython 策略研究的首页可以看到上传之后的 csv 文件,此处我们上传了一个 csv 文件:revenue.csv 用来做随后的例子 图片描述

我们看下这个 csv 文件中的数据内容:

2015-01-10,2937842929.6,113463565.69,1733702964.32
2014-01-10,2926316060.58,116181575.59,883935497.71
2013-01-10,2616532214.37,90146425.57,948898049.5
2012-01-10,2681016310.35,,620593405.65
2011-01-10,2034147254.71,,499812019.44
2010-01-10,,,508985888.73

随后我们可以在编写策略的时候使用get_csv来调用:

python
def init(context):
 context.csv_df = get_csv("revenue.csv")
 logger.info(context.csv_df)

我们把 renuve.csv 中的数据读取出来以后是一个dataframe然后存放到了context.csv_df里面以供之后的策略使用,可以运行以后看下打印出来的结果:

INITINFO    2015-01-10  2937842929.6  113463565.69  1733702964.32
         0  2014-01-10  2.926316e+09  1.161816e+08   8.839355e+08
   1  2013-01-10  2.616532e+09  9.014643e+07   9.488980e+08
   2  2012-01-10  2.681016e+09           NaN   6.205934e+08
   3  2011-01-10  2.034147e+09           NaN   4.998120e+08
   4  2010-01-10           NaN           NaN   5.089859e+08

plot - 画图

plot(series_name, value)

plot函数可以将时间序列的数据传给页面进行绘图,结果是以时间为横轴,value 为纵轴的曲线。

参数

参数类型注释
series_namestr绘制曲线的名称,用户必须填写
valuefloat当前日期的曲线的点的值,用户必须填写

范例

python
 # 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context, bar_dict):
    # TODO: 开始编写你的算法吧!

    plot('close', bar_dict['000001.XSHE'].close)
    plot('high', bar_dict['000001.XSHE'].high)
    plot('low', bar_dict['000001.XSHE'].low)
    plot('open', bar_dict['000001.XSHE'].open)

以上代码画图的结果截图:

图片描述

重要对象

Bar 对象

属性类型注释
order_book_idstr合约代码
symbolstr合约简称
datetimedatetime.datetime时间戳
openfloat开盘价
closefloat收盘价
highfloat最高价
lowfloat最低价
volumefloat成交量
total_turnoverfloat成交额
prev_closefloat昨日收盘价
limit_upfloat涨停价
limit_downfloat跌停价
isnanbool当前 bar 数据是否有行情。例如,获取已经到期的合约数据,isnan 此时为 True
suspendedbool是否全天停牌
prev_settlementfloat昨结算(期货日线数据专用)
settlementfloat结算(期货日线数据专用)

注意,在股票策略中 bar 对象可以拿到所有股票合约的 bar 信息。如下

python
def handle_bar(context,bar_dict):
    volume = bar_dict['000001.XSHE'].volume
    #拿到'000001.XSHE'当前bar的成交量

但在期货策略中,bar 对象只能拿到订阅的合约的 bar 信息。

Order 对象

属性类型注释
order_idint唯一标识订单的 id
order_book_idstr合约代码
datetimedatetime.datetime订单创建时间
sideSIDE订单方向
pricefloat订单价格,只有在订单类型为'限价单'的时候才有意义
quantityint订单数量
filled_quantityint订单已成交数量
unfilled_quantityint订单未成交数量
typeORDER_TYPE订单类型
transaction_costfloat费用
avg_pricefloat成交均价
statusORDER_STATUS订单状态
messagestr信息。比如拒单时候此处会提示拒单原因
trading_datetimedatetime.datetime订单的交易日期(对应期货夜盘)
position_effectPOSITION_EFFECT订单开平(期货专用)

Tick 对象

属性类型注释
order_book_idstr合约代码
datetimedatetime.datetime当前快照数据的时间戳
openfloat当日开盘价
highfloat截止到当前的最高价
lowfloat截止到当前的最低价
lastfloat当前最新价
prev_settlementfloat昨日结算价
prev_closefloat昨日收盘价
volumefloat截止到当前的成交量
limit_upfloat涨停价
limit_downfloat跌停价
open_interestfloat截止到当前的持仓量
askslist卖出报盘价格,asks[0]代表盘口卖一档报盘价
ask_volslist卖出报盘数量,ask_vols[0]代表盘口卖一档报盘数量
bidslist买入报盘价格,bids[0]代表盘口买一档报盘价
bid_volslist买入报盘数量,bid_vols[0]代表盘口买一档报盘数量

Portfolio 对象

  • portfolio 对象
属性类型注释
total_returnsfloat投资组合至今的累积收益率
daily_returnsfloat投资组合每日收益率
daily_pnlfloat当日盈亏,子账户当日盈亏的加总
total_valuefloat总权益,为子账户总权益加总总
unit_net_valuefloat单位净值
annualized_returnsfloat投资组合的年化收益率
positionsdict一个包含所有仓位的字典,以 order_book_id 作为键,position对象作为值,关于 position 的更多的信息可以在下面的部分找到。

Account 对象

  • 股票账户 stock_account 对象,可以
属性类型注释
cashfloat可用资金
total_valuefloat总权益
positionsdict一个包含股票子组合仓位的字典,以 order_book_id 作为键,position对象作为值,关于 position 的更多的信息可以在下面的部分找到。
dividend_receivablefloat投资组合在分红现金收到账面之前的应收分红部分。具体细节在分红部分
  • 期货账户 future_account 对象
属性类型注释
cashfloat可用资金
holding_pnl (已废弃)float当日持仓盈亏
realized_pnl (已废弃)float当日平仓盈亏
total_valuefloat总权益
positionsdict一个包含期货子组合仓位的字典,以 order_book_id 作为键,position对象作为值

Position 对象

  • 股票 position 对象
属性类型注释
order_book_idstr合约代码
directionPOSITION_DIRECTION持仓方向
quantityint当前持仓股数
market_valuefloat获得该持仓的实时市场价值
trading_pnlfloat当前持仓当日的交易盈亏
position_pnlfloat当前持仓当日的持仓盈亏
last_pricefloat仓位标的最新市场价
  • 期货 position 对象
属性类型注释
order_book_idstr合约代码
directionPOSITION_DIRECTION持仓方向
old_quantityint昨日持仓股数
quantityint当前持仓股数
marginfloat合约保证金
market_valuefloat获得该持仓的实时市场价值
trading_pnlfloat当前持仓当日的交易盈亏
position_pnlfloat当前持仓当日的持仓盈亏
last_pricefloat仓位标的最新市场价

Instrument 对象

  • 股票,ETF,指数 Instrument 对象
参数类型说明
order_book_idstr证券代码,证券的独特的标识符。应以'.XSHG'或'.XSHE'结尾,前者代表上证,后者代表深证
symbolstr证券的简称,例如'平安银行'
round_lotint一手对应多少股,中国 A 股一手是 100 股
sector_codestr板块缩写代码,全球通用标准定义
sector_code_namestr以当地语言为标准的板块代码名
industry_codestr国民经济行业分类代码,具体可参考下方"Industry 列表"
industry_namestr国民经济行业分类名称
listed_datestr该证券上市日期
de_listed_datestr退市日期
typestr合约类型,目前支持的类型有: 'CS', 'INDX', 'LOF', 'ETF', 'Future'
concept_namesstr概念股分类,例如:'铁路基建','基金重仓'等
exchangestr交易所,'XSHE' - 深交所, 'XSHG' - 上交所
board_typestr板块类别,'MainBoard' - 主板,'GEM' - 创业板,'SME' - 中小板
statusstr合约状态。'Active' - 正常上市, 'Delisted' - 终止上市, 'TemporarySuspended' - 暂停上市, 'PreIPO' - 发行配售期间, 'FailIPO' - 发行失败
special_typestr特别处理状态。'Normal' - 正常上市, 'ST' - ST 处理, 'StarST' - *ST 代表该股票正在接受退市警告, 'PT' - 代表该股票连续 3 年收入为负,将被暂停交易, 'Other' - 其他
trading_hoursstr合约最新的交易时间,如需历史数据请使用rqdatac.get_trading_hours
  • 期货 Instrument 对象
参数类型说明
order_book_idstr期货代码,期货的独特的标识符(郑商所期货合约数字部分进行了补齐。例如原有代码'ZC609'补齐之后变为'ZC1609')。主力连续合约 UnderlyingSymbol+88,例如'IF88' ;指数连续合约命名规则为 UnderlyingSymbol+99
symbolstr期货的简称,例如'沪深 1005'
margin_ratefloat期货合约最低保证金率
round_lotfloat期货全部为 1.0
listed_datestr期货的上市日期。主力连续合约与指数连续合约都为'0000-00-00'
typestr合约类型,'Future'
contract_multiplierfloat合约乘数,例如沪深 300 股指期货的乘数为 300.0
underlying_order_book_idstr合约标的代码,目前除股指期货(IH, IF, IC)之外的期货合约,这一字段全部为'null'
underlying_symbolstr合约标的名称,例如 IF1005 的合约标的名称为'IF'
maturity_datestr期货到期日。主力连续合约与指数连续合约都为'0000-00-00'
exchangestr交易所,'DCE' - 大连商品交易所, 'SHFE' - 上海期货交易所,'CFFEX' - 中国金融期货交易所, 'CZCE'- 郑州商品交易所
trading_hoursstr合约最新的交易时间,如需历史数据请使用rqdatac.get_trading_hours
  • 期权 Instrument 对象
字段类型说明
order_book_idstr合约代码,50ETF 期权为数字代码,例如 10000615
symbolstr合约简称
round_lotfloat最小下单手数,期权全部为 1.0
listed_datestr合约上市日期
typestr合约类型,'Option' 代表期权
contract_multiplierfloat合约乘数,50ETF 期权只保存分红调整后的最新数据,变动历史请参考日线数据
underlying_order_book_idstr合约标的代码
underlying_symbolstr合约所属品种
maturity_datestr合约到期日
exchangestr交易所,'DCE' - 大连商品交易所, 'SHFE' - 上海期货交易所,'CFFEX' - 中国金融期货交易所, 'CZCE'- 郑州商品交易所
strike_pricefloat期权行权价,50ETF 期权只保存分红调整后的最新数据,变动历史请参考日线数据
option_typestr'C' 代表认购,'P'代表认沽
exercise_typestr'E' 代表欧式期权,'A' 代表美式期权
product_namestrETF 期权字母简称
  • 现货 Instrument 对象
字段类型说明
order_book_idstr合约代码
symbolstr合约简称
exchangestr交易所,'SGEX' - 上海黄金期货交易所
listed_datestr合约上市日期
de_listed_datestr退市日期
typestr合约类型,'Spot' 代表现货
trading_hoursstr合约最新的交易时间,如需历史数据请使用rqdatac.get_trading_hours
  • 可转债 Instrument 对象
字段类型说明
order_book_idstr合约代码
symbolstr合约简称
exchangestr交易所,'SXHE' - 深交所,'SXHG' - 上交所
listed_datestr合约上市日期
de_listed_datestr退市日期
typestr合约类型,'Spot' 代表现货
market_tplusstr交易制度。'0'表示 T+0,'1'表示 T+1,往后顺推

Instrument 对象也支持如下方法:

  • 获取合约已上市天数:
instruments('000001.XSHE').days_from_listed()

如果合约首次上市交易,天数为 0;如果合约尚未上市或已经退市,则天数值为-1

  • 合约距离到期天数。
instruments(order_book_id).days_to_expire()

如果策略已经退市,则天数值为-1

  • 获取合约最小价格变动单位。
tick_size()

例如,instruments('IF1608').tick_size()获取的就是股指期货的最小价格变动单位,为 0.2,即“一跳”的水平。

枚举常量

ORDER_STATUS - 订单状态

枚举值说明
PENDING_NEW待报
ACTIVE可撤
FILLED全成
PENDING_CANCEL待撤
CANCELLED已撤
REJECTED拒单

SIDE - 买卖方向

枚举值说明
BUY
SELL

POSITION_EFFECT - 交易动作

枚举值说明
OPEN开仓
CLOSE平仓
CLOSE_TODAY平今
EXERCISE行权
MATCH轧平

ORDER_TYPE - 订单类型

枚举值说明
MARKET市价单
LIMIT限价单

RUN_TYPE - 策略运行类型

枚举值说明
BACKTEST回测
PAPER_TRADING实盘模拟
LIVE_TRADING实盘

POSITION_DIRECTION - 持仓多空方向

枚举值说明
LONG多方向
SHORT空方向

EVENT - 事件类型

枚举值说明
ORDER_PENDING_NEW策略创建订单
ORDER_CREATION_PASS订单已报送至柜台
ORDER_UNSOLICITED_UPDATE外部撤单(策略并未发出撤单申请, 但收到了返回的撤单成功确认, 例如通过柜台系统撤单)
ORDER_PENDING_CANCEL策略创建撤单请求
ORDER_CANCELLATION_PASS撤单成功
ORDER_CREATION_REJECT拒单
TRADE成交