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異常