交易机器人是根据底层算法运行的程序。 算法是响应某些事件从而执行相应的一组动作。 例如,算法交易中最常见的任务是识别 "新柱线" 事件。 当事件发生时,机器人检查出现的交易信号并相应地采取行动。
在您决定编制或订购交易机器人之前,您需要制定一个具有明确规则的交易系统,根据该交易系统定义执行交易操作的有利时机。 任何交易系统的开发,以至最复杂的交易系统,都从基础开始,例如定义买卖交易信号。 进而,您还可以添加各种选项来管理和完成交易。
您不需要有多年操作交易终端的经验,就可以制定交易策略。 您可以从网上提供的数百种经过验证的创意当中进行筛选。 即使您不确定自己的编程能力,这也不是障碍。 自由职业 服务将帮助您找到合适的开发人员。
以下是推荐文章,您可以在继续使用算法交易技术之前阅读这些文章:
在订购或开发交易机器人时,您需要制定需求: 机器人要执行的任务,操作的条件,对事故和紧急情况的响应,所需的控制方法等。 交易机器人是程序,会严格遵循底层逻辑。 为了编写动作算法,您应该准备详细的描述。
交易策略的描述以需求规范的形式提供。 您提供的详细信息越多,您 (客户) 和程序员 (订单开发人员) 之间就会更少产生误解。
智能交易系统需求规范的重要部分是明确表述的正式交易规则。 即使您并未订购智能交易系统,只是想自己开发一套,您也应该从定义这些规则开始。 准备需求规范并包括智能交易系统的测试/优化相关点。 添加假设,您将使用这些假设来检验交易策略的品质和稳定性,描述选择最佳参数的准则并解释您认为其很重要的原因。
将所有智能交易系统的开发阶段包括在需求规范中 — 这将使开发人员明晰算法思路,并帮助您在数周,数月甚至数年之后回忆其详细信息。 算法交易不是一个业余爱好,而是一条深入的探索路径,其中所有阶段都需要妥善记录。 每当您需要测试新思路时,交易系统开发日记将非常有用。
以下是开发 MACD 样本 智能交易系统的需求规范示例,可在 MetaTrader 5 标准包中找到。
1. 交易系统的思路如下: 当 MACD 的主线和信号线在当前趋势方向上相交时入场。
2. 趋势 基于指定周期 (InpMATrendPeriod) 的 指数移动平均值 来判断。 如果当前 EMA 值大于前一个,则趋势被视为增长 (ema_current > ema_previous)。 轮替者为,如果当前 EMA 低于前一个,则趋势被认为是下跌 (ema_current < ema_previous)。
3. 交易信号:
4. 平仓 依据相反的信号: 买入持仓由卖出信号平仓,卖出持仓由买入信号平仓。
5. 开仓 则是当新柱线出现时,按市价执行。 智能交易系统将使用开盘价进行测试,因此无需添加柱线内禁止操作的函数。
6. 用于开仓的附加过滤器:
MACD 主线的绝对值将用于滤除弱信号: 仅当该值大于 open_level (以点数为单位) 时才能确认信号。 信号确认条件如下:
7. 用于平仓的附加过滤器:
MACD 主线的绝对值也将用于确认平仓: 如果该值大于 close_level (以点数为单位),则确认信号。 平仓信号确认条件如下:
8. 由止盈平仓 — 在开仓时,止盈价位设定在与开盘价固定距离的价位,以点数指定。 该值在 InpTakeProfit 输入参数中设定。
9. 仓位管理
TrailngStop 用于保护利润。 如果盈利点数超过 InpTrailingStop 参数中指定的数值,则设置止损。 如果价格继续沿盈利方向运动,则止损应在给定距离处尾随。 止损不能向亏损方向运动,即不能增加亏损值。 如果没有保护订单 (止盈或止损) 触发,则该笔持仓应由相反的信号平仓。 没有其它持仓离场的方法可用。
交易理念
在需求规范第一部分中描述一般底层思路。 举例: "如果价格接近阻力位两次并从其回退,则下次可能会突破阻力位"。在此处,您可以添加带有阻力/支撑线,指标和解释性说明的图表。 想法描述中不需要确切的数字或计算算法。 因此,在这个例子中,我们不需要解释如何判断:
初始阶段一些抽象将有助于关注这一思路而不是技术细节。 这样,您可以通过替换或组合策略模块,指标和过滤器来生成交易策略的多种修订。 通用的一般思路,您将为您的交易机器人使用不同的输入参数。
接下来,您需要描述思路中包含的所有术语和概念。 如果趋势对您的策略很重要,请明确定义应使用哪个指标来确定趋势方向和强度。 这些定义的数字特征构成了智能交易系统的 输入参数 的基础,并可在策略测试器中进行优化。 因此,需求规范的第一部分是 "交易理念"。
术语和定义
建议在需求规范中创建单独的部分,以解释相关的术语和定义。 在单独的段落中解释术语。 使用 粗体字 突出显示交易策略的关键概念。 如果合适的话,您可以添加图像。 所需智能交易系统的输入参数可用斜体字书写。
交易信号
这是需求规范中最重要的部分。 它提供了交易条件、市场状态和指标值的描述,在这些条件下,应该执行买入交易。 为了描述生成买入信号所需的每个条件,请选择影响信号出现的数字参数。 例如,对于 移动平均值,它可能是平滑类型和周期。 这些重要参数将用作智能交易系统的 输入参数。
提供单独的卖出条件描述,即使它们与买入相反。 这也许有特别效果,程序员可能会误解。 例如,您的买入条件可能设置为"Value > 0"。 确保指出卖出的确切条件,例如 "Value < 0" 或 "Value <= 0"。
附加条件和过滤器通常用于确认或取消交易信号。 通过各种市场状况的屏幕截图作为指标和设置的 直观 说明。 将来,当您的智能交易系统忽略了看似明显的信号,或在不利的时刻执行交易时,这种直观可以帮助您分析情况。
截图和流程图
您可以使用任何免费的程序来创建屏幕截图和流程图。 有关选择哪些程序以及如何使用它们的提示,请参阅 如何创建订购指标的需求规范 一文。 此外,该文章还提供了订购生成买卖信号箭头指标的建议。 这种指标与智能交易系统分开运行,可以在实时操作和可视化测试中更轻松地检查和监控您的交易机器人。
信号/订单/持仓的生存周期
交易策略的第二个重要部分是持仓离场和删除挂单。 交易信号也可以在一段时间后,或在特定事件下取消。 因此,您需要描述多头/空头仓位的平仓,删除挂单或取消信号的条件。
持仓和订单的管理
如果您的交易策略意味着以止损和止盈了结,请描述计算算法。 可选项,您可以请求尾随机制以便灵活地修改这些价位。 在这种情况下,您需要描述尾随止损的条件和算法。 止损/止盈的修改可以在柱线开盘时,或每次逐笔报价时执行。 在需求规范中指定所需的选项。 此外,一次逐笔报价和根柱线选项会影响策略测试。 请务必阅读文章 基于真实的逐笔报价上测试交易策略。
一份不良的需求规范草案或其缺陷,通常是由于交易系统规则尚未制定。 因此,客户称之的交易系统实际上只是一个念头。 在开发过程中就会暴露出所有瑕疵和缺少所需的逻辑描述。 开发人员必须考虑客户未提供的可能选项。
在这种情况下,开发人员也许要自行承担开发交易机器人的风险。 但是您可能会花很多时间讨论每个可能的问题。 如果由于缺乏正确的描述,机器人的行为与客户的期望不同,此类订单也许会发送到争议仲裁。 客户经常指责开发人员对机器人进行了错误的编程。 但是,争议仲裁的判决将基于需求规范。 根据 自由职业者规则,在争议期间不会考虑任何其它回应:
有时,客户可能有明确的交易规则,但由于某些原因可能无法创建需求规范。 问题可能会出现在正确的描述,数学公式,神经网络或机器编程相关的发行者以及其他方面。 在这种情况下,可以订购需求规范的创建。 这可以在自由职业服务的 "编程建议" 或 "其它" 部分中完成。
选择其中一个类别,创建名为 "为交易机器人订单创建需求规范" 的订单,并指定工作的初始成本。 经验丰富的交易系统开发人员将帮助您以清晰易懂的形式描述您的策略规则。 使用屏幕截图展示基于您所用的图表、指标和图形对象来生成的交易信号设置。
程序员将尝试了解您的交易系统并帮助您准备交易算法的描述。 如果您无法表达任何概念 (例如,"动量" 或 "从级别反弹"),程序员可以根据他的经验提出已有思路的建议。 作为一条规则,任何市场状况均可以通过具有变化参数的一些简单模型来逻辑性 (然后是可编程性) 地描述。 这种变化可以用某个参数表示,稍后您可在智能交易系统中进行优化。
完美的形态不存在,因为市场永远不会重复。 但是,从历史当中可以找到类似的情形。 您的合作应该产生一个就绪的需求规范,您可以使用它来订购交易机器人。
通常,交易系统包含一定数量的描述市场状态或价格行为的关键概念或术语。 即使您认为在需求规范中使用了普遍接受和简单的概念,也可以提供更好地更清晰的描述。 每条术语添加一个描述段落。
例如,根据比尔·威廉姆斯的说法,当所有三条鳄鱼线从下向上按照以下顺序出现时呈现上升趋势: 蓝色,红色,绿色。
另一个经典的上升趋势定义由 拉里·威廉姆斯 提出: 每个新峰值高于前一个峰值,每个新低谷都不低于前一个低谷。
您还可以在术语描述中使用图表屏幕截图。 对需求规范中的 术语 使用粗体字体,以便帮助程序员必要时在文本中找到它们。
不要使用其它资源 (例如网站,出版物,论坛主题等) 的地址链接来替代解释。 所有要点的完整详细说明应直接提供在" 需求规范" 中。 花点时间来描述所有使用的术语 - 这将节省机器人的开发时间。
在创建订单时,描述您的交易思路的一般本质,以便潜在的开发人员了解您的需求。 请勿在订单描述中披露您的交易系统规则或指标详情。
可能的描述如下所示:
开发一款趋势逆转时交易的智能交易系统。 逆转信号基于价格行为形态生成。 趋势将基于 ADX,鳄鱼和 MACD 确定,而指标选择应在智能交易系统的输入参数中提供。
您可以提及交易的品种,趋势识别细节和其它信息。 对于遵循趋势的智能交易系统,请指定入场方法 - 在回滚期间,在突破或其它方法。
一般来说,有两大类型的金融交易策略: 期望走势延续,或返回平均值。 您的交易思路应该与这两种类型中的一种相关。 解释应如何开立交易: 市价,确认突破/回滚之后,或在更合适的价位。
使用算法可以很容易地描述简单信号。 例如,流行的简单形态包括 "吞噬" 和 "针尖柱线"。 然而,实际上不可能基于这种简单的形式创建盈利的策略。 这些形态只是用于判断趋势反转点。 存在上升趋势时设置等待下跌吞噬形态。
因此,除了描述交易信号之外,您还应该在需求规范中解释适当的设置。
当满足某个条件时,会出现买入或卖出信号。 例如,当价格超过移动平均线时,会出现经典买入信号。 您应在此信号描述中指明以下参数:
此外,"价格与移动平均线交叉" 这一短语需要解释,因为它并不像看起来那么简单。 信号可以在交汇的那一刻出现。 或者,您可以选择等待烛条突破均线并在其上方收盘。 这会影响您的智能交易系统代码,以及在测试期间使用的 逐笔报价生成 模式。
所以,您需要清楚地解释趋势,级别,突破,交叉和类似的概念,即依据逐笔报价,空头和收盘价操作之间进行选择。 提供正式的描述和数字参数,以便您在策略测试器中进行优化。 例如,可以使用 ADX 指标衡量趋势强度,而 Ichimoku Kinko Hyo 则不适用于此目的。
交易系统需要的条件和过滤条件越多,机器人就越复杂。 此外,复杂策略通常含有大量输入参数,这在优化期间可能需要大量通行测试。 虽然 MetaTrader 5 策略测试器允许通过运用 遗传算法 和 MQL5 云网络 来为优化时间提速,但结果数据的体量也将是巨大的。
所以,我们建议遵循一些 EA 开发和调试规则。
此外,您可以单独优化策略的买入和卖出参数,然后将算法组合到一个交易机器人中。 这样,搜索最佳参数将以更少的错误更快地执行。 不过,在这种情况下,您需要为创建指标和智能交易系统中间件额外付出。 但是这对于一个优良的交易理念是值得的,不是吗?
在某些交易系统中,信号出现后不会立即开仓。 这种系统可能需要附加的信号进行确认。 例如,在突破阻力位后,您可能要等到价格回到突破价位,以便在更好的条件下入场。 您应在此处定义时间参数: 价位突破信号的有效时间长度。 系统也许等待 5 根柱线或直到交易时段结束,之后信号被取消。
添加生存期参数以便使用其它过滤器,这可以提高交易系统品质。
在开发发送交易订单的函数时,您可以提前提供其它函数。 例如,您可以使用不同的 MagicNumbers 和注释,以便将来的交易和优化结果 分析。 您可以根据入场时间和日期,交易形态编号和其它详细信息来使用 MagicNumber,以便进行其它分析。 因此,您可以在一个智能交易系统中实现多种交易策略并全部优化,以便为您的交易机器人找到最佳参数。 如果您要请求此类功能,请描述每个形态/设置/信号的 MagicNumber 计算算法。
交易订单并非总是成功执行。 有必要提供首次尝试开/平仓位期间失败情况的应对。 EA 应如何处理这种情况: 暂停还是等待新的逐笔报价? 允许尝试多少次? 应该将哪些信息写入日志? 应该以什么格式编写信息? 是否应该向交易者发送通知? 多久发送一次消息以避免 DDoS 攻击情况?
在交易订单中使用注释,以便快速分析交易历史。 有时,交易服务器会向此字段写入特定注释。 因此,您的机器人可能还要在日常交易操作日志里写入自己的内容。
如果您的交易策略使用保护性止损和止盈价位,请描述其计算和放置方法的算法。 例如,只有当价格在盈利方向上移动到指定的点数时,才能设置止损。 如果在成功开仓后设置止损和止盈,请描述检查开仓的过程 - 发送交易订单后立即设置,亦或下一次逐笔报价之后。
交易者的基本规则: 砍掉亏损,让您的利润奔跑。 在算法术语中,这意味着您应该为每笔持仓设置保护性止损,而不去限制盈利单的潜在利润。
停止订单大小会极大地影响交易结果。 通常,交易者试图找到最佳的止损/止盈距离以便利润最大化。 考虑市场波动性,趋势方向和支撑/阻力价位,尝试找到计算距离的算法。
您可以研究现有的交易系统,来找到合适的止损/止盈思路。 许多程序员都有现成的函数库,能在基于您的想法创建交易机器人时使用。
考虑并描述需求规范中的以下几点:
另一种仓位和订单管理方法基于时间和相反的信号。 您可以描述其它平仓和删除选项,例如:
一些交易者在创建机器人的第一阶段包括了计算交易手数的算法。 但是,建议不要在此阶段包括用于计算手数的资金管理算法,因为在 EA 优化期间,额外的输入参数可能会导致基于历史数据的过度拟合。
使用固定手数能更好地测试您的第一个 EA 版本。 只有依据历史数据进行前瞻测试,并加上几个月的真实交易才能让您彻底掌控算法的弱点和优势,之后您可以添加资金管理方法。
以下是计算开仓手数的一些方法:
在任何情况下,在向智能交易系统添加计算手数的算法之前,请确保您的交易系统优于随机交易。 否则您只是欺骗自己而已。 只有通过资金管理方法,才能将亏损的系统转化为盈利的系统。
交易机器人是一种自主程序,每天 24 小时运作。 所以,要提供控制其操作的机制。 您可以使用 Print() 功能将智能交易系统的操作写入流水账。 通常,建议在执行 发送订单 之前记录出现的信号,形态和设置,当前市场价格和 交易请求 参数。
如果交易请求执行失败,则 其结果 也应写入日志。 分析交易服务器 返回代码 以便了解失败的原因并进行修复。 在需求规范中描述以下内容:
交易订单和执行结果的详细日志将令您能够快速识别交易错误并节省您的资金。
算法交易的新来者经常忘记的一个重点就是终端重启,以及互联网或服务器断线。 在这种情况下,您可以通过 消息传递功能 或电子邮件发送通知。
每次价格变动时,机器人都会通过 OnTick() 函数开始处理 NewTick 事件。 在一根柱线的生存期内可以接收很多次逐笔报价,因此 EA 将在每次进入柱线时执行其逻辑。 如果您的策略仅在柱线开盘时产生信号,那么您需要确定以下内容:
我们来分析一个简单的例子: 移动平均线交叉处的信号。 如果您的 EA 在每次逐笔报价时检查信号,则可能存在信号先出现然后又消失的情况。 因此,EA 将在一根柱线内多次开/平仓。 这可能会在网上交易中引起问题。
为避免此类问题,请在 "每次逐笔报价" 或 "基于真实逐笔报价的每次逐笔报价" 模式下测试智能交易系统。 如果您在一根柱线中看到许多类似的操作,那么修订您的机器人代码。 确保执行智能交易系统的 可视化测试 并使用指标,直接在图表上检查不同历史间隔的操作。
如果您是初学者,请在新柱线开盘时选择系统操作。 这样的策略更容易开发和调试,而您只需要正确处理 新柱线 事件。 您可以在开盘时检查智能交易系统的正确性: "仅开盘价" 中的测试结果必须与 "每次逐笔报价"/"基于真实逐笔报价的每次逐笔报价" 模式中的结果相匹配。
在柱线内操作的交易系统更加困难。 我们建议阅读 如何在 MetaTrader 5 中快速开发和调试交易策略 一文,其中包含基于持续逐笔报价流的分析,创建、调试和优化策略代码所需的所有步骤的描述。
在开发剥头皮机器人时,请注意这些策略对点差,佣金,网络延迟,历史数据品质和执行速度极为敏感。 交易条件的任何恶化都可以令这种策略 "致命"。
不要将尝试快速入场并保证获得小额盈利的剥头皮策略,与所谓的扛点策略混淆。 扛点策略可以目标几个点,并容忍数十和数百点的缩水。 这类系统的开发人员认为,价格在开仓价位方向上移动若干点的概率大于逆向移动 50-100-300 点。 通过优化,他们可以在历史数据上取得令人印象深刻的成果,90-99% 的交易胜率。 当您在真实账户上运行此机器人时,该策略可能会在一段时间内展现预期盈利。 但市场可以在某个时刻爆发急剧行动,所有赚到的盈利都将付之流水。
有时,算法交易者试图通过增加一个方向的订单/持仓数量来改善结果,并根据价位/缩水/亏损 (技术解决方案) 操纵手数,而不是去提高信号品质 (策略解决方案)。
以网格,正/逆马丁格尔 (翻倍加仓) 和亏损持仓摊薄等技术形式令代码复杂化,并增加了程序出错的概率。 而且,这些附加参数增加了过度拟合的风险。 使用这些方法不会增加交易系统的稳定性或盈利能力,而只是延迟崩溃。
我们建议您选择其它方式,而不是使用此类技巧:
与具有多个可优化输入参数的复杂系统相比,简单交易系统组合将更能抵抗市场变化。
因此,您希望以智能交易系统的形式实现您的交易系统: 您已经在自由职业版块中创建了一笔订单,并从不同的开发人员那里收到了应用程序。 如何在成本和质量方面选择最佳的开发人员?
有经验的开发人员不会告诉您先前开发的系统或交易系统变体的复杂性,但会询问有关 您的 需求规范的问题。 换句话说,他不会视试图给您留下深刻的印象。 专业人士爱惜时间,所以他们通常不会在关于交易性质或编程困难的哲学讨论上浪费时间。
除了提供的简短描述之外,开发人员可以要求更多细节。 如果订单通常是明确的,程序员将提供订单成本和时间的信息。
负责任的开发人员将在您的需求规范中指出不明确的要点。 如果您的订单缺乏细节,您可以稍后与程序员澄清,以及支付咨询服务,增加订单的时间和成本。
一个优秀的程序员爱惜时间,所以他会尝试澄清不明确的要点,以便使用清晰、准备齐全的需求规范开工。
尽管您已手工检查并确保该策略有利可图,但基于您的系统定制的交易机器人仍有可能会在测试期间显示亏损。 原因在于客户只是在短期内使用手工检查了系统。 策略测试器能够在任何可用历史区间得到交易结果。 在这种情况下可以做些什么? 程序员无法依据失败的策略造出盈利的系统,但他可以提出一些改进入场品质的想法。 例如,您可以加入一些趋势,交易量或其它过滤器来规避假信号。
此外,您的策略运行不同的参数组合时,可能会更好地适用于其它特定条件的行情。 优化 EA 以便研究针对年份,波动率和其它依赖性因素的最佳值。 这将有助您辨别系统的弱点或限制。 但是您必须自己来做这些事,因为开发人员只是代码程序员,而不是交易系统分析师。
最后一部分涉及程序员的错误。 开发一个没有瑕疵的程序几乎是不可能的。 这些可能包括代码错误,为正确算法编写了错误代码,以及逻辑错误。 在这些情况下,您都必须自己找到它们。
这三条规则将帮助您分析情况,并与开发人员沟通。
本社区仅针对特定人员开放
查看需注册登录并通过风险意识测评
5秒后跳转登录页面...
移动端课程