blog-image

道琼斯工业平均指数 (DJIA) 算法交易:查看每种策略是如何经过筛选的

风险提示。 指数差价合约(CFD)和期货是杠杆交易产品。在某些账户类型下,亏损可能会超过存款,且自动化执行并不能降低市场风险敞口。以下所有内容均为教育材料,而非个性化指导,且所述结果均为历史数据。

直接回答

在 US30 上进行算法交易,意味着软件根据预先编写的规则,对与 DJIA 挂钩的工具进行开仓、管理和平仓。在执行时刻没有任何人为裁量。代码会监控价格,应用其设定的条件,并在你盯着屏幕或正在睡觉时,通过交易平台发送订单。

本页面涵盖的是一个具体的流程,而非单纯的理论:即几种交易策略如何首先在模拟账户上进行测试,通过交易次数、利润因子、净点数和胜率进行筛选,并在通过这些过滤器后才转入实盘资金。每项算法交易候选策略的筛选标准、性能数据、方法的统计学弱点以及涉及的成本,都将在下方列出。

在开始之前,有一点需要提醒。这里描述的过滤器是我多年运行算法交易账户所提炼出的操作习惯。它们并非经过验证的标准,我也将指出其中证据不足之处。

算法交易的真实含义

剥去营销外壳,剩下的就是告诉计算机何时买卖证券的代码。定义好条件,机器会根据传入的价格数据进行持续检查,然后自动发出订单。

机构交易部门自 20 世纪 70 年代以来一直以这种方式运作,当时程序化交易首次通过交易所系统转移大规模股票篮子。零售端接触算法交易要晚得多,是通过像 MetaTrader 这样的平台实现的,它允许个人在图表上挂载一个专家顾问(Expert Advisor)并让其运行。最近,AI 驱动的算法工具也进入了讨论范围,尽管大多数零售算法(包括我的算法)仍然是基于规则的,而非自适应的。

任何算法交易设置都存在三个层面:

层级功能控制者
信号逻辑决定方向与时机策略开发者
算法执行将信号转化为实盘订单平台与经纪商
风险框架设置风险敞口、头寸规模和停机规则账户持有者

大多数刚接触算法交易的交易者都痴迷于第一层。但我管理数十个交易账户的经验表明,第三层才决定了生死存亡。

交易什么品种

品种定义比本页面上的几乎任何其他内容都重要,而 2020 年的原创文章完全忽略了这一点,我对此深感遗憾。

指数本身是无法购买的。你实际持有的是与其挂钩的衍生品,而在不同产品之间进行选择会显著改变定价、交易成本、交易时段和保证金要求。

在运行任何程序之前,请打开你经纪商的合约规格书并记录下以下所有内容。每一项都会改变你的结果:

字段为什么它很重要
精确的经纪商代码US30、DJ30 和 WS30 并不总是同一种产品
产品类型CFD、期货、ETF 或合成产品,每种产品的定价方式都不同
合约规模两家经纪商之间的差异可能高达十倍
最小交易量决定了你能承担的最小风险
账户及报价货币汇率转换会影响你记录的每一项结果
交易时段指数产品会收盘,而不像货币市场
典型的点数点差短期持仓的主要成本
每手佣金有时为零,有时非常显著
隔夜融资多头和空头头寸分别计费

两家提供看似相同交易代码的经纪商,其合约规模可能相差十倍。如果不检查规格窗口就直接复制他人的交易账户设置,将成为一名新手算法交易者最昂贵的错误之一。

指数中的“点数”意味着什么

FX Blue 和类似的报告工具无论资产类别如何都会显示点数(pips)列,当你从货币市场转向股票指数时,这会造成混乱。

在主要货币对上,一个点(pip)是标准化的微小变动。在 US30 上,该列通常报告指数点数,其中一个单位的变动等于基础指数的一个点。一些经纪商会进一步细分。其他经纪商则报价到小数点后一位,并将该小数位视为报告单位。

看看我自己的模拟记录数据:在记录 694.2 个净点数的同时,净利润为 60.84 美元。这两个数字看起来极其不一致,直到你算出它们共同隐含的意义:即每获得一个有利点数,大约产生 9 美分的利润。这个比例告诉你,头寸规模非常小,并证明了为什么孤立地看任何单一交易次数或总点数都几乎没有意义。

在阅读任何关于指数的算法交易报告之前:

  • 在合约规格中找到跳动值(tick size)。
  • 在你的账户货币中找到跳动价值(tick value)。
  • 务必始终用变动量乘以价值来计算金额。
  • 将点数视为衡量准确度而非盈利能力的指标。

老实说,我仍然喜欢观察点数列。它能显示算法是在捕捉真实的波动,还是在处理噪音。但真正离开账户的是钱。

算法如何下单

这里讨论的策略是在 EA Studio 中生成的,并在 MetaTrader 中作为专家顾问(Expert Advisors)运行。虽然不同算法的具体细节有所不同,但任何一个算法都应该能够说明:

  1. 入场条件:哪些指标、哪些阈值、哪个时间框架。
  2. 出场条件:目标、保护水平、指标反转或基于时间的关闭。
  3. 头寸规模:固定成交量或与余额挂钩的百分比计算。
  4. 并发限制:单个算法可以同时持有的头寸数量。
  5. 时段过滤器:是否允许在主要交易时间之外入场。
  6. 新闻处理:高影响事件是否会暂停算法。

我鼓励任何分享结果的人都将这些规格与业绩数据分开发布,而我这个页面的早期版本未能做到这一点。没有背后交易规则的平衡曲线只是一种装饰。

测试序列

三个阶段,按顺序进行,跳过任何一个都可能导致糟糕的结果。

  • 历史模拟:用于排除明显的失败,并了解算法在不同市场机制下的表现。回测数据仅描述过去。在我生成的每一个权益曲线在遇到实时点差之前,看起来都非常完美。
  • 模拟前向测试:筛选发生在这一阶段。交易算法在当前条件下运行在模拟账户中,生成没有人针对其进行优化的全新交易,我观察的是哪些交易在“现在”表现良好,而不是在 2019 年表现得有多完美。
  • 小规模实盘部署:推广的策略从最小暴露开始。滑点、重新报价和融资费用就在此时出现,在此之前都不会出现。

为什么要费心进行中间阶段?因为每个算法都会经历盈利阶段和停滞阶段。生成阶段的余额图清晰地显示了这一点:增长,然后回撤,然后持平,然后再次增长。这完全正常,且很大程度上是不可预测的。我的目标是持有那些在当前时刻看起来具有建设性的算法头寸,使用当前的市场行为作为证据,而不是使用多年前的模拟数据。

这个目标是否可以实现是另一个问题,将在下文讨论。

投资组合业绩数据

一份来自 2020 年原始资料的模拟快照显示,通过 FX Blue 追踪的十个已部署策略实现了 60.84 美元的净利润,净点数为 694.2。这两个数字是该账户中残存的所有内容。

这实际上是本节的重点。两个数字无法支持任何结论,我宁愿向你展示一个可用的记录长什么样,也不愿粉饰一个不完整的记录:

记录指标它告诉你什么
结果类型模拟、回测和实盘结果不可比
测试周期和日历日短期窗口衡量的是运气,而非优势
初始余额将货币数值转换为百分比
总交易次数判断样本是否具有意义的单一最佳指标
盈亏情况及百分比胜率的基础
投资组合盈亏比总收益与总亏损的比率
最大净值回撤平均值会掩盖最糟糕的时刻
每笔交易的平均结果揭示成本是否正在吞噬优势
最大收益与最大损失暴露对极端值的依赖
最大连续亏损次数你必须承受的最差情况
平均持仓时间决定了隔夜融资的风险敞口
支付的总成本通常比初学者预期的要高

请从你的第一个模拟账户开始保留这些交易记录。正如我所发现的,以后想要重建它们是不可能的。

筛选方法一:盈亏比

等待算法完成至少五笔已平仓交易,然后检查其盈亏比是否高于 1.2。

盈亏比是用总收益除以总亏损。任何高于 1.0 的数值都意味着算法在样本中的收益超过了亏损。1.2 的数值意味着收益比亏损多 20%。

足够简单。五笔交易只是一个筛选触发器,而非优势的证明,我必须直言不讳,因为这个页面的早期版本暗示的信心高于数据所支持的程度。

筛选方法二:净点数

相同的最小计数,不同的衡量标准。交易策略如果能净赚超过 100 点,则会被纳入考虑。

根据一个交易时段的数据:领先的算法分别显示了 358、204、194、180 和 178 点。当天有六个通过了阈值。结合盈亏比要求,只有三个同时满足两项标准。

应用点数过滤器需要了解你经纪商的惯例,如前文所述。在一种规格下的一百点可能代表在另一种规格下十倍的资金量。

筛选方法三:胜率

至少十笔已平仓交易,且其中至少七笔为盈利。

这个过滤器有一个明显的弱点,直接说出来比让读者通过高昂代价才发现要好。胜率完全忽略了盈亏幅度。一个算法在十次交易中赢了七次,但在剩下的三次中发生了灾难性亏损,导致整体亏损,但它依然能轻松通过这个筛选。在采取行动之前,请将该指标与平均盈亏比或盈亏比结合使用。

筛选方法规则局限性
盈亏比五笔已平仓交易,高于 1.2小样本会产生不稳定的读数
净运动五笔已平仓交易,高于 100 点没有合约规格时毫无意义
胜率十次中七次获胜完全忽略了风险回报比

欢迎你建立自己的交易过滤器。我的过滤器是通过重复实践而非研究开发的,在采用它之前了解这一点很重要。

为什么五笔交易几乎证明不了任何事情

统计诚实部分,可能也是大多数算法交易内容都会跳过的部分,尽管它是本页最重要的部分。

五笔已平仓交易是一个极小的样本。一个没有任何真实优势的抛硬币算法,仅仅通过方差,在五次结果中表现出高于 1.2 的盈亏比的情况是非常频繁的。十笔交易也几乎无法改善情况。建立稳定的胜率通常需要数百次观察,而不是几十次。

其他几个问题也值得提出来:

  • 追逐近期表现: 选择上周表现良好的策略,可能仅仅意味着选择了上周运气好的策略。
  • 在造成损失后切换: 一旦算法跌破阈值就将其移除,意味着损失已经发生。你捕捉到了下跌,但可能错过了回升。
  • 多次比较: 筛选二十个候选者并提拔三个,会保证其中一些通过仅仅是因为运气好。
  • 机制变更: 适合算法的一个季度的市场条件可能会在下一个季度毫无征兆地消失。
  • 部署成本: 轮换策略会在每个周期产生点差和佣金。

过滤器是否改善了样本外结果?正确测试这意味着将筛选规则本身作为一种策略在长期的历史记录中运行,并与简单持有所有资产进行对比。我还没有进行过那项测试。我认识的这个领域内的人也没有发表过此类测试。在有人发表之前,请将这里的算法交易流程视为一种合理的启发式方法,而非经过验证的改进。

多元化需要衡量,而非假设

我的长期规则是运行至少三个实时算法而非一个,理由是当几个算法亏损时,其他的可以进行补偿。交易单一策略会在其进入停滞阶段时让你完全暴露在风险中。

这是合理的直觉。但推理并不完整。

在相同时间使用相似指标系列的多个交易同一指数的策略并不是真正独立的。它们可能会同时买入同一个突破点并同时亏损。真正的风险分散需要证据,这意味着报告:

衡量指标为什么它很重要
算法间的收益相关性数值接近 1.0 意味着没有实现真正的风险分散
重叠的入场时间戳同时进行的交易会集中风险
共享的指标系列相似的逻辑会导致相似的失败
最大合并风险敞口当所有指令同时触发时的总头寸规模
组合投资组合回撤比任何单一数字显示的都要深
方向性偏差全多头投资组合是一个杠杆做多头寸

我从未发布过这些策略的相关性矩阵,我也不会假装发布过。在这些数据存在之前,“多种策略”描述的是一个数量,而不是一种风险属性。

规模、敞口与停机规则

头寸规模比策略选择更值得关注,尽管在大多数我读到的算法交易资料中,它获得的讨论仅占约十分之一。

  • 在部署任何内容之前,决定最大可接受的投资组合回撤。
  • 调整单笔交易规模,使最坏情况下的同时风险敞口保持在该限额之内。
  • 考虑到所有算法可能同时启动的可能性,因为偶尔确实会发生这种情况。
  • 预先设定一个硬性的权益底线,一旦达到该底线,所有交易即刻停止。
  • 在指数产品上保持适度的杠杆,因为一百点的差距会迅速消耗大量实际资金。

隔夜融资适用于持有超过每日展期(rollover)的头寸,而某些策略会持仓过夜。这些费用会静默累积,并出现在你的账单中,而不是出现在平台的利润栏中。

添加、暂停与移除

在晋升为实盘交易账户后,监控仍在继续。实盘表现会根据选拔时使用的相同标准进行检查,因此如果一个算法的利润因子跌至 1.2 以下,它将被从交易账户中移除。

选拔规则与移除规则之间的一致性至关重要。如果晋升的标准与持有标准不符,导致在下跌过程中仍继续持有,资产组合就会在不知不觉中充斥着表现不佳的资产。

对于初学者来说,一个非常有用的实践是:开设第二个模拟账户,并像对待真实资金一样对待它。将通过测试的三个算法放入其中,并行运行两个账户,并根据你选择的方法在它们之间轮换。练习这个过程除了耐心之外不需要任何成本。在还没建立起对自身工作流的信任之前就匆忙进入实盘交易,成本会高得多,许多交易者都通过昂贵的代价吸取了教训。

模拟交易对比实盘交易

两种环境的结果存在差异,有时差异很大:

  • 模拟服务器的成交价通常完全没有滑点。
  • 实盘交易会在你的终端与经纪商之间引入延迟。
  • 在经济事件前后和交易时段转换期间,价差会扩大。
  • 实盘账户会出现重新报价(Requotes)和部分成交,而模拟账户很少出现这种情况。
  • 在模拟环境下,融资费用可能无法准确模拟,甚至完全被忽略。
  • 在规模化交易时,订单队列位置非常重要,但在小规模零售交易中影响较小。

预计实盘交易的数字会低于模拟交易的数字。提前为这种差距做好预算,远比被动接受它要好。

常见问题

自动化交易需要 VPS 吗? 

对于任何在你清醒时间之外运行的算法,答案实际上是肯定的。虚拟专用服务器(VPS)可以在你的电脑休眠、更新或失去网络连接时保持平台连接。这一点很重要,因为在杠杆指数产品上未受管理的开放头寸可能会在夜间产生不利于你的波动。在靠近经纪商服务器的地方托管也能略微降低延迟。许多经纪商在账户余额达到一定阈值后会提供免费托管,因此在单独付费购买供应商之前,请先咨询客服。

这与期货相比(而非 CFD)有何不同? 

此类交易所交易合约通过集中定价、标准化规格和透明的成交量数据进行集中结算,而 CFD 是你与经纪商之间的双边协议。交易所版本的合约规模要大得多,这提高了所需的最低资本。融资方式也不同:期货将持有成本包含在合约价格中,而不是每日收取费用。这两种结构没有绝对的优劣之分,不过交易所途径适合规模较大的交易账户,而 CFD 适合规模较小且采用分级规模的账户。

这些算法可以在重大经济公告期间进行交易吗? 

我的算法配置为避开这些时段,我也建议初学者这样做。例如美国就业数据、通胀数据和美联储决议等发布,会产生突然的缺口,导致订单成交价格远偏离预期水平。自动化逻辑无法评估价格飙升反映的是真实的重新定价还是暂时的流动性不足。通过经济日历进行过滤,或者简单地在预定事件期间暂停,可以消除一整类不可预测的交易结果。

我实际应该瞄准什么样的利润因子? 

较高的数值看起来很有吸引力,但如果是在少量观察样本下计算出的数值,无论多大都意义不大。在数百笔已平仓交易中,对于指数算法,在扣除交易成本后,持续在 1.3 到 1.6 之间的数字代表了稳健的表现。对于来自零售渠道的超过 2.0 的数值要保持警惕,因为这些数字通常来自短期样本、过拟合参数或排除了现实价差假设的回测数据。样本量比标题数值更值得关注。

API 连接是否优于基于平台的执行? 

直接通过交易所或经纪商 API 进行连接可以提供更快的订单路由和更精细的控制,这有利于毫秒级影响结果的高频交易。对于持仓数小时的零售交易者来说,这种速度几乎没有收益。通过 MetaTrader 进行平台执行可以完成同样的工作,且开发工作量更少,无需维护服务器,且更快地投入实盘运行。复杂性应随需求而定,大多数人永远不会达到那种连接能解决实际问题的程度。

指数算法交易需要多少资本? 

资本量应足以使最小头寸占余额的一个合理比例,这完全取决于你经纪商的合约规格。如果最小可用成交量在常规波动中就有可能损失掉你账户的几个百分点,那么无论算法质量如何,该账户对于该品种来说都太小了。应该从所有同时部署的资产的极端情况下的风险敞口进行反向计算,然后加上缓冲资金,而不是从一个感觉负担得起的数字开始。

这些方法适用于其他市场吗? 

筛选框架可以很好地转移,因为利润因子、样本数量和胜率适用于任何品种。不过,阈值需要进行调整。在货币市场、大宗商品或股票指数市场中,一百点的含义完全不同,且持有期随波动率特征而变化。为每个市场分别测试阈值,比假设在一种资产上开发的设置可以通用到另一种资产要好。期权和期货引入了值得独立研究的其他差异。

如果所有算法同时亏损会发生什么? 

这种情况确实会发生,而对它的规划能让你免于爆仓,避免从亏损一个月变成清空账户。相关性失效通常发生在市场机制变化期间:趋势市场转为震荡,原本为趋势建立的策略会同时失效。你的保护措施是前文提到的预设权益底线,加上基于同时风险敞口而非平均风险敞口的头寸规模控制。没有人能完全避免这些时期,因此在资金完好的情况下生存下来才是现实的目标。

披露: 此处内容仅用于教育目的,不构成买卖任何金融工具的建议。自动化交易在执行过程中减少了情绪化决策,这确实很有用,但它也带来了自身的运营风险:包括连接失败、编码错误、经纪商侧的变化以及无人看管的风险敞口。在将资本投入任何交易系统之前,请咨询受监管的专业人士。

About the Author

Petko Aleksandrov

Chief Mentor & Founder

Founder of EA Academy and Algo Trading Space with over 100,000 students educated globally. Petko combines practical trading experience with rigorous testing methodology, setting new standards for transparency in the algorithmic trading industry.

View Profile

Related Posts

初学者交易外汇的最佳时间周期?使其与你的实际生活相匹配
初学者交易外汇的最佳时间周期?使其与你的实际生活相匹配

注意: 下文提到的特定经纪商成本、交易时段和平台功能可能会发生变化。在交易前,请直接向你自己的经纪商确认当前的点差、隔夜利息和执行详情。 对于许多外汇初学者来说,4小时图或日线图是最实际的起点。这些时间周期提供更多的时间来分析设置,并且通常产生的信号比短期的日内图表更少。日线图适合屏幕使用时间有限的...

8/28/2026
什么是向前行走分析(Walk Forward Analysis)?以实际交易方式测试你的策略

注意: 本文将向前行走分析解释为一种通用的验证方法。下文描述的所有特定平台的实现方式(包括 EA Studio 的版本)都应根据该平台当前的官方文档进行验证,因为功能和版本行为可能会发生变化。 向前行走分析是一种交易策略验证方法,通过在该系统在一段历史时期内进行重复优化,并在下一个未见过的时期内进行...

8/28/2026
什么是向前行走分析(Walk Forward Analysis)?以实际交易方式测试你的策略
  • Share

Comment

No comments yet. Be the first to comment!

Leave a Comment

Your email address will not be published. Required fields are marked with *