9. 交易策略基类

本页提供 Strategy 相关核心类的 API 自动文档入口。 设计思路与使用教程请参考:

  • 设计文档:design/10-live-trading-s1.3-architecture.md

  • 策略管理文档:manage_strategies/*

  • 实操教程:tutorials/*

BaseStrategy

class qteasy.BaseStrategy(*, name: str = '', description: str = '', stg_type: str = 'BASE', pars: Optional[Union[Parameter, List[Parameter], Dict[str, Parameter]]] = None, data_types: Optional[Union[DataType, List[DataType], Dict[str, DataType]]] = None, use_latest_data_cycle: Union[bool, List[bool], Dict[str, bool]] = False, window_length: Union[int, List[int], Dict[str, int]] = 270, opt_tag: int = 0, par_values: Optional[Union[Tuple[Any], List[Any]]] = None)[源代码]

基类:object

量化投资策略的抽象基类,所有具体策略都应从本类继承并实现交易信号生成逻辑。

一个完整的策略通常由三部分组成:可调参数(pars)、所需历史数据的声明 (data_types + window_length 等)以及基于这些数据生成信号的 realize() 逻辑。 在策略运行过程中,可通过 get_pars()get_data() 访问参数与数据,输出 的实数信号再由 Operator 按 PT/PS/VS 信号语义解析为实际交易指令。关于自定义策略 实现步骤与 PT/PS/VS 的详细说明,见文档「交易策略与 BaseStrategy」相关章节。

示例

BaseStrategy 为抽象基类,通常通过继承实现自定义策略。下面示例展示其类型信息(稳定输出):

>>> import qteasy as qt
>>> qt.BaseStrategy.__name__
'BaseStrategy'
get_pars(*par_names)[源代码]

get the value of parameter by its name or id, alias as operator.par_name multiple parameters can be got at one time

info(verbose: bool = False, status: bool = False, stg_id: Optional[str] = None, extra_info: Optional[str] = None) None[源代码]

打印所有相关信息和主要属性

参数:
  • verbose (bool, default False) – 是否打印更多的信息

  • status (bool, default False) – 是否打印策略的运行状态

  • stg_id (str, default None) – 策略的ID,如果为None,则打印策略的名称,否则打印策略的ID

  • extra_info (str, default None) – 额外的信息,可以是任何字符串,会被打印在策略主信息之后,参数和数据之前

返回类型:

None

update_par_values(*par_values: Any, **kwargs: Any) None[源代码]

快速更新策略的参数值

参数:
  • par_values (tuple, optional) – 策略参数的值,元组中的每个元素是按顺序排列的所有参数值,如果 没有设置参数,则必须传入kwargs参数

  • kwargs (dict) – 以字典形式传入具体需要更新的参数值,键为参数名,值为参数值

返回类型:

None

GeneralStg

class qteasy.GeneralStg(name: str = 'General', description: str = 'description of General strategy', **kwargs)[源代码]

基类:BaseStrategy

通用交易策略类,用户需要完整定义策略的所有交易逻辑,并在realize()方法中定义策略的信号输出。

关于GeneralStg类的更详细说明,请参见qteasy的文档。

FactorSorter

class qteasy.FactorSorter(name: str = 'Factor', description: str = 'description of factor sorter strategy', max_sel_count: float = 0.5, condition: str = 'any', lbound: float = -inf, ubound: float = inf, sort_ascending: bool = False, weighting: str = 'even', **kwargs)[源代码]

基类:BaseStrategy

因子排序选股策略,根据用户定义的选股因子筛选排序后确定每个股票的选股权重(请注意,FactorSorter策略

生成的交易信号在0到1之间,推荐设置signal_type为”PT”)

这类策略要求用户从历史数据中提取一个选股因子,并根据选股因子的大小排序后确定投资组合中股票的交易信号 用户需要在realize()方法中计算选股因子,计算出选股因子后,接下来的排序和选股逻辑都不需要用户自行定义。 策略会根据预设的条件,从中筛选出符合标准的因子,并将剩下的因子排序,从中选择特定数量的股票,最后根据它 们的因子值分配权重或信号值。关于Strategy类的更详细说明,请参见qteasy的文档。

RuleIterator

class qteasy.RuleIterator(name: str = 'Rule-Iterator', description: str = 'description of rule iterator strategy', allow_multi_par: bool = True, **kwargs)[源代码]

基类:BaseStrategy

规则迭代策略类。这一类策略不考虑每一只股票的区别,将同一套规则同时迭代应用到所有的股票上。

RuleIterator策略类的特殊功能是可以对同一套交易规则,将不同的参数应用到投资组合中的不同股票上。 例如,用户可以设计一个均线交叉策略,并将其应用到投资组合中的所有股票上,同时可以为每只股票 设定不同的均线周期参数。关于Strategy类的更详细说明,请参见qteasy的文档。

多标的且每股参数不同:须通过 update_par_values({股票代码: (p1, p2, ...), ...}) 传入与 share_names 一致的股票代码键;若仅用位置元组初始化,多标的时全体共享一套运行时参数(见 用户文档《三种策略基类》中 RuleIterator 一节)。字典中可用键名 default 为未单独列出的标的 提供同一套默认初值;不支持 others 等其它保留键名。

10. 交易策略参数对象

Parameter 用于定义策略可调参数的类型、范围与取值方式。

class qteasy.Parameter(par_range, *, name: str = '', par_type=None, value=None)[源代码]

可调参数对象,可以是离散型、连续型、枚举型或者数组型参数,在交易策略中对策略的运行结果产生影响。

get_value()[源代码]

获取参数的当前值

set_value(value)[源代码]

设置参数的当前值

参数:

value (any) – 需要设置的参数值,若参数为枚举型,则value可以是枚举值中的一个;若参数为离散型或连续型,则value可以是一个整数或浮点数

抛出:

ValueError – 当value不在数轴的可用值中时,抛出ValueError异常

update_par_range(new_range)[源代码]

更新参数的范围

参数:

new_range (int, float, str or list or tuple of int, float, str) – 数轴的上下界或枚举值,当数轴类型为conti或discr时,bounds_or_enum为一个长度为2的列表或元组,分别代表数轴的上下界; 当数轴类型为enum时,bounds_or_enum为一个列表或元组,其中的元素为该数轴上所有可用的值

抛出:

ValueError – 当输入的数轴类型不在可选值中时,抛出ValueError异常