构建自动运行的 EA(第 12 部分):自动化(IV)

概述

在上一篇赫兹量化软件HERZ文章中,我们研究了如何构建一个健壮的系统,最大限度地减少可能影响程序的故障和漏洞。

我看到有人不时说,这种事情发生的几率是 500 万分之一,但即使百分比很低,这种可能性仍然存在。 既然我们知道这种情况可能发生,为什么不创造方法来最大限度地减少这种情况的损害或副作用呢? 为什么忽略可能发生的事情,而不修复它,或以某种方式阻止它,只是因为机会很低?

如果您正在关注这篇关于如何构建自动化 EA 的系列文章,您一定已经注意到创建手动使用的 EA 非常快速和简单。 但对于 100% 自动化的 EA,事情则并没有那么简单。 您也许已经注意到,我从未表达过我们将拥有一个 100% 万无一失的系统,且该系统可以在没有任何监督的情况下使用的想法。 事实上,我相信它已经变得很清楚,与许多人对自动 EA 的这个前提认知恰恰相反,您以为打开它,就可以放任它在那里滚动,而无需真正明白它正在做什么。

当我们谈论 EA 的 100% 自动化时,一切都变得严肃而复杂。 更重要的是,我们将始终受到运行时错误的影响,并且我们必须制作一个可以实时工作的系统。 这两件事结合在一起,再加上我们在系统中可能存在一些漏洞或故障,令那些将在 EA 运行期间需要监督 EA 的人来说,这项工作非常累人。

但作为一名程序员,您应该始终关注一些可能产生潜在问题的关键点,即使一切都看似完美和谐。 我并不是说您应该寻找可能不存在的问题。 这就是一位仔细和认真的专业人士理应会做的事情 — 在一个乍看没有缺陷的系统中寻找缺陷。

在当前开发阶段我们的 EA 旨在手动和半自动使用(使用盈亏平衡和尾随停止),没有像 BlockbusterDC 超级反派)那样的破坏性漏洞。 然而,如果我们以 100% 自动化使用它,情况就会发生变化,并且存在潜在危险故障的风险。

在上一篇文章中,我提出了这个问题,并留给您了解这个缺陷在哪里,以及它如何导致问题,如此我们还无法 100% 自动化我们的 EA。 您是否设法了解故障在哪里?以及如何触发故障? 好吧,如果答案是否定的,那没关系。 并不是每个人都能通过查看代码,并在手动或半自动使用它的过程中真正注意到故障。 但如果您尝试自动化代码,就会遇到严重的问题。 这个缺陷当然是最简单的缺陷,但却不是那么容易纠正,这是 100% 自动化 EA 所必需的。

因此,若要了解它的内容,我们需将事情划分为几个主题。 我认为您会更容易注意到一些看似不重要的东西,这可能会给您带来很大的烦恼。

理解问题

当我们为 EA 设置每天可以交易的最大交易量限制时,问题就开始了。 不要将每日最大交易量与可操作交易量混淆。 现在我们主要对每日最大交易量感兴趣。

为清晰起见,我们假设交易量是最小交易的 100 倍。 也就是说,EA 能够进行尽可能多的操作,直到达到此交易量。 因此,在 C_Manager 类中添加的最后一条规则是交易量不超过 100。

现在,我来们看看实际发生了什么。 为此,我们需分析我们允许交易的代码:

inline bool IsPossible(const bool IsPending)
                        {
                                if (!CtrlTimeIsPassed()) return false;
                                if ((m_StaticLeverage >= m_InfosManager.MaxLeverage) || (m_bAccountHedging && (m_Position.Ticket > 0))) return false;
                                if ((IsPending) && (m_TicketPending > 0)) return false;
                                if (m_StaticLeverage + m_InfosManager.Leverage > m_InfosManager.MaxLeverage)
                                {
                                        Print("Request denied, as it would violate the maximum volume allowed for the EA.");
                                        return false;
                                }
                                
                                return true;
                        }

上面的代码可防止超过交易量。 但它实际上是如何发生的呢?

假设交易者以所需最小交易量的 3 倍手数启动 EA,EA 代码中定义的最大交易量为 100 倍(这是在代码编译期间完成的)。 这在之前的文章中都已经解释过。 经过 33 笔交易后,EA 将达到最小交易量的 99 倍,这意味着我们还可以再进行一笔交易。 然而,由于上面代码中高亮显示的行,交易者必须将交易量改为 1 倍才能达到最大限制。 否则,EA 将无法执行该操作。

这个想法是限制最大交易量,如此 EA 的损失就不会超过先前指定的参数(这必须始终是主要和最重要的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赫兹量化软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值