跳至内容

帮助中心

Help Center articles

如何避免过拟合?

过拟合是算法交易中的一个常见挑战,即策略经过精细调整,在历史数据上表现异常出色,但无法推广到未来的、未见的市场状况。避免过拟合可以确保您的交易策略在现实场景中保持稳健且盈利。以下是在开发策略时避免过拟合的一些有效技术,特别是在使用Express Generator等工具时。

1.使用大规模且多样化的数据集

当策略过于贴合一小部分历史数据时,往往会发生过拟合。要避免这种情况:

  • 使用尽可能多的数据:确保策略在多年的数据上进行了测试,包括不同市场状况(牛市、熊市、震荡市)的时期。
  • 包含多样化的市场状况:使用不同市场机制(波动性、趋势、危机)的数据,以确保您的策略不仅仅是针对某种特定类型的环境进行了优化。
  • 避免挑选数据(Cherry-picking):使用完整的数据集,而不是排除那些可能使您的策略看起来表现较差的特定时期。

2.样本外测试(Out-of-Sample Testing)

样本外测试是评估策略在未经过训练的数据上表现如何的关键技术。

  • 拆分您的数据:将部分历史数据用于策略优化(样本内),其余部分用于测试(样本外)。例如,如果您有 10 年的数据,使用前 7 年进行优化,剩余 3 年进行测试。
  • 监控表现:如果您的策略在样本内表现良好但在样本外表现很差,那么它很可能过拟合了。在两个时期都表现一致的策略更有可能具有良好的泛化能力。

在Express Generator中,您可以使用以下参数设置样本外测试:

data_start_percent = 0
data_end_percent = 100

通过调整这些值来指定用于训练和测试的数据百分比。

3.前向测试(Forward Testing)

在回测之后,前向测试对于评估策略在未见的实时数据上的表现至关重要。

  • 进行实时模拟交易:前向测试涉及在具有实时数据的模拟或纸上交易环境中运行策略。这可以测试策略对实时市场状况的适应能力。
  • 监控数周或数月的表现:确保策略在不同市场条件下保持一致的表现,并避免根据短期结果来调整策略。

在Express Generator中,您可以通过以下参数启用前向测试:

use_forward_testing = true
preload_data_bars = 0

4.限制策略复杂度

过于复杂的策略更容易发生过拟合,因为它们往往会过于贴近历史数据,包括噪声或随机的市场波动。

  • 限制指标数量:仅使用几个在各种条件下已知表现良好的关键指标,而不是使用大量的信号组合。
  • 避免过多的参数:策略的可调参数越多,过拟合的风险就越高。通过避免对止损、止盈或指标参数进行过度优化,保持简单。

在Express Generator中,您可以使用以下参数限制指标数量:

max_entry_slots = 3
max_exit_slots = 2

这限制了入场和出场规则的数量,从而降低了过拟合的可能性。

5.设置严格的验收标准

设置有意义的验收标准可以确保策略不仅仅是因为回测中的随机运气而表现良好,而是具有健全的风险回报特征。

  • 关注核心性能指标:使用诸如Profit Factor(盈亏比)、Return to Drawdown(回撤收益比)等指标,胜率,以及停滞。达到这些阈值的策略更可能具有稳健性。

标准设置示例:

min_count_of_trades    = 100
min_profit_factor = 1.5
min_return_to_drawdown = 2.0

这些数值确保策略具有合理的交易次数,并在风险与回报之间取得了良好的平衡。

6.蒙特卡洛模拟 (Monte Carlo Simulation)

蒙特卡洛模拟可用于在不同市场条件、执行问题和参数变化下对策略进行压力测试。

  • 随机化市场条件:引入随机的点差、滑点和跳过交易入场,以模拟真实世界的条件,并测试策略是否对此具有稳健性。
  • 模拟参数变化:对策略参数(如指标周期)引入微小的随机变化,观察策略是否仍能表现良好。如果一个策略在微调参数后行为发生剧烈变化,则很可能存在过拟合。

蒙特卡洛设置示例:

enable_monte_carlo            = true
count_of_tests = 20
spread_max = 30
slippage_max = 20
skip_entries_percent = 2
ind_params_max_change_percent = 20

此设置运行 20 次测试,引入点差和滑点变化,并随机化指标参数,以测试策略的韧性。

7.使用保守的回测设置

确保回测假设是现实的,特别是在交易执行方面:

  • 包含滑点和点差:通过考虑点差和滑点,确保回测反映真实的交易条件。
  • 使用现实的止损和止盈:不要过度优化这些参数。使用基于合理市场预期的范围,而不是针对历史数据进行精细调整。

在Express Generator 中的示例:

spread = 20
slippage_max = 10

这考虑了现实世界中的情况,即交易执行时相对于理想情况略微处于劣势。

8.交叉验证 (Cross-Validation)

交叉验证是借鉴自机器学习的技术,其中使用数据的多个子集进行测试和验证。

  • 将数据分为多个部分:多次轮换样本内和样本外周期。每次拆分测试数据的不同部分,确保策略不会过拟合于单一的一组条件。

在Express Generator中,您可以从不同时期或市场创建多个数据文件,并在每个文件上测试策略。

9.避免数据窥探和过度优化

过度优化是指策略过度精细化以适应历史数据。这可能导致策略完美契合过去的数据,但在实际市场中失效。

  • 设置合理的参数范围:与其将策略精细调整到精确水平,不如为移动平均线或 RSI 周期等指标使用更宽的范围。
  • 避免在每次失败后调整策略:每个策略都会有亏损,但在每次表现不佳后都调整规则,很可能会导致过拟合。

10.定期重新评估

市场在不断演变,过去表现良好的策略随着时间的推移可能需要调整甚至更换。定期重新评估策略:

  • 持续监测表现:追踪关键指标,如回撤、胜率和利润因子,并将它们与历史表现进行比较。
  • 定期更新数据:刷新您的数据集,以确保您的策略是在使用最新的信息进行运作。

结论

为了避免过拟合,使用多样化的数据、设定现实的验收标准,并使用蒙特卡洛模拟(Monte Carlo simulation)和前向测试(forward testing)等技术对策略进行压力测试,是非常重要的。保持策略简单,专注于稳健性,并持续重新评估其随时间变化的表现。通过遵循这些实践,您可以开发出在历史市场和真实市场中都能表现良好的交易策略。

评分和评论
有用的没用