基本概念

接口

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

  • 策略加载模块(AbstractStrategyLoader): 加载策略,并将策略运行所需要的域环境传递给策略执行代码,可以通过扩展策略加载器来实现自定义策略源、自定义API载入等功能。

  • 事件生成模块(AbstractEventSource): 无论是回测还是实盘,都需要基于数据源生成对应的事件,而事件生成模块主要负责生成策略执行相应的事件。

  • 数据源模块(AbstractDataSource): 日线数据、分钟线数据、财务数据、债务数据等等都可以通过该模块进行扩展和使用。

  • 券商代理模块(AbstractBroker): 用户的所有下单、账户、撮合逻辑其实都来自于券商+交易所,即使是回测,也实际是一个回测模拟交易所。因此可以通过扩展该模块来自定义Broker,也可以通过该模块扩展实盘交易等。

Mod

class rqalpha.interface.AbstractMod[源代码]

扩展模块接口。

abstract start_up(env, mod_config)[源代码]

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

参数
  • env (Environment) – 系统环境

  • mod_config – 模块配置参数

tear_down(code, exception=None)[源代码]

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

参数
  • code (rqalpha.const.EXIT_CODE) – 退出代码

  • exception – 如果在策略执行过程中出现错误,此对象为相应的异常对象

Position

class rqalpha.interface.AbstractPosition[源代码]

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

您可以在 Mod 的 start_up 阶段通过 Portfolio.register_instrument_type 来注册 Position 类型

abstract property closable

返回可平仓位

返回类型

Union[int, float]

property direction

返回当前持仓的方向

返回类型

POSITION_DIRECTION

abstract get_state()[源代码]

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

返回类型

Any

abstract property margin

返回当前持仓所占的保证金

返回类型

Union[int, float]

abstract property market_value

返回当前持仓的市值

返回类型

Union[int, float]

abstract property order_book_id

返回当前持仓的 order_book_id

返回类型

str

abstract property position_pnl

返回当前持仓当日的持仓盈亏

返回类型

Union[int, float]

abstract property quantity

返回当前持仓量

返回类型

Union[int, float]

abstract set_state(state)[源代码]

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

返回类型

None

abstract property today_closable

返回今仓中的可平仓位

返回类型

Union[int, float]

abstract property trading_pnl

返回当前持仓当日的交易盈亏

返回类型

Union[int, float]

StrategyLoader

class rqalpha.interface.AbstractStrategyLoader[源代码]

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

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

abstract 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 来替换默认的事件源。

abstract 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。

返回类型

Iterable[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(instrument)[源代码]

获取股票/基金分红信息

返回类型

ndarray

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 之后的时间

返回

Iterable object of Tick

get_settle_price(instrument, date)[源代码]

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

参数
  • instrument (Instrument) – 合约对象

  • date (datetime.date) – 结算日期

返回

str

get_share_transformation(order_book_id)[源代码]

获取股票转换信息 :param order_book_id: 合约代码 :return: (successor, conversion_ratio), (转换后的合约代码,换股倍率)

get_split(instrument)[源代码]

获取拆股信息

返回类型

ndarray

get_trading_calendars()[源代码]

获取交易日历,DataSource 应返回所有支持的交易日历种类

返回类型

Dict[TRADING_CALENDAR_TYPE, DatetimeIndex]

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) – 复权起点;

返回

Optional[numpy.ndarray], fields 不合法时返回 None

history_ticks(instrument, count, dt)[源代码]

获取指定合约历史 tick 对象

参数
  • instrument (Instrument) – 合约对象

  • count (int) – 获取的 tick 数量

  • dt (datetime) – 时间

返回类型

List[TickObject]

Broker

class rqalpha.interface.AbstractBroker[源代码]

券商接口。

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

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

abstract cancel_order(order)[源代码]

[Required]

撤单。

参数

order (Order) – 订单

abstract get_open_orders(order_book_id=None)[源代码]

[Required]

获得当前未完成的订单。

返回

list[Order]

PriceBoarder

class rqalpha.interface.AbstractPriceBoard[源代码]

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

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

get_a1(order_book_id)[源代码]

获取合约的卖一价

返回类型

Union[float, numpy.nan]

get_b1(order_book_id)[源代码]

获取合约的买一价

返回类型

Union[float, numpy.nan]

abstract get_last_price(order_book_id)[源代码]

获取合约的最新价

返回类型

float

abstract get_limit_down(order_book_id)[源代码]

获取合约的跌停价

返回类型

float

abstract get_limit_up(order_book_id)[源代码]

获取合约的涨停价

返回类型

float

PersistProvider

class rqalpha.interface.AbstractPersistProvider[源代码]

持久化服务提供者接口。

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

abstract load(key)[源代码]
参数

key (str) –

返回

bytes 如果没有对应的值,返回 None

abstract should_resume()[源代码]

是否应该以 resume 模式运行 :return: bool

abstract should_run_init()[源代码]

是否应该执行策略的 init 函数 :return: bool

abstract store(key, value)[源代码]
参数
  • key (str) –

  • value (bytes) –

返回

AbstractFrontendValidator

class rqalpha.interface.AbstractFrontendValidator[源代码]

前端风控接口,下撤单请求在到达券商代理模块前会经过前端风控。

扩展模块可以通过 env.add_frontend_validator 添加自定义的前端风控逻辑

abstract can_cancel_order(order, account=None)[源代码]

判读是否可以撤单

abstract can_submit_order(order, account=None)[源代码]

判断是否可以下单

AbstractTransactionCostDecider

class rqalpha.interface.AbstractTransactionCostDecider[源代码]

订单税费计算接口,通过实现次接口可以定义不同市场、不同合约的个性化税费计算逻辑。

abstract get_order_transaction_cost(order)[源代码]

计算指定订单应付的交易成本(税 + 费)

返回类型

float

abstract get_trade_commission(trade)[源代码]

计算指定交易应付的佣金

返回类型

float

abstract get_trade_tax(trade)[源代码]

计算指定交易应付的印花税

返回类型

float