这是用户在 2025-8-3 4:06 为 https://fxdreema.com/documentation/builder/things-not-to-do 保存的双语快照页面,由 沉浸式翻译 提供双语支持。了解如何保存?

# 我想检测蜡烛收盘的时刻...

这里的问题是我们不知道当前蜡烛何时会收盘。是的,我们可以猜测——在最后一秒,就在时间周期结束之前。但问题是我们的专家顾问是由 tick 驱动的,我们不知道最后一个 tick 何时到来。它可能在周期结束前不止 1 秒,而是 2 秒到来。所以,如果最后一秒没有 tick 到来,我们能检测到什么呢?

是的,我们有定时器事件,可以将其设置为 1 秒,并在每个周期的最后一秒执行我们想做的操作。但有一个问题——在策略测试器中, 定时器事件并不十分准确。你看,测试器实际上没有这样的事件,因为它不是实时运行的。测试器生成虚拟 tick,并通过这种方式驱动专家顾问。不能保证每根蜡烛的最后一个 tick 都会在最后一秒到来。所以我们在测试器和实盘交易中都会遇到问题和非常不一致的结果。

该如何做呢?最好在 on Tick 事件下使用每根 K 线一次模块来检测每根新蜡烛的开始。

# 认为你需要将方块连接在一排中

看看这个项目,猜猜哪里出了问题:

方块 3 和 4 之间的连接不应该存在。你可能认为每个方块都会等待前一个通过,但事实并非如此,方块之间不会相互等待。相反,方块(至少是顶层的那些)会因为 on Tick 事件而在每个 tick 上运行。

实际上,有一种方法可以让某些方块“等待”,请看下面的示例。要强制方块等待,右键点击它并选择“等待通过”。但你可能会发现这种工作方式令人困惑且不太直观,与最初的预期相反。

# 别忘了“For each...”块

如果你不知道“For each...”是什么意思,请点击这里

所以,带有粉色块的类别有点不同。“For each...”块用于创建交易或挂单的循环,而其余的粉色块则用于一次操作一个交易或挂单。

人们往往忘记,在 MetaTrader 4,现在也包括 MetaTrader 5 中,我们可以同时拥有多个交易。鉴于这一事实,你不能仅仅使用粉色的检查利润块而没有任何上下文。这个块是用来检查特定交易(或挂单)的利润,但当你同时有两个或更多交易(或挂单)时,它无法自动选择哪个是正确的。

# 不要在“For each...”循环中放置蓝色模块

这不是强制性的,但请小心并确保你知道自己在做什么。

再次强调,“For each...”模块会创建一个循环,在该模块下面你应该放置其他粉色模块,这些模块专门设计用于该上下文中。一次处理单个交易(或挂单)。

没有必要连接例如 For each Trade -> Close tradesFor each Trade -> Trailing stop,因为这些模块(Close trades 和 Trailing stop)本身就包含循环。换句话说,它们已经设计为查找所有可用交易并对每个交易执行相同操作,可以单独工作。而粉色的 close 模块例如只能关闭之前在使用某个 For each... 模块创建的循环中选中的交易(或挂单)。

# 注意“平仓”模块

当你在 Tick 事件下有类似立即买入平仓的模块时,要非常小心不要让平仓在与立即买入相同的条件下运行。否则,交易刚创建就会被立即平仓,你会疑惑为什么看到这么多交易开仓又平仓。

下面的示例是正确的,展示了如何安全地使用平仓模块。你可能想做不同的操作,但无论如何,使用此模块时要小心,确保它只在需要时运行。你应始终将类似不交易 (带有特定设置)的模块放在它上方,或放置其他用于检查和过滤的模块,以限制该模块在不适当时间运行的可能性。