写一篇关于 "如何为交易机器人写一份TOR "的文章 - 页 7

 
Andrey F. Zelinsky:

流程图是ToR中最无用、最耗时且实际上无法实现的部分。

为了理解这一点--你可以进行一个非常简单的小实验--自由服务开发者应该得到一个任务:"为绘制MA指标做一个流程图" --然后通过两个标准进行评估。1)正确性和2)可理解性。

有一次,它对我帮助很大--当我无法在头脑中管理它时......

 
Artyom Trishkin:

它真的帮助了我一次--当我无法理清头绪的时候......

你刚才说了这样的话。" 作为一名开发人员,我的 流程图对 帮助很大"。注意,对于你的流程图来说,将阅读和使用你的流程图的第三个人原本是不存在的。

在这个主题中,我们正在讨论 "如何为交易机器人创建一个TOR"。

我不清楚这篇文章是为谁写的,带着什么样的目标和目的。

因为有不同程度的细节,并从这些细节中得出:目标/目的/结果--即要谈论TOR--你必须首先了解a)客户对开发者的期望和要求;b)客户的期望和要求是什么。

当我们谈论流程图时,它意味着客户清楚地了解事件模型,理解并能够不仅显示所需的程序组织,而且能够检查一切是否按代码的要求实现。在这种情况下,客户更需要的是一个编码员。而在这种情况下,是客户要对一切负责,包括其结构的正确性。

这是一个计划。这种情况下的订单比例是多少?

阅读该文章的布局。

Rashid Umarov:

职权范围起草得不好或实际没有,最常表明交易系统的规则没有制定,它们根本不存在。客户所说的交易系统,其实只是一个想法。你不能在这样的条件下开始工作,因为很快在算法的编程过程中会出现一些未被记录的细微差别,或者仅仅是缺乏针对市场中某些情况的算法。 在这种情况下,程序员实际上开始思考出选项,而不是客户

写得很正确,除了一点 -- 绝大多数任务的开始、执行和完成 -- 在一个模糊的问题陈述中。由于模糊的TOR导致的失败率--用仲裁协议很容易检查。我认为这不超过5-10%。

如果我们谈论对绝大多数客户的TOR的建议--在这样的TOR中--做一个流程图的建议是合理的?

 

文章的当前版本

订购交易机器人需要什么

交易机器人是执行嵌入其中的算法的程序。算法是在事件发生时必须执行的一组动作。例如,算法交易中最常见的任务是定义“新柱”事件,当出现该事件时,机器人会检查交易信号的出现并对其执行必要的操作。

但在编写或订购交易机器人之前,必须有一个交易系统,其中有明确的规则来确定进行交易的有利时机。任何,即使是最复杂的交易系统的开发总是从基本的事情开始,即从开发交易信号开始。接下来,您可以为其添加各种后续和关闭选项。

您无需在交易终端的监控下花费数年时间来制定您的交易策略。现在有数百个经过验证的想法发表在互联网和书籍中,您可以尝试。即使您对自己的编程技能并不完全有信心,这也不是障碍。 Freelance服务将帮助您找到合适的开发人员并安全地为完成的工作付费。

但在进入算法交易的迷人元素之前,我们建议您阅读有关该主题的有用文章:

为什么拥有一个好的职权范围很重要?

在订购或开发 EA 交易时,有必要为其制定技术要求 - 它应该解决什么任务,它将在什么条件下运行,在紧急情况下会发生什么,它需要什么样的控制。交易机器人是程序,必须按照底层逻辑清晰地工作。但在编写必要的动作算法之前,还必须清楚地描述它。

交易策略的描述必须以职权范围的形式发布。而且它会越好越清晰,作为客户的您与作为订单执行者的程序员之间的误解就越少。

职权范围中最重要的是存在正式的明确交易规则。即使您不打算在旁边订购专家,而是想自己编写,也可以从为自己制定这些规则开始。制定职责范围并确保包含有关测试/优化 EA 的项目。还要添加假设来测试您的交易策略的质量——您将使用什么标准来选择最佳参数,为什么您认为这些标准很重要。

在参考条款中包含创建交易机器人的所有步骤——这将有助于理解算法的本质,不仅对执行者,而且对您在数周、数月或数年后也如此。请记住,算法交易不是一种爱好,而是同样单调的研究路径,在此期间有必要记录所经历的阶段。对我自己而言,不仅仅是为一个会为你编写机器人的程序员。

培养喜欢整理事情的官僚的技能。你肯定会需要这个。是的,程序员喜欢明确的命令。

职权范围内应包含哪些内容

贸易理念

要快速了解交易策略的本质,请将您的技术订单的第一段专门用于其包含的想法/假设。例如:“如果价格两次接近阻力位并且每次都回落,那么第三次,它通常会突破它。”在这里,您可以附上一张图表,其中包含绘制的阻力/支撑线、叠加指标和说明情况的签名。为了描述这个想法,不需要给出具体的数字或计算算法——在这个阶段,不需要解释我们如何确定:

  • 阻力水平,
  • 等级分解,
  • “一般”的概念。

在初始阶段进行少量抽象将使您专注于想法本身,而不是技术细节。此方法允许您随后生成更多种类的交易策略 - 您只需将一个策略块替换为另一个,将一个指标替换为另一个,添加或替换过滤器。同时,想法本身不会改变,只是您的交易机器人输入参数的名称和值会改变。

此外,有必要对在该想法的描述中使用的所有术语进行描述。如果趋势对策略很重要,请清楚说明如何确定趋势 - 根据哪个指标,如何确定趋势的方向和强度。这些定义的数值特征将构成 EA输入参数的基础,然后您将在策略测试器中对其进行优化。因此,将您的职权范围的第一部分命名为 - 交易理念。

条款

为了描述这些条款,我们建议创建一个单独的参考条款 - 条款部分。其中,为每个术语编写了一个单独的段落,术语本身以粗体书写,以突出您交易策略的关键概念。如有必要,请在术语描述中添加插图,您需要在其中显示最必要的理解。

交易信号

接下来,您准备好编写第三个最重要的部分 - 交易信号 - 它描述了在什么条件、市场条件和指标读数下会发生购买。为了描述生成买入信号所需的每个条件,有必要挑选出一个数字参数,信号的出现取决于该参数。例如,对于移动平均线,这将是平滑类型和周期。这些重要参数被纳入未来智能交易系统的输入参数中。单独描述销售条件,即使它们与购买条件完全相反 - 有时会出现程序员可能与您理解不同的微妙之处。例如,对于购买,设置条件“Indicator> 0” - 为销售写什么? “分数<0”还是“分数<=0”?

即使是最简单的交易想法也会很快开始获得额外的条件和过滤器,以确认交易信号的存在,反之亦然 - 禁止交易。因此,为每种市场情况制作解释性屏幕截图非常重要,直观地显示必要的指标和设置。当您的顾问错过了一个看似明显的交易信号或在错误的时间突然进行交易时,这将使您能够快速处理这种情况。

截图和流程图

互联网上有很多免费且方便的程序可用于创建屏幕截图和流程图。订购指标时如何制定参考条款一文中提供了一些使用它们的提示。在那里,您还将找到有关订购指标的提示,该指标在图表上用箭头显示买入和卖出信号出现的时刻。这种与顾问分开工作的指标使在线和视觉测试期间更容易检查和控制交易机器人的操作。

信号/订单/仓位的生命周期

交易策略的第二个重要部分是退出未平仓头寸并删除挂单。此外,交易信号本身也可以通过时间或某些事件的发生来取消。还需要明确描述,对于交易信号,在什么情况下会关闭买入/卖出,取消下单,何时取消信号本身。

维持未平仓头寸和挂单

如果您的交易策略需要设置止损和止盈水平,请提供计算算法。如果需要灵活上拉/移动这些级别,还需要描述此类操作的条件。 SL/TP 水平可以在新柱的开盘时和每个分时进行修改。有必要在职权范围内明确指出这一时刻,并了解测试交易策略模式的差异。我们建议您阅读文章在真实报价上测试交易策略

如果您不能自己撰写,我在哪里可以获得职权范围

一个草拟的职权范围或其实际缺失通常表明交易系统的规则没有制定,它们根本不存在。在这种情况下,客户所称的交易系统实际上通常只是一个想法。在这种情况下开始工作是不可能的,因为很快就会在编程算法的过程中出现无法解释的细微差别或只是在某些市场情况下缺少算法。在这种情况下,程序员实际上开始提出选项而不是客户。

因此,承包商可能会自担风险,完成工作并向客户发出交易机器人。但在这种情况下,除了在不明确的 TOR 中浪费时间讨论每个新问题外,还有工作进入仲裁的可能性。因为客户在接受和检查此类工作时,突然发现交易并没有按照他的预期进行,但无法描述。当然,在这种情况下,他会责怪承包商违反了职权范围的某些点并错误地对机器人进行了编程。在这种情况下,仲裁会迅速了解双方能力的差异,并根据订单所附的职权范围做出决定。根据自由职业者规则,订单执行之前和期间的任何通信均不予考虑:

在考虑仲裁争议的主题时,只有职权范围作为做出决定的依据。

在生活中,这种选择也是可能的:你有严格的交易规则,但由于某种原因你不能自己制定职权范围。例如,他们不确定如何正确描述某些事物,或者他们需要数学、神经网络、机器学习、编程等方面的专家的帮助。在这种情况下,您也可以在 Freelance 中命令创建参考条款,为此,“编程咨询”或“其他”类别是合适的。

选择这两个类别之一,将其命名为“为订购交易机器人创建 TOR”,并按照您的想象指出工作的初始成本。经验丰富的交易系统开发人员将帮助您正确制定策略规则,以便其他程序员可以理解它们。同时,您应该能够使用图表、指标和图形对象,以便使用屏幕截图显示交易信号的设置。

如果可能,程序员将了解您的交易系统并帮助您编写交易算法的描述。如果你不能自己制定一些概念(例如“冲动”或“从关卡反弹”),他可以根据他的经验给你现成的想法。通常,市场中的任何情况都可以在逻辑上(然后以编程方式)进行描述,并具有一定的解释自由。这种变化总是可以通过某个参数来表达,然后您将在您的“EA 交易”中对其进行优化。

没有理想的模式,因为市场一方面不会重演,另一方面类似的情况总是可以在历史上找到。您共同工作的结果应该是根据您的策略订购交易机器人的现成参考条款。

使用什么术语

通常,在交易系统中,有几个基本的重要概念或术语来描述市场状态或价格变动的性质。即使在您看来,您使用的是一个普遍接受且简单的概念,但最好将其描述清楚。对于每个术语,做一段描述。

例如,根据比尔·威廉姆斯的说法,上升趋势是当所有三条鳄鱼线从下到上按以下顺序排列时:蓝色、红色、绿色。


上升趋势的另一个经典定义——来自拉里·威廉姆斯——当每个新的峰值都高于前一个,并且每个新的底部不低于前一个时。


在条款的描述中,您可以使用图表的截图,它们不会干扰。在职权范围本身中,以粗体突出显示条款- 让表演者注意它们,如果有不清楚的地方提出问题。

当在策略描述中使用某个术语时,不可能将承包商引用到其他来源(网站、书籍、论坛等),因为这是众所周知的。一切都应该在这里和现在进行描述,不允许“我稍后在 Skype 上解释”。写下 TOR 中的所有条款将花费您不超过半小时的时间,但这样可以节省您用于纠正因误解而导致的错误的时间。

在自由职业者的职位描述中写什么

在创建工作时,用几段描述您的交易理念的一般本质,以便潜在的执行者了解您的需求。职位描述不需要披露交易系统的规则或提供有关所使用指标的详细信息。

描述可能如下所示:

为趋势反转交易编写 EA 交易。反转信号将是价格行为模式。为了确定趋势,将使用 ADX、鳄鱼和 MACD 指标 - 指标的选择由顾问的输入参数设置。

交易策略的总体思路

在这里,您可以指定机器人将在哪些工具上交易、是否与趋势交易、如何确定以及在什么时间范围内进行交易。如果我们顺势交易,那么入场是如何发生的——在回滚时,在突破新的极端时,等等。

总的来说,金融市场只有两种交易策略:继续移动和回归平均水平。您的想法应该与这两种策略之一相关,并解释您将如何开仓 - 在市场上、确认后或以更好的价格开仓。

等待信号的设置说明

...有必要形成一个随后突破的横盘/或等待欧洲时段结束并仅在其移动方向上接收信号

信号说明

...描述的技术参数 - 趋势/回调/击穿 - 一切都严格形式化

最好先分别调试买入和卖出信号

如果顾问在图表上放置标签/信号对象会更好

最好单独制作信号指示灯

信号寿命

...信号有效的时间 - 以柱/小时/直到会话结束/天

下单和开仓

... 有没有什么特点,例如,我们不立即设置止损/止盈,

或者我们为进入市场做了多少尝试,

或根据时间/设置/模式设置不同的 oredermagic/ordercomment

别的东西

维护交易头寸/订单

... 是否有追踪止损

开启 TS 时

我们是否将挂单移到/背离价格

跟踪未平仓头寸的当前损益

别的东西

取消订单并平仓

... 按时间/柱数/周期结束/相反信号的出现/设置丢失删除订单

...按时间/柱数/周期结束/累积利润/相反信号的出现/设置关闭头寸

别的东西

下订单的手数计算

....从平衡

固定的

从累计利润

基于最近 N 次交易的结果

远离风险(距离 SL)

别的东西

处理交易错误和环境状态

...发送交易订单时的详细日志

终端/连接/服务器重启处理

通过信使/电子邮件反馈

柱线开盘和柱线内交易的区别

... 信号可以在条形图的生命周期内消失和出现

蜱/剥头皮策略

...您需要很好地了解它是什么,TakeProfit/StopLoss 点数越少,该策略对点差/佣金/网络延迟/可用历史的质量/机器人本身的速度就越关键。

条件的任何恶化都可能扼杀策略

网格、鞅、平均以及这些改进的缺点

...它们是什么,它们为什么受欢迎,以及它们可以在多大程度上帮助暂时扩展策略。风险增加,尽管它可能会延长糟糕策略的寿命

选择承包商时要寻找什么

...实质性问题

不假装给人留下深刻印象

给出明确的截止日期

立即指出 TOR 中不清楚的地方,而不是经过 2 个月的讨论

一个好的程序员珍惜他和你的时间——这就是为什么他喜欢开发良好的一致 TOR

程序员不能为你做什么

将失败的策略变成有利可图的机器人

优化和识别任何弱点

编写一个没有错误的程序 - 他们仍然会。找到它们并以易于理解的方式描述它们是您的任务。


 

文章的当前版本,等待信号的设置描述部分继续并进一步

订购交易机器人需要什么

交易机器人是执行嵌入其中的算法的程序。算法是在事件发生时必须执行的一组动作。例如,算法交易中最常见的任务是定义“新柱”事件,当出现该事件时,机器人会检查交易信号的出现并对其执行必要的操作。

但在编写或订购交易机器人之前,必须有一个交易系统,其中有明确的规则来确定进行交易的有利时机。任何,即使是最复杂的交易系统的开发总是从基本的事情开始,即从开发交易信号开始。接下来,您可以为其添加各种后续和关闭选项。

您无需在交易终端的监控下花费数年时间来制定您的交易策略。现在有数百个经过验证的想法发表在互联网和书籍中,您可以尝试。即使您对自己的编程技能并不完全有信心,这也不是障碍。 Freelance服务将帮助您找到合适的开发人员并安全地为完成的工作付费。

但在进入算法交易的迷人元素之前,我们建议您阅读有关该主题的有用文章:

为什么拥有一个好的职权范围很重要?

在订购或开发 EA 交易时,有必要为其制定技术要求 - 它应该解决什么任务,它将在什么条件下运行,在紧急情况下会发生什么,它需要什么样的控制。交易机器人是程序,必须按照底层逻辑清晰地工作。但在编写必要的动作算法之前,还必须清楚地描述它。

交易策略的描述必须以职权范围的形式发布。而且越详细,作为客户的您与作为订单执行者的程序员之间的误解就越少。

职权范围内最重要的是存在明确的正式交易规则。即使您不打算在旁边订购专家,而是想自己编写,也可以从为自己制定这些规则开始。制定职责范围并确保包含有关测试/优化 EA 的项目。还要添加假设,在此基础上您将检查交易策略的质量和稳定性——您将使用什么标准来选择最佳参数,为什么您认为这些标准很重要。

在参考条款中包括创建交易机器人的所有步骤 - 这将有助于理解算法的本质,不仅对执行者,而且对数周、数月或数年之后的您也是如此。请记住,算法交易不是一种爱好,而是同样单调的研究路径,在此期间有必要记录所经历的阶段。你甚至比为你编写机器人的程序员更需要这个。

培养喜欢整理事情的官僚的技能。当您想测试一个新想法时,每个交易系统的开发日志肯定会派上用场。是的,程序员喜欢明确的命令。

职权范围示例

让我们举例说明如何设计包含在 MetaTrader 5 终端交付中的智能交易系统技术规范。


职权范围内应包含哪些内容

贸易理念

在您的职权范围的第一部分,描述您的交易策略背后的总体思路。例如:“如果价格两次接近阻力位并且每次都回落,那么第三次,它通常会突破它。”您可以在此处附上带有绘制的阻力/支撑线、指标和说明性标题的图表。为了描述这个想法,你不需要进入具体的数字或计算算法——在这个例子中,你不需要立即解释我们如何确定:

  • 阻力水平,
  • 等级分解,
  • “一般”的概念。

在初始阶段进行少量抽象将使您专注于想法本身,而不是技术细节。此方法允许您随后生成更多种类的交易策略 - 您只需将一个策略块替换为另一个,将一个指标替换为另一个,添加或替换过滤器。同时,想法本身不会改变,只是您的交易机器人输入参数的名称和值会改变。

此外,有必要对在该想法的描述中使用的所有术语进行描述。如果趋势对策略很重要,请给出明确的定义 - 根据哪个指标确定趋势的方向和强度。这些定义的数值特征将构成 EA输入参数的基础,然后您将在策略测试器中对其进行优化。因此,将您的职权范围的第一部分命名为 - 交易理念。

条款

为了描述这些条款,我们建议创建一个单独的参考条款 - 条款部分。其中,为每个术语编写了一个单独的段落,术语本身以粗体书写,以突出您交易策略的关键概念。如有必要,请在术语描述中添加插图,您需要在其中显示最必要的理解。未来 EA 的输入参数可以斜体。

交易信号

参考条款的下一部分是第三个最重要的部分 - 交易信号 - 它描述了在什么条件、市场条件和指标读数下进行购买。为了描述生成买入信号所需的每个条件,有必要挑选出一个数字参数,信号的出现取决于该参数。例如,对于移动平均线,这将是平滑类型和周期。这些重要参数被纳入未来智能交易系统的输入参数中。未来 EA的输入参数可以斜体。

单独描述销售条件,即使它们与购买条件完全相反 - 有时会出现程序员可能与您理解不同的微妙之处。例如,对于购买,设置条件“Indicator> 0” - 为销售写什么? “分数<0”还是“分数<=0”?

即使是最简单的交易理念也会很快开始获得额外的条件和过滤器来确认交易信号,或者相反,取消它。因此,为每种市场情况制作解释性屏幕截图非常重要,其中直观地显示所使用的指标和设置。当您的顾问错过了一个看似明显的交易信号或在错误的时间突然进行交易时,这将使您能够快速处理这种情况。

截图和流程图

互联网上有很多免费且方便的程序可用于创建屏幕截图和流程图。订购指标时如何制定参考条款一文中提供了一些使用它们的提示。在那里,您还将找到有关订购指标的提示,该指标在图表上用箭头显示买入和卖出信号出现的时刻。这种与顾问分开工作的指标使在线和视觉测试期间更容易检查和控制交易机器人的操作。

信号/订单/仓位的生命周期

交易策略的第二个重要部分是退出未平仓头寸并删除挂单。此外,交易信号本身也可以及时取消或在某些事件发生时取消。对于交易信号,有必要描述 - 在什么条件下买卖将被关闭,下单将被移除,何时信号本身将被取消。

维持未平仓头寸和挂单

如果您的交易策略使用止损和止盈水平收盘,请给出计算算法。对于这些级别的灵活拉/移动,请描述条件和尾随算法。 SL/TP 水平可以在新柱的开盘时和每个分时进行修改。有必要在职权范围内明确指出这一点,并了解测试交易策略模式之间的区别。请务必阅读文章在真实报价上测试交易策略

如果您不能自己撰写,我在哪里可以获得职权范围

一个草拟的职权范围或其实际缺失通常表明交易系统的规则没有制定,它们根本不存在。在这种情况下,客户所说的交易系统实际上只是一个想法。在这种情况下不可能开始工作,因为很快就会在编写代码的过程中出现无法解释的细微差别或市场上没有针对不可预见情况的算法。在这种情况下,程序员实际上开始提出选项而不是客户。

因此,承包商可能会自担风险,完成工作并向客户发出交易机器人。但这伴随着讨论每个新问题的时间损失,并且将工作提交仲裁的可能性增加。因为在接受和检查所执行的工作时,客户突然发现交易没有按照他的预期进行,他根本无法正确描述它。当然,在这种情况下,客户将责怪承包商违反了职权范围的某些要点并错误地对机器人进行了编程。在这种情况下,仲裁会迅速了解双方能力的差异,并根据订单所附的职权范围做出决定。根据自由职业者规则,在考虑有争议的情况时,不考虑任何一方的通信:

在考虑仲裁争议的主题时,只有职权范围作为做出决定的依据。

在生活中,这种选择也是可能的:你有严格的交易规则,但由于某种原因你不能自己制定职权范围。例如,您不确定如何正确描述某些事物,或者您需要数学、神经网络、机器学习、编程等方面的专家的帮助。在这种情况下,您还可以下令创建参考条款,在 Freelance 中有“编程咨询”和“其他”等类别。

选择这两个类别之一,将工作命名为“创建用于订购交易机器人的 TOR”,并按照您的想象指出工作的初始成本。经验丰富的交易系统开发人员将帮助您正确制定策略规则,以便其他程序员可以理解它们。同时,您应该能够使用图表、指标和图形对象,以便使用屏幕截图显示交易信号的设置。

如果可能,程序员将了解您的交易系统并帮助您编写交易算法的描述。如果你不能自己制定一些概念(例如“冲动”或“从关卡反弹”),他可以根据他的经验给你现成的想法。作为一项规则,任何市场情况都可以用一些带有变化参数的简单模型进行逻辑描述(然后以编程方式)。这种变化可以通过某个参数来表示,然后您将在您的“EA 交易”中对其进行优化。

没有理想的模式,因为市场一方面不会重演,另一方面类似的情况总是可以在历史上找到。您共同工作的结果应该是根据您的策略订购交易机器人的现成参考条款。

使用什么术语

通常,在交易系统中,有几个基本的重要概念或术语来描述市场状态或价格变动的性质。即使在您看来,您在职权范围内使用的是普遍接受且简单的概念,但最好将其描述清楚。对于每个术语,做一段描述。

例如,根据比尔·威廉姆斯的说法,上升趋势是当所有三条鳄鱼线从下到上按以下顺序排列时:蓝色、红色、绿色。


上升趋势的另一个经典定义——来自拉里·威廉姆斯——当每个新的峰值都高于前一个,并且每个新的底部不低于前一个时。


在条款的描述中,您可以使用图表的截图,它们不会干扰。在职权范围本身中,我们建议您以粗体突出显示您输入的条款- 以便承包商稍后可以在有疑问时立即在文本中找到它。

在描述该术语时,承包商不能引用其他来源(网站、书籍、论坛等),证明这是众所周知的。一切都应该在这里和现在进行描述,TOR 中不允许使用“我稍后会在 Skype 上解释”形式的拐杖。写下职权范围内的所有条款不会超过半小时,但可以节省您因误解而纠正错误的时间。

在自由职业者的职位描述中写什么

在创建工作时,用几段描述您的交易理念的一般本质,以便潜在的执行者了解您的需求。职位描述不需要披露交易系统的规则或提供有关所使用指标的详细信息。

描述可能如下所示:

为趋势反转交易编写 EA 交易。反转信号将是价格行为模式。为了确定趋势,将使用 ADX、鳄鱼和 MACD 指标 - 指标的选择由顾问的输入参数设置。

交易策略的总体思路

在这里,您可以指定机器人将在哪些工具上交易、是否与趋势交易、如何确定以及在什么时间范围内进行交易。如果我们顺应趋势进行交易,那么会以某种方式出现进场 - 在回滚时,在水平突破时,等等。

总的来说,金融市场只有两种交易策略:继续移动和回归平均水平。您的交易理念应该与这两种策略中的一种相关,并且应该解释如何在市场上打开交易,在确认突破/回调之后,或者以更好的价格。

等待信号的设置说明

信号本身可以很简单,并且可以使用算法轻松描述。例如,诸如“吸收”和“Pin bar”之类的模式是众所周知和流行的。但作为一项规则,仅凭这些形式化的数据是不可能建立盈利策略的;这些模式被用来确定趋势反转。这意味着等待“看跌吞没”模式的设置将是上升趋势的存在。

因此,在职权范围内,不仅有必要描述交易信号本身,而且还需要对其所需的设置进行形式化。

信号说明

当满足特定条件时,就会出现买入或卖出的信号。例如,一个经典的买入信号是价格从下方穿过移动平均线。在描述这样的信号时,必须指定以下参数:

  • 均线类型——SMA、EMA、 VIDYA
  • 移动平均期
  • 一些平均值的附加参数,例如 - 对于AMA

此外,“价格穿越均线”的概念也需要明确。信号可能会在突破平均线的那一刻立即出现,或者仍然需要等待蜡烛不仅突破平均水平,而且还要收于平均水平之上。不仅代码的编写方式取决于此,还取决于在策略测试器中测试 EA 时必须使用的分时生成模式。

因此,有必要清楚地描述诸如“趋势”、“水平”、“突破”、“回扣”和“交叉点”之类的概念——它是否意味着使用分时、柱和收盘价。所有这些概念都必须有一个带有数字参数的正式描述,然后您将在策略测试器中对其进行优化。例如,可以使用ADX指标衡量趋势的强度,而Ichimoku Kinko Hyo指标不适合此。

交易系统中使用的条件和过滤器越多,交易程序就越复杂。更不用说这样的策略有很多输入参数,这需要大量的优化传递。尽管 MetaTrader 5 中的策略测试器由于遗传算法MQL5 云网络允许您将参数的优化时间加快数万倍,但在这种情况下接收的数据量却像雪崩一样增长。

因此,我们建议在开发和调试交易机器人时遵循一些规则:

  • 要直观地调试和检查信号,EA 必须在信号出现时将标签/对象放置在图表上。这不仅可以调试历史,还可以直观地观察图表上的信号。通常,算法变得如此复杂以至于即使对于制定系统规则的交易者来说也很难理解它的工作。通过信号的可视化显示,您可以立即在图表上看到开仓交易的时刻。
  • 一个更正确的解决方案可能是首先创建一个指标,使用箭头在图表上标记买入/卖出信号。这将简化 EA 的编写,因为单独创建和调试两个程序比一个复杂的程序更容易。让机器人只交易,指标只画。在这种情况下,顾问代码将避免不必要的功能。此外,信号可能比在它们上进行的交易多得多。例如,当接收到买入信号时,通常进入市场,此外,根据算法,不再检查买入信号。如果有单独的指标,它将显示所有买入信号,因为它具有显示所有信号的逻辑,无论是否存在未平仓头寸。
  • 买入和卖出信号不仅应该在参考条款中单独描述,而且最好在策略测试器中单独调试它们。通常买卖是相互关联的——也就是说,只要有一个未平仓的买入头寸,所有的卖出信号都会被忽略(当然,如果多头头寸没有被卖出信号平仓)。如果您先分别测试买入信号然后再测试卖出信号,您将能够以最纯粹的形式检查底层逻辑的正确性。

您甚至可以分别针对买入和卖出分别优化策略参数,以便稍后您可以将算法组合成一个交易机器人。因此,您花费更少的时间寻找最佳参数并减少错误。尽管在这种情况下,您将不得不为创建指标/指标和中间 EA 交易支付额外费用。但是一个好的交易想法是值得的。是不是?

信号寿命

在某些交易系统中,出现信号并不意味着立即开仓。通常,在此类策略中,需要来自附加信号的确认/许可。例如,在突破阻力位后,有必要等待价格回落至突破位,以便在最佳条件下入场。在这种情况下,出现了时间因素 - “水平被打破并等待回滚”信号有效的时间或多少根柱线。等待 5 根柱线内的回调或直到交易时段结束,然后取消信号可能是有意义的。

添加“生存时间”参数允许您引入可以提高交易信号质量的额外过滤器。

下单和开仓

在编写负责发送交易订单的函数时,提前考虑附加功能是有意义的。例如,您可以在您的交易机器人中指定不同的 MagicNumbers和评论,以进一步分析交易结果和优化结果。在 MagicNumber 中,您可以输入进入的时间和日期、交易模式的编号和其他重要信息,以便您在 MagicNumber 中包含的数据的上下文中进行额外的分析。因此,您可以在“EA 交易”中实施多种交易策略,并一次性执行一项优化。然后清除不成功的入场时间或失败的模式/信号。如果您想在 EA 交易中获得这样的功能,您必须为每个模式/设置/信号明确定义 MagicNumber 计算算法。

此外,交易指令并非总是第一次成功执行。有必要预见第一次无法开仓/平仓的情况。在这种情况下,顾问应该做什么 - 暂停或等待新的报价到达?允许多少次尝试完成交易操作?在这些情况下,EA 应该记录哪些信息?条目应该采用什么格式?是否有必要向交易者发送有关问题的消息以及如何发送消息以避免造成 DDoS 攻击?

要快速分析终端中的交易历史,请使用可写入交易请求的注释。但不要忘记,在某些情况下,交易服务器会在此字段中写入自己的信息。因此,如果您的机器人编写自己的每日交易日志,也不会是多余的,这将帮助您理清难以理解的情况。

如果您的交易策略使用止损和止盈保护水平,请提供它们的计算算法和设置它们的程序。例如,只有当价格向有利的方向移动给定数量的点时,才需要设置止损。如果 SL 和 TP 水平仅在成功开仓后设置,请指定如何检查开仓 - 在发送交易请求后立即或在下一个报价时。

维护交易头寸/订单

经典法则是“让利流,止损”。翻译成算法交易,这意味着“为每个未平仓头寸设置保护性止损,并使用止盈订单限制潜在利润。”

止损的大小会显着影响交易结果,交易者试图找到这样的最佳距离来放置 SL / TP 订单以实现利润最大化。但是所有可能的止损/止盈大小的粗略列举在历史上都是一样的。尝试使用考虑市场波动性、趋势方向和支撑/阻力位接近度的距离计算算法。

如果您不知道 SL/TP 的大小应该是多少,您可以查看现有的交易系统。许多算法交易者都有自己的现成库,可用于根据您的想法创建交易机器人。

思考并描述职权范围内的以下几点:

  • 使用 StopLoss 和 TakeProfit 水平,计算它们距离的算法:
  • 是否需要使用Trailing Stop,何时开启,以什么步长拉高,步长计算算法;
  • 如果挂单用于建仓,是否需要重新排列以及使用什么算法;
  • 是否需要跟踪未平仓头寸的浮动盈亏,达到指定盈亏水平时是否需要平仓;
  • 别的东西。

取消订单并平仓

管理仓位和订单的另一种方式也是可能的 - 通过时间和相反信号的出现。您可以在职权范围内添加额外的删除和关闭选项:

  • 根据未平仓头寸的给定浮动盈亏价值;
  • 当价格从当前挂单开仓价位移动指定距离时(实际上,这意味着该时刻已经丢失);
  • 在指定的时间点;
  • 通过给定数量的柱;
  • 在指定时间间隔结束时;
  • 当相反方向的信号出现时;
  • 当有利的设置/模式消失时。

下订单的手数计算

一些交易者在创建交易机器人时,会立即添加头寸大小控制功能。仍然不建议在 EA 中包含资金管理算法来计算初始阶段的手数,因为优化 EA 时的额外输入参数可能会导致对历史的特定部分进行调整。

如果您正在根据您的交易系统创建机器人的第一个版本,那么最好以恒定手数对其进行测试和优化。只有在对历史和真实交易进行了几个月的前瞻性测试之后,当您看到算法的优缺点时,我们才能考虑资金管理。

以下是一些计算开仓时手数大小的方法:

  • 固定数量,无论盈亏;
  • 交易量取决于余额或净值的大小;
  • 根据收到的损益结果;
  • 基于最后 N 次交易的结果(鞅和反鞅的不同变体);
  • 取决于触发保护性止损单时的风险百分比;
  • 基于风险的计算的其他选项,例如,根据Vince 方法

无论如何,在将手数计算添加到 EA 之前,您必须确保您的交易系统比随机交易具有优势。否则,你只会欺骗自己一时。一个亏损的系统不能仅仅通过资金管理变成一个盈利的系统。

处理交易错误和环境状态

由于交易机器人是每天 24 小时运行的自主程序,因此有必要提供监控和检查其工作的手段。您的“EA 交易”的“黑匣子”将是“专家”日志,其中所有消息都使用Print()函数显示。一般而言,建议在发送订单执行前在其中记录信号、形态和设置的出现、当前市场价格和交易请求参数。

如果交易请求执行不成功,应记录其结果。对交易服务器响应代码的分析将使您了解交易错误的原因并进行纠正。在职权范围内描述:

  • 进行日志条目的所有情况;
  • 每种情况下要反映的参数;
  • 所需的记录格式,例如表示时间、数字数据、分隔符等。

发送交易订单并处理其执行结果时的详细日志将为您节省时间和金钱。

新手算法交易者经常忘记的重要一点是重启终端、丢失互联网或连接到交易服务器的情况。在这种情况下,通过即时通讯或电子邮件考虑与机器人的反馈并没有什么坏处。

柱线开盘和柱线内交易的区别

... 信号可以在条形图的生命周期内消失和出现

蜱/剥头皮策略

...您需要对它是什么有一个很好的了解,TakeProfit/StopLoss 的点数越少,该策略对点差/佣金/网络延迟/可用历史的质量/机器人本身的速度就越关键。

条件的任何恶化都可能扼杀策略

网格、鞅、平均以及这些改进的缺点

...它们是什么,它们为什么受欢迎,以及它们可以在多大程度上帮助暂时扩展策略。风险增加,尽管它可能会延长糟糕策略的寿命

选择承包商时要寻找什么

...实质性问题

不假装给人留下深刻印象

给出明确的截止日期

立即指出 TOR 中不清楚的地方,而不是经过 2 个月的讨论

一个好的程序员会珍惜他和你的时间——这就是为什么他喜欢开发良好的一致 TOR

程序员不能为你做什么

将失败的策略变成有利可图的机器人

优化和识别任何缺点

编写一个没有错误的程序 - 他们仍然会。找到它们并以易于理解的方式描述它们是您的任务。