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属性中