基本概念

接口

我们将重要模块进行了抽离,使得通过 Mod 来替换核心组件成为了可能。

  • 策略加载模块(AbstractStrategyLoader): 加载策略,并将策略运行所需要的域环境传递给策略执行代码,可以通过扩展策略加载器来实现自定义策略源、自定义API载入等功能。
  • 事件生成模块(AbstractEventSource): 无论是回测还是实盘,都需要基于数据源生成对应的事件,而事件生成模块主要负责生成策略执行相应的事件。
  • 数据源模块(AbstractDataSource): 日线数据、分钟线数据、财务数据、债务数据等等都可以通过该模块进行扩展和使用。
  • 券商代理模块(AbstractBroker): 用户的所有下单、账户、撮合逻辑其实都来自于券商+交易所,即使是回测,也实际是一个回测模拟交易所。因此可以通过扩展该模块来自定义Broker,也可以通过该模块扩展实盘交易等。
https://raw.githubusercontent.com/ricequant/rq-resource/master/rqalpha/RQAlpha_structure.png

详细的 RQAlpha 结构图请查看 Processon RQAlpha Structure

Account

class rqalpha.interface.AbstractAccount[源代码]

账户接口,主要用于构建账户信息

您可以在 Mod 的 start_up 阶段通过 env.set_account_model(account_type, AccountModel) 来注入和修改 AccountModel 您也可以通过 env.get_account_model(account_type) 来获取指定类型的 AccountModel

cash

[Required]

返回当前账户的可用资金

fast_forward(orders, trades)[源代码]

[Required]

fast_forward 函数接受当日订单数据和成交数据,从而将当前的持仓快照快速推进到最新持仓状态

参数:
  • orders (list) – 当日订单列表
  • trades (list) – 当日成交列表
frozen_cash

[Required]

返回当前账户的冻结资金

get_state()[源代码]

[Required]

主要用于进行持久化时候,提供对应需要持久化的数据

market_value

[Required]

返回当前账户的市值

order(order_book_id, quantity, style, target=False)[源代码]

[Required]

系统下单函数会调用该函数来完成下单操作

positions

[Required]

返回当前账户的持仓数据

返回:Positions(PositionModel)
set_state(state)[源代码]

[Requried]

主要用于持久化恢复时,根据提供的持久化数据进行恢复Account的实现

transaction_cost

[Required]

返回当前账户的当日交易费用

type

[Required]

返回 String 类型的账户类型标示

Position

class rqalpha.interface.AbstractPosition[源代码]

仓位接口,主要用于构建仓位信息

您可以在 Mod 的 start_up 阶段通过 env.set_position_model(account_type, PositionModel) 来注入和修改 PositionModel 您也可以通过 env.get_position_model(account_type) 来获取制定类型的 PositionModel

get_state()[源代码]

[Required]

主要用于进行持久化时候,提供对应需要持久化的数据

market_value

[Required]

返回当前持仓的市值

order_book_id()[源代码]

[Required]

返回当前持仓的 order_book_id

set_state(state)[源代码]

[Requried]

主要用于持久化恢复时,根据提供的持久化数据进行恢复 Position 的实现

transaction_cost

[Required]

返回当前持仓的当日交易费用

type

[Required]

返回 String 类型的账户类型标示

StrategyLoader

class rqalpha.interface.AbstractStrategyLoader[源代码]

策略加载器,其主要作用是加载策略,并将策略运行所需要的域环境传递给策略执行代码。

在扩展模块中,可以通过调用 env.set_strategy_loader 来替换默认的策略加载器。

load(scope)[源代码]

[Required]

load 函数负责组装策略代码和策略代码所在的域,并输出最终组装好的可执行域。

参数:scope (dict) – 策略代码运行环境,在传入时,包含了所有基础API。 通过在 scope 中添加函数可以实现自定义API;通过覆盖 scope 中相应的函数,可以覆盖原API。
返回:scope,其中应包含策略相应函数,如 init, before_trading

EventSource

class rqalpha.interface.AbstractEventSource[源代码]

事件源接口。RQAlpha 从此对象中获取事件,驱动整个事件循环。

在扩展模块中,可以通过调用 env.set_event_source 来替换默认的事件源。

events(start_date, end_date, frequency)[源代码]

[Required]

扩展 EventSource 必须实现 events 函数。

events 是一个 event generator, 在相应事件的时候需要以如下格式来传递事件

yield trading_datetime, calendar_datetime, EventEnum

其中 trading_datetime 为基于交易日的 datetime, calendar_datetime 为基于自然日的 datetime (因为夜盘的存在,交易日和自然日未必相同)

EventEnum 为 Events

参数:
  • start_date (datetime.date) – 起始日期, 系统会将 config.base.start_date 传递 events 函数
  • end_date (datetime.date) – 结束日期,系统会将 config.base.end_date 传递给 events 函数
  • frequency (str) – 周期频率,1d 表示日周期, 1m 表示分钟周期
返回:

None

DataSource

class rqalpha.interface.AbstractDataSource[源代码]

数据源接口。RQAlpha 中通过 DataProxy 进一步进行了封装,向上层提供更易用的接口。

在扩展模块中,可以通过调用 env.set_data_source 来替换默认的数据源。可参考 BaseDataSource

available_data_range(frequency)[源代码]

此数据源能提供数据的时间范围

参数:frequency (str) – 周期频率,1d 表示日周期, 1m 表示分钟周期
返回:(earliest, latest)
current_snapshot(instrument, frequency, dt)[源代码]

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

参数:
  • instrument (Instrument) – 合约对象
  • frequency (str) – 周期频率,1d 表示日周期, 1m 表示分钟周期
  • dt (datetime.datetime) – 时间
返回:

Snapshot

get_all_instruments()[源代码]

获取所有Instrument。

返回:list[Instrument]
get_bar(instrument, dt, frequency)[源代码]

根据 dt 来获取对应的 Bar 数据

参数:
  • instrument (Instrument) – 合约对象
  • dt (datetime.datetime) – calendar_datetime
  • frequency (str) – 周期频率,1d 表示日周期, 1m 表示分钟周期
返回:

numpy.ndarray | dict

get_commission_info(instrument)[源代码]

获取合约的手续费信息 :param instrument: :return:

get_dividend(order_book_id)[源代码]

获取股票/基金分红信息

参数:order_book_id (str) – 合约名
返回:
get_margin_info(instrument)[源代码]

获取合约的保证金数据

参数:instrument – 合约对象
返回:dict
get_merge_ticks(order_book_id_list, trading_date, last_dt=None)[源代码]

获取合并的 ticks

参数:
  • order_book_id_list (list) – 合约名列表
  • trading_date (datetime.date) – 交易日
  • last_dt (datetime.datetime) – 仅返回 last_dt 之后的时间
返回:

Tick

get_settle_price(instrument, date)[源代码]

获取期货品种在 date 的结算价

参数:
  • instrument (Instrument) – 合约对象
  • date (datetime.date) – 结算日期
返回:

str

get_split(order_book_id)[源代码]

获取拆股信息

参数:order_book_id (str) – 合约名
返回:pandas.DataFrame
get_trading_calendar()[源代码]

获取交易日历

返回:list[pandas.Timestamp]
get_trading_minutes_for(instrument, trading_dt)[源代码]

获取证券某天的交易时段,用于期货回测

参数:
  • instrument (Instrument) – 合约对象
  • trading_dt (datetime.datetime) – 交易日。注意期货夜盘所属交易日规则。
返回:

list[datetime.datetime]

get_yield_curve(start_date, end_date, tenor=None)[源代码]

获取国债利率

参数:
  • str start_date (pandas.Timestamp) – 开始日期
  • end_date (pandas.Timestamp) – 结束日期
  • tenor (str) – 利率期限
返回:

pandas.DataFrame, [start_date, end_date]

history_bars(instrument, bar_count, frequency, fields, dt, skip_suspended=True, include_now=False, adjust_type='pre', adjust_orig=None)[源代码]

获取历史数据

参数:
  • instrument (Instrument) – 合约对象
  • bar_count (int) – 获取的历史数据数量
  • frequency (str) – 周期频率,1d 表示日周期, 1m 表示分钟周期
  • fields (str) – 返回数据字段
fields 字段名
datetime 时间戳
open 开盘价
high 最高价
low 最低价
close 收盘价
volume 成交量
total_turnover 成交额
datetime int类型时间戳
open_interest 持仓量(期货专用)
basis_spread 期现差(股指期货专用)
settlement 结算价(期货日线专用)
prev_settlement 结算价(期货日线专用)
参数:
  • dt (datetime.datetime) – 时间
  • skip_suspended (bool) – 是否跳过停牌日
  • include_now (bool) – 是否包含当天最新数据
  • adjust_type (str) – 复权类型,’pre’, ‘none’, ‘post’
  • adjust_orig (datetime.datetime) – 复权起点;
返回:

numpy.ndarray

Broker

class rqalpha.interface.AbstractBroker[源代码]

券商接口。

RQAlpha 将产生的订单提交给此对象,此对象负责对订单进行撮合(不论是自行撮合还是委托给外部的真实交易所), 并通过 EVENT.ORDER_*EVENT.TRADE 事件将撮合结果反馈进入 RQAlpha。

在扩展模块中,可以通过调用 env.set_broker 来替换默认的 Broker。

cancel_order(order)[源代码]

[Required]

撤单。

参数:order (Order) – 订单
get_open_orders(order_book_id=None)[源代码]

[Required]

获得当前未完成的订单。

返回:list[Order]
get_portfolio()[源代码]

[Required]

获取投资组合。系统初始化时,会调用此接口,获取包含账户信息、净值、份额等内容的投资组合

返回:Portfolio
submit_order(order)[源代码]

[Required]

提交订单。在当前版本,RQAlpha 会生成 Order 对象,再通过此接口提交到 Broker。 TBD: 由 Broker 对象生成 Order 并返回?

PriceBoarder

class rqalpha.interface.AbstractPriceBoard[源代码]

RQAlpha多个地方需要使用最新「行情」,不同的数据源其最新价格获取的方式不尽相同

因此抽离出 AbstractPriceBoard, 您可以自行进行扩展并替换默认 PriceBoard

get_last_price(order_book_id)[源代码]

获取证券的最新价格

Mod

class rqalpha.interface.AbstractMod[源代码]

扩展模块接口。

start_up(env, mod_config)[源代码]

RQAlpha 在系统启动时会调用此接口;在此接口中,可以通过调用 env 的相应方法来覆盖系统默认组件。

参数:
  • env (Environment) – 系统环境
  • mod_config – 模块配置参数
tear_down(code, exception=None)[源代码]

RQAlpha 在系统退出前会调用此接口。

参数:
  • code (rqalpha.const.EXIT_CODE) – 退出代码
  • exception – 如果在策略执行过程中出现错误,此对象为相应的异常对象

PersistProvider

class rqalpha.interface.AbstractPersistProvider[源代码]

持久化服务提供者接口。

扩展模块可以通过调用 env.set_persist_provider 接口来替换默认的持久化方案。

load(key)[源代码]
参数:key (str) –
返回:bytes 如果没有对应的值,返回 None
store(key, value)[源代码]
参数:
  • key (str) –
  • value (bytes) –
返回: