12. Optimizer 策略優化器

Optimizer 是一個策略優化器,可以通過遺傳算法、粒子羣算法等方法來優化策略參數。

class qteasy.optimization.Optimizer(*, op: Operator, method: str, shares: list[str], benchmark: DataFrame, pool_size: int, opti_target: str, opti_direction: str, parallel: bool, opti_start_date: str, opti_end_date: str, test_start_date: str, test_end_date: str, opti_cash_plan: CashPlan, test_cash_plan: CashPlan, cost_params: ndarray, signal_parsing_params: dict, trading_moq_params: dict, trading_delivery_params: dict, search_config: dict, logger: Optional[Logger] = None, evaluate_indicators: str = 'r,m,v,b', test_plot_type: str = 'histo')[原始碼]

最優參數搜索器對象

13. 策略參數優化方法

網格搜索

class qteasy.optimization.Optimizer._search_grid(self, space: Space)

網格搜索:在參數空間上按固定步長取樣並批量評估。

參數:

space (Space) – 待搜索的參數空間。

回傳:

最優結果寫入 self.result_pool

回傳型別:

None

蒙特卡洛搜索

class qteasy.optimization.Optimizer._search_montecarlo(self, space: Space)

蒙特卡洛隨機搜索:在 space 內均勻隨機取樣並批量評估。

參數:

space (Space) – 待搜索的參數空間。

回傳:

最優結果寫入 self.result_pool

回傳型別:

None

模擬退火搜索

class qteasy.optimization.Optimizer._search_sa(self, space: Space)

遞進步長式隨機搜索:多輪蒙特卡洛 + 子空間收縮。

每輪在若干子空間內隨機採樣,擇優後用 reduce_ratio 等配置收縮鄰域並進入下一輪, 直至達到 min_volumemax_rounds 等停止條件。

參數:

space (Space) – 初始參數空間。

回傳:

最優結果寫入 self.result_pool

回傳型別:

None

遺傳算法搜索

class qteasy.optimization.Optimizer._search_ga(self, space: Space)

最優參數搜索算法4: 遺傳算法 遺傳算法適用於在超大的參數空間內搜索全局最優或近似全局最優解,而它的計算量又處於可接受的範圍內

遺傳算法借鑑了生物的遺傳迭代過程,首先在參數空間中隨機選取一定數量的參數點,將這批參數點稱爲 “種羣”。隨後在這一種羣的基礎上進行迭代計算。在每一次迭代(稱爲一次繁殖)前,根據種羣中每個個體 的評價函數值,確定每個個體生存或死亡的幾率,規律是若個體的評價函數值越接近最優值,則其生存的幾率 越大,繁殖後代的幾率也越大,反之則越小。確定生死及繁殖的幾率後,根據生死幾率選擇一定數量的個體 讓其死亡,而從剩下的(倖存)的個體中根據繁殖幾率挑選幾率最高的個體進行雜交併繁殖下一代個體, 同時在繁殖的過程中引入隨機的基因變異生成新的個體。最終使種羣的數量恢復到初始值。這樣就完成 一次種羣的迭代。重複上面過程數千乃至數萬代直到種羣中出現希望得到的最優或近似最優解爲止

參數:

space (qt.Space) – 參數空間對象

回傳型別:

None,搜索的结果最佳值会被保存在self.result_pool属性中

梯度下降搜索

class qteasy.optimization.Optimizer._search_gradient(self, space: Space)

最優參數搜索算法5:梯度下降法(多點同時梯度搜索)

在參數空間中尋找優化結果變優最快的方向,始終保持向最優方向前進(採用自適應步長)一直到結果不再改變或達到 最大步數爲止。在參數空間中隨機選擇N個起點開始搜索,輸出結果爲最後一步的N個結果。

鄰域通過 space.neighbors(point, axis_index, …) 生成,支持 int/float/enum/int_array/float_array。 僅對 float 維做自適應步長(放大/縮小);無改進時縮小步長,步長過小或連續無改進達閾值則終止該軌跡。

參數:

space (Space) – 參數空間

回傳型別:

None

粒子羣算法搜索

class qteasy.optimization.Optimizer._search_pso(self, space: Space)

最優參數搜索算法6: Particle Swarm Optimization 粒子羣優化算法

在參數空間中隨機選擇N個起點作爲粒子羣的初始位置,每個粒子根據自身的歷史最優位置和全局的歷史最優位置 來調整自己的速度和位置,逐步向最優解靠近。經過多次迭代後,粒子羣會收斂到全局最優解或近似最優解。

數值表示使用 space.point_to_vector / space.vector_to_point,在編碼向量空間內做速度與位置更新, 再映射回合法參數點。慣性權重 w=0.7,個體係數 c1=1.5,社會系數 c2=1.5。

參數:

space (qt.Space) – 參數空間對象

回傳型別:

None,搜索的结果最佳值会被保存在self.result_pool属性中

貝葉斯優化搜索

class qteasy.optimization.Optimizer._search_bayesian(self, space: Space)

最優參數搜索算法6: 貝葉斯優化算法

貝葉斯優化是一種基於貝葉斯統計理論的全局優化方法,適用於高維、非凸、黑箱函數的優化問題。 它通過構建目標函數的概率模型(通常是高斯過程)來指導參數搜索過程,從而在有限的評估次數內找到最優解。 流程:初始隨機採樣 -> 用 (X, y) 擬合 surrogate(RBF 核高斯過程)-> 迭代:在候選點上計算 UCB 採集函數, 選取採集值最大的點評估 -> 更新 (X, y) 與 result_pool,直至達到 max_iterations。

參數:

space (qt.Space) – 參數空間對象

回傳型別:

None,搜索的结果最佳值会被保存在self.result_pool属性中