English Русский Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
如何订购EA交易,并取得预期的结果

如何订购EA交易,并取得预期的结果

MetaTrader 5交易 | 3 九月 2013, 12:02
13 327 0
Andrey Khatimlianskii
Andrey Khatimlianskii

介绍

自动交易,获得了新的动力 - 使用全新MQL5语言的MetaTrader 5发布了。它已经成功地经历了2010年自动化交易锦标赛, 并且交易平台的新版本被各经纪商积极推广。数以百计的经纪商和以百万计的世界各地的交易者仍在积极使用MetaTrader 5的前身 - MetaTrader4。

尽管有这样的人气(或更确切地说,正因为如此),平均交易者的专业水平越来越低 - 和其它领域一样,数量很少变成质量. 就自动化交易(交易和编程的结合)来说,情况甚至更糟 - 交易者很少有计算机编程的学位,并且对大多数人来说,即使是有一定技术素养,要掌握编程技术也是非常有挑战性的。此外,我们不能忘了,还有那些对编程根本不感兴趣的“我们必须做我们最擅长的” - 他们说,我不能不赞成他们的意见。

所有这些把我们逐渐带入本文的主题。MetaTrader的编程服务有需求,而这种需求将继续增长。哪里有需求,哪里就有供应 - 这是市场规律。事实上,有足够多的交易者想要自动化他们的策略,也有足够多的程序员想要通过编程服务赚钱。但是,可悲的是,他们的沟通并不总是达到互惠互利 - 有很多不满意的客户,也有许多程序员厌倦了对基本概念的解释。

本文就是解决“客户 - 程序员”的沟通过程中可能出现的问题的。首先,它的目标读者是交易者 - 他们往往缺乏与不同心智结构的人打交道的经验。但是,毫无疑问的,对于程序员,这篇文章也将是非常有用的 - 一种关系总是需要双方来建立,双方对于合作的成功同等重要。


内容

  1. 验证理念
  2. 摆脱幻想
  3. 确定目标
  4. 同步词汇
  5. 准备需求规格
  6. 选择申请者/开发者
  7. 保护自己免受欺骗
  8. 检测结果
  9. 提供评价


1. 验证理念

验证理念客户受到挫折最常见的原因是策略的亏损当它涉及到一个完整的交易系统,而不是一个半自动的EA交易或指标,交易者对专家策略的期望只有一个 - 盈利的交易。

结果,他从程序员那里收到期待已久的信,然后启动了客户端,开始测试,但看到的是他的高明理念是如何导致存款的损失,他再次验证参数,更新历史数据...再次看到存款的损失。一些交易者立即怒气冲冲地着手写信给程序员(当然实质是他的错!),一些更有耐性者继续测试结果,并尝试弄清楚哪里出问题了。但这不能改变事实 - 他们所信奉的理念结果却是无法获利的。

接下来发生的,也有几种可能。有些责怪程序员是笨拙的,不支付酬金,开始寻找另一个程序员。其他人开始狂热地试图找出解决办法,要求“一些小的变化”(当然,无偿,因为他们是如此之小!)。公平而言,我应该看到,也有客户理所当然地接受自己的过失,不要把责任推给程序员。这一章不是为他们写的,因为他们有良好的自我批评意识。

验证结果如此,抵触它没有意义,发现和消除问题的根源才更有意义。问题是,交易者都懒得去深入检查他的理念或想法。要做到这一点,需要选择任意间隔的历史数据,并仔细地,日复一日地,观察策略将如何运作,会出现什么结果。这可以在测试的视觉模式中更容易和更快地完成(我可以确定视觉模式将很快在MetaTrader5实现),但测试也可以实时完成 - 用模拟账户测试一到两个星期。

但说真的,不是所有的策略可以对历史数据进行测试。从个人的经验,我知道一些理念或想法的检测可真是费时。我明白,有时候,付钱来或获得一个EA交易程序比坐几个小时用铅笔画图更容易。但要注意,发送一个未经测试的想法来付诸实施,结果可能是一个非常令人不快的意外!

记住!程序员是不对你的策略的盈利能力负责的,他的任务是用你授予的算法写一个程序。

有时,程序员可以告诉你你的系统的弱点,(如果你不是第一个实现这个策略的),但这基于他的良好意愿。他没有义务保护你不犯错误或为你提供咨询,当然,也没有义务免费检测你的理念或想法。EA订购时,你应该要么对你的策略充满信心,要么了解,这仅仅是一个测试,其结果是不大可能令你惊喜的。

因此,我们立即得出结论,在定购一个EA交易程序来实施一个策略之前最好反复地对策略多检测几次。


2. 摆脱幻想

Escher's impossible cube我们只看到我们想看到的。我们希望在海洋中的一个岛屿有一个游艇和满满一箱子的钱。我们看图表时只看到成功的指标信号。然后闭上眼睛伴着幻觉数我们的账户上零的数目... 程序只是基于该算法,揭穿了我们的幻想。

第二个最大和最频繁的失望原因 - 是混乱和自我欺骗。如果你决定了迈出第一步来检测你的理念或想法,那就带着批判的态度开始吧。许多的不如意在这个阶段可避免 - 只需要拿掉有色的眼镜和理智地看待策略。

一个很常见的情形是:您已经在互联网(论坛,博客,在线书籍)读到有关一个策略,并决定根据它制作一个EA交易程序。看着图表,估算着它的准确性,然后认为 - “好了,终于找到了 - 它就是 圣杯!”。如果是你下载(或上帝保佑,购买)​​了策略所依赖的超级指标则情形更糟糕 - 你错误地以为,90%的任务已经完成,只有一点事情剩下要做了。

在这个时候,如果你的另一半自己问自己一个简单的问题 - “为什么这个策略位于公共域名?” (或者,如果你是付费购买到的,“为什么作者要卖它,而不留着自己使用呢?”) - 那么我的客户数量可能就只有现在的一半那么多... 但是,我们相信奇迹,并且不去怀疑!好吧,但是我不会这么做。是什么阻止了你检查你要为其花去个人钱财的策略呢?

这里有一些规则,这将有助于你避免落入你自己的幻想的陷阱,或某人的不良意图。他们可能不会解决所有可能出现的问题,但会减少你犯最常见错误的次数。

  1. 要对 没有源代码的指标高度怀疑!
    • 您将只能够少许了解它们如何工作,任何人都无法保证他们的行为在未来的不变性。
    • 它们可能潜藏各种错误 -可能导致旧信号的重新绘制的编码错误,不能在某些类型的商品或帐户上正常工作,蓄意的欺骗(在历史数据上绘制已经知道肯定成功的信号),甚或对运作时间或帐号的简单限制。

    即使你完全不明白编程,你可以随时求助一个你所认识的程序员帮你“审查”程序 - 不过要确保在定购EA交易程序之前。

  2. 观察指标在实时状态下的工作!
    • 在知道指标的实时在线运作状况之前去考察它的历史信号是没有意义的 - 因为历史信号可能仅仅是一个美好的画面(不幸的是它是无用的)。
    • 几乎所有的指标都会改变在最后一个(未完成的)柱子上的值- 这是正常的。很容易理解,这些改变并不会影响(在已固定的柱子上的)历史数据,在已完成的柱子上的指标数值不会改变。这意味着,信号(箭头或指标线/价格线的交叉)出现后只有等到下一个柱子开始后才能被系统使用(以下单)。如果我们试图(在柱子关闭之前)使用信号,在对EA交易程序的测试过程中,就会发现许多的箭头和交叉(这些都会开仓),但其中大部分在当前柱子结束时已经消失了。你会在图表上看到下单,但没有相应的信号 - 这些信号只在柱子的形成过程中出现。
    • 有些指标可能改变在前一个柱子上的值甚至改变更久之前柱子上的指标值。有时,这是一个指标的本质需要(例如,用于形成一个分形,在它的右边必须有2个柱子,又如之字形指标的最后一节可以过很长时间后重新绘制,直到确认为一个新段的条件满足),但是,这样的行为往往是一个蓄意欺骗 - 很多指标的发明只为在历史数据上画出漂亮信号(为了推销他们),但实际上它是不可能被使用于交易。

      如果一个指标,在历史数据上,总是在最底部显示买的信号,在最高端显示卖的信号,这不表示这是一个很好的指标,与此相反 - 它是在“预测过去“。

    • 不过也没有必要坐几个小时观察在线图表 - 很多指标可以通过可视化测试模式来测试。但无论如何,最可靠的测试方式 - 还是用一个模拟账户运行指标并监控它。您可以将指标加载到图表上,稍等一下,然后再次加载同一指标(使用相同的参数) - 如果它是“真实的”(不重画以前的值),那么由同一指标的两个副本画出的图形应该是相同的。如果指标的新副本显示不同的信号,那么分析其历史信号是没有用途的。

  3. 在不同的历史间隔期检测策略!
    • 经常会发生,你在不知不觉中选择一个非常有利于你的系统的历史间隔进行测试。无论是基于指标信号,网格,还是图形识别来下单的策略 - 总会有一个时间间隔内该策略会赚钱。但是,当你在所有可用的历史数据上测试EA交易程序,你会马上看到最不成功的间隔期。你自己试试吧。
    • 随机选择一些历史间隔期。例如,选择2008年1月,2009年10月,2010年8月 - 用你的眼睛扫描下,查看和计算出赢利和亏损信号的比例。尽量看看在其他商品和周期上信号的质量。如果理念或想法有个核心,它很有可能也适用于其它条件(可能使用略微不同的指标参数或止损)。
    • 不要为某个单一测试去修改系统参数如果,在8月,您使用某些指标参数,而在9月,你采用另外的参数(得到更好的测试结果) - 你只是在愚弄自己。测试应在相同条件下进行,否则你将只看到你想看到的。我不是说,必须始终保持相同的系统参数,但如果你想动态地改变它们,你必须考虑改变它们的标准。根据历史得出结论总是简单的,但谁知道未来会发生什么事情呢?
    • 寻找最复杂的历史间隔期来对系统进行测试。一些很常见的战术 - 使用通道和等待回调,并经常依次倍增仓位 - 在某些历史间隔期非常成功。但从长远来看,市场有时运行于通道之间,有时又表现出强趋势,基于通道和基于强趋势的两种系统都会间歇性地造成存款的损失。为您的系统寻找最危险的历史间隔期(对突破系统来说的一个长的震荡期 ,对基于回调的战术来说就是强势单边市),并查看在此间隔期进行交易的问题。

      并且请不要忘记-将来你可能看到更长的震荡期和更极端的趋势运动,市场是在不停地变化的。始终保留“安全边际”。

  4. 考虑额外成本(点差,库存费,手续费,预付款要求,委托订单的最小间隙)!     
    • 对于大多数长期战略,所有这些费用都并不重要,因为几个点数的误差对它们来说无关紧要。但自动交易的发展趋势显示出越来越多的小利润和高频率的策略被开发,点差增加2个点或10个点的止损水平,都足够引起重视。
    • 请记住,所有的MetaTrader(第4和第5版)是以买入价来创建图表的,而新开买单和关闭卖单是以卖出价执行的。当您在策划交易时,把点差考虑在内是不方便,但我们总是可以从总的交易结果减去交易数量乘以点差 - 这样得出的结果更接近实际情况。
    • 分析历史时,不要忘了,几年前的交易条件有很大不同。如果我们用现在的点差做计算,则剥头皮策略非常适用于1999年的“蓬松”图表。但1999年的点差比现在大3-4倍!如果我们从每笔交易中减去那个时期的真正的点差,则你实际获得的利润将所剩无几。即使在其他条件下情况也是类似的, - 几年前,最大可用杠杆为1:100,并且放置挂单的距离至少达数十个点。
    • 请记住,交易条件在新闻发布时可能会改变(当然,是变得更糟糕),订单的执行会推迟,并出现滑点。不要发明“基于新闻的历史业绩辉煌的系统”,至少要用微型真实帐户对它们进行测试。如果你以2个点的点差和即时执行交易单来评估系统,而实际情况是头寸5秒钟后才建立,并有10个点的滑点,点差扩大这么多以至很难保本关闭尺寸,则你对系统的认识有很大偏差。
    • 总是有一个跟交易条件有关的“安全边际”。如果您的系统会因为点差的微小变化或头寸建立的几秒钟的延迟而“崩溃”,则它不大可能在“真正的战斗”中存活下来。

      请记住,对大多数策略来说,交易方向的准确率接近50%,点差才是失去本金的原因。所以要尽可能地改善策略,使得点差不会对结果产生巨大影响。

如果在所有的检查后您仍然坚信您的系统,仍然想要将它自动化,那么我们就可以继续下一步。


3. 确定目标

确定目标你有没有想过,为什么你需要一个EA交易?你只是想通过策略测试来验证你的某个想法?或者,也许你想在你的迷你真实账户上尝试一个经过测试的交易策略?不,我知道 - 实际上你已经根据你的系统交易了2年, 你准备在你的拥有100 000美元资金的真实账户上马上启动你的EA交易。

这些看似无用的问题很少被问到。泛泛而言,这是可以理解的 - 因为答案只会影响一些小的方面:比如技术需求的细节,申请人/开发者的选择,也许还有完成工作的成本。但是,你仔细想想,不同方法最终导致的差异可能是非常大的。

在大多数情况下,程序员并不关心写EA交易的目的是为了对某个策略进行测试(只使用最少的检查,也不作异常处理)还是给真实账户实际使用。如果他已经使用MQL写程序有很长一段时间,并且没有任何对他的程序的稳定性的投诉,那么他很可能有实现任何交易算法的基础并且无论仅仅为了测试还是用于真实账户他都用同样的方法实现。

但是,即使你足够幸运能与这样的人共事,描述技术上的需求时你仍会感到差异。

让我用一个例子来解释:

  1. 情景一 - 你只是简单的想 测试某个策略 (这个想法可能是你在某个地方发现、听到或者看到的)。 那么意味着:
    • 我们还没有打算用真实账户运行该策略 - 无需做各种检查以及异常处理。
    • EA交易将被不断的测试和优化 - 我们需要达到最好的效果(或许这将以牺牲稳健性为代价)。
    • 最可能的情况是, 在测试过第一个版本之后, 需要对它进一步优化 - 一个EA交易应该能轻松的被扩展。
    • 算法中需要考虑的一些“瓶颈”(比如下单时是否满足离当前报价允许的最小差值,开仓以及平仓的先后顺序,最大下单量限制,网络重连后程序的重新启动 等等) 不需要处理,因为我们不知道哪些限制将在最终的版本中需要考虑并处理。

  2. 情景二 - 策略已经准备好了, 你需要一个有效的EA交易使用于真实账户。这将和上面的情景一在以下方面有所不同:
    • 所有的交易操作要尽可能的正确, 不仅仅是用户定义的变量值需要测试, 程序运行中所有计算出来的值都要被测试(比如下单的手数,止损值等等)。

      交易请求的“质量”直接影响到服务器和你账户的“关系”- 如果服务器持续接收到大量不正确的订单它可能会拒绝你的账户的请求,你将会对局面失去控制。

      如果遇到严重错误, 你必须让用户知道 (通过屏幕信息,电子邮件,Skype,ICQ或者短信息)。
    • 我们首先要考虑的是程序的稳健性,虽然它和速度性能往往相冲突 - 如果一些额外的检查能帮助预防可能的错误的产生,那么EA交易就应该加入这些检查。即使这些检查降低了测试和优化的速度(当实际运行的时候执行速度的差异往往是无法察觉的)。
    • 即使将来还需要优化,改动也是比较小的。所以对于易于扩展性方面无需再规定具体的需求。
    • 算法所有的 “瓶颈”应该都尽量被考虑到并且精确的处理。应该至少要考虑一些可能产生错误的情形并做处理(要知道非常不幸的是我们无法对各种情形做好预先处理):
      • EA交易应该能在短暂的网络中断,账户重新登录或者客户端重新启动后继续正常工作。
      • 如果你无法挂单, 无形中你需要追踪这些订单,当价格达到这些订单的价格时,按照市场价执行订单。
      • 如果你在尝试了N次之后还是无法按照市场价开仓,订单允许的滑点的最大值应该被增加。
      • 挂单一旦在某个价格成交, 这个价格不是算法提供的且带有滑点的(比如价格跳涨跳跌),那么和该订单相关的所有订单的价格(甚至还包括订单的手数)应该都要调整。
      • 所有根据存款大小进行操作的功能(比如计算交易手数), 应该能正常接受资金余额的非交易性操作(比如结算或者取现)。
      这个列表还可以列很多。像这样的小细节无穷无尽的存在,并且每个策略有各自的具体的细节。
    • 另外一些额外的需求被提出 - EA交易应该能适应不同的经纪商的平台,考虑使用各种可利用的工具,他们的具体说明,以及一些服务器其他设置(可挂单数的最大值,止损离场值,反向开仓机会(仅限于MetaTrader 4)等等)。
  3. 情景三 - 你真正准备好在一个拥有100 000美元的真实账户上使用EA交易。相对上一个情景而言会有所改变么?所有的一切都取决于你是否有妄想症(对不起,我的意思是取决于你是否有前瞻性想法):
    • 创建更多的日志文件绝对没有坏处,而常规的对屏幕截屏的保存在分析问题或者争议的时候可能是非常有用的。
    • 如果你计划在专用服务器上运行EA交易,你可以想象到这样的可能性:需要正确控制另外一个(正在并行运行的)拷贝的运行。比如,你可以同时在你的专用服务器和你家里的机器上运行你的EA交易,并且你“家里”的程序应该能在专用服务器连接中断超过5分钟以上时正确接管控制局势。
    • 如果你不能持续的监控你的EA的执行,你可以每小时(或者每天)生成报告,展示账户状态和交易情况。任何情况下都要对关键错误进行提醒。
    • 如果你想要控制交易过程,甚至当你手边只有电话也能控制,你可以实现“反馈”机制 - 能通过短信、电子邮件、Skype、ICQ或者通过设置挂单(在订单的注解中有指令的描述)给EA交易发送指令。

那么你感受到这些区别了么?以上只是这种方法的简单一瞥,其中每一个要素都可以被再挖掘,无限扩展。还有很多细节我们都没有提到呢!

在对这些细节探讨之后,有一点逐渐清晰,就是真正决定算法具体细节的是EA交易目的以及客户的需求。

不幸的是,期望程序员对所有细枝末节都有质量的实现是不可能的,如此的质量标准是不存在的。因此,想清楚你需要EA交易到底做什么,考虑清楚在不同情形下程序应该如何行为,以及确保在技术需求说明里把这些明确下来。

任何有自尊的EA开发者都会加入简单错误(需重新报价,无效止损值等等)的标准化的处理。但是我们无法保证这个“标准行为”对于你要求的交易策略是合适的。

比如如果可能设置止损值是经过计算出来的某个值 - 其他订单或者一系列正在运行订单的最大损失可能依赖于这个值, 那么把止损值设置为正好是当前价格加上或减去允许的最小差值的某个值,就不总是最好的方法。所以再一次提醒,如果你在为真实账户创建EA,要尽可能多的在你工作的准备阶段就考虑各种情景。

你可以总是要求程序员准备一个清单,列出可能的情形,并开发处理各个情形的算法。但是不要忘记分析和提炼你的策略,包括算法的创建,这些和写EA交易并不直接相关。这是工作中独立的的一块,并且这部分工作的成果不是EA交易最终的代码,而是程序算法的文字描述。一些程序员对这部分工作可能提出比较合理的额外的收费-因为他在付出他的时间,而你获得的尽管只是中间半成品,但依然是一个阶段性的成果,你可以拿着这个半成品给另外一个程序员实现最后的代码。

此外不要忘记不是所有的程序员都有真实账户的编程经验。基本上他们不可能知道所有可能的意外情况。一个程序员绝对不可能已经和所有公司共事过,不可能处理过各种类型账户,不可能用过各种可利用的工具,不可能遇到过各种不同的市场状况。共享你的经验(如果有的话),邀请程序员共享他的经验,但是不要以为这样你就能确保处理了各种意外情况了。不幸的是,这不现实的。

我们已经接近最关键的部分了-技术需求的准备,但是在这之前我们要先做个小的偏离。


4. 同步词汇

在你进行对话之前,要明白你在和谁交流。“电话的另一端”可能是一个完全和你不一样的人,他拥有的知识和你的很大的不同。

朝着共同的目标前进是一件不是那么令人愉悦且困难的事情,直到你们“同步了词汇”(找到大家都能理解的共同语言,明确各个条款)。在你看来,最基础的事情可能会导致很多困惑,以至于一个简单的EA交易的开发工作很容易转变成了花费很多天(甚至是星期)的精力来理清头绪从而确立合作关系。

让我们看一个小插曲。

假设你需要更换你的水龙头。你打电话给水管工,说:“我把我用来洗脸的东西搞坏了!我是想换一个新的,这个新的我用一只手就能打开。听起来挺傻的,不是么?但是相信我,一些交易者提出的任务需求看起来更加愚蠢!

现在站在水管工的立场上。是的,他大概理解发生了什么,但是他对该“任务”根本就无计可施。要理解你到底想要什么样的水龙头除非能心灵感应。

让我们尝试另外一种方式。你打电话并说:“我的浴室需要一个新的水龙头。热水管和冷水管的直径都是13mm,水管到水槽底的距离是20cm。必须用一个手柄就可以调节水压以及温度。需要提供几种型号以供选择。

你成功啦!现在水管工知道:a)你需要一个水龙头手柄;b)一个手柄就可以控制2个阀门;c)需要将水龙头连接到长20-25cm直径为13mm的软管。当他到达你家,他将能够提供你几种方案由你选择,并能迅速开展他的工作。

许多MQL程序员,在交易方面是真正的知识渊博的-他们和客户沟通的越多以及编写的EA交易越多,他们越能理解各种分析方法的千差万别。另外,他们当中的许多人为他们自己开发策略程序,所以他们已经研究了不少交易类的文献并且参加了各种主题论坛。

但是不要苛求从他们那里得到太多!你可能每天生活用到的短语“展开fibo-将它与最近2个fractals在网格上对齐”可能会让一个没有经验的技术人员目瞪口呆。用通俗的词汇如“在锁触发以后……”或者“当伦敦市场开市的时候,设置止损值在保本价”,并且准备好客户端软件- 这样你就能保证较长的询问和澄清时间。

我的意思不是说常见的词汇”MA“就一定是”平滑周期为36的均线技术指标“-不要盲从。但是时刻要记住你正在交谈的对象的知识背景是不同的,视野也是不同的。

作为中间成果-一些小秘诀:

  1. 用简单易懂的词解释给自己听,不要用缩略语和专门术语。
  2. 使用普通术语。如果你不知道如何称呼一个工具或者事件,使用参考资料或者教科书上的叫法。
  3. 把事情彻底详细的解释清楚。甚至讨论你认为很显而易见的事情。事实证明往往那只是对你一个人而言是显而易见的,对别人未必!
  4. 最后,要确保其他人明白你要的是什么。问些基本问题,或者让他用他自己的语言描述下任务-确保你们正在讨论的是同一件事情。

亲爱的同事们,EA 程序员们!如果你错误的认为前述事项只是和交易者有关,那么我会很快让你失望!我们,作为有技术能力的人,有责任去修正整个过程中的错误。并且更大程度上,我们是对项目的成功是要承担责任的。

很少交易者能够把任务精确正确的描述清楚- 这是事实。根据我6年写EA的经验,我记得只有2个客户描述的任务真令人震撼-这些任务描述已经很接近程序,只要简单的翻译成mql语言即可。另外有几个客户,我能知道他们要什么,他们能清晰表达他们的想法 - 而在读了他们的算法后我能清晰的知道未来的程序应该如何运行。但是大多数客户 - 初级交易者,他们不仅害怕清晰描述EA的行为,而且一听到“算法”这个词就感到畏惧。

努力将自己变成一个小小的心理学家 - 确定你的合作伙伴的水平,并且用和他的水平相当的词汇和概念。不要把你的智慧强加于人,要足够宽容。如果可能,不要讨论编程的细微差别,别人不需要知道循环是什么,柱子从哪里开始计算,以及在什么情况下执行将订单信息保存到文件的函数。

这并不意味着必须要像儿童讲话般那样和客户交流,以及只要有一点分歧的迹象就要重写EA。不可能!但是如果你尝试让客户感觉到你不仅是个好的技术人员,也是一个令人愉快的健谈的人-他肯定会非常欣赏这一点的。

我们最终到达最关键那部分-创造算法。好吧,让我们开始吧!


5. 准备需求规格

准备工作

你的堂表兄弟姊妹们,可能从来没做过交易,但仅仅凭你准备好的算法他们就应该能利用你的系统来交易。

这个只稍做改编的典型情景非常清晰的论证了一个好的技术规格应该具备的质量:

  1. 人们无需借助其他帮助就看任务本身就能完全理解(对于你的系统完全一无所知的人也能理解)。
  2. 任务描述尽可能详细具体(一个在交易方面没什么经验的人也能理解)。

“和交易毫不相干”这样的描述实在是太绝对和夸张了点。确实,除了向一个人解释系统的本质是比较困难的,解释如何交易以及使用客户端的基础知识也不容易。我让我自己再一次面对这样的典型情景:

你的堂表兄弟姊妹们只是在两个月前安装了MetaTrader软件,而且一直以来只是用模拟账户做交易……剩下的大家知道我就不说了。

但是这并不会影响系统本身!如果你把你的算法程序给10个不同的人,并让他们利用你的这个系统做交易,那么他们交易的结果肯定都完全一样。你们有多少人能够因为有这样的经历而感到荣耀和自豪呢?


5.1. 我们应该从哪里开始?

我们将从头开始。描述大概想法,告知你想要的是什么。不要忘记你自己的目标以及程序的需求,现在我们要阐述它们了。

只有在对你和你的系统大概了解之后,程序员才能够评估你的想法的严谨态度,并评估出大概需要多少工作量。

以下是一些例子:

我们需要一个MetaTrader 4的指标。 任务是 - 在主要图表的子窗口画出任意货币对的反转图。指标应该展示4位和5位小数报价,并带有一个非标准的交易品种名称(比如EURUSDFXF)。

我们需要一个MetaTrader 5的EA交易。只对一个货币交易,交易信号是基于自定义指标(该指标代码见附件)。触发止损/止盈或当一个反向信号出现时平仓。所有头寸基于另外一个指标(该指标代码可提供)设置移动止损。根据账号余额的百分比计算下单手数。.
做所有必要的检查,网络连接失败后恢复正常操作,尝试一些带有错误的开仓,以及其他一些措施--你可以根据你的判断来自由决定加入哪些细节,而这些对最终将EA交易(MetaTrader4)用于真实账户是必须的。
我们需要一个EA来测试一个有关通道突破的策略。用指标来计算通道的边界;通过挂单的方式进场,如果这次交易亏损出局后,要根据指定的系数提高下次开仓的手数。你应该还要指定一天中的工作时间,在这个时间内才允许下第一个单。另外MetaTrader4程序的代码我们已经有了。

任务开始的这部分是最不难的。但是不幸的是,往往任务刚刚开始就结束了... 不要忘记,这部分只是一个介绍,大概想法的描述。要写一个程序我们还有很多要做。


5.2. 我们怎样制定任务?

事实上,算法是最重要的部分。创造算法是最难的(尤其是对非程序员而言),这需要大量艰苦的工作。

尝试立刻把算法分拆为一些子逻辑部分,不要尝试用一句混乱的句子表达算法所有的细枝末节。

当写EA交易的时候,我们可以从如下子逻辑方面来分析(他们的编号和内容可能因策略不同而不同):

  1. 基本条件:工作时间(数日内,在每周的哪几天),执行顺序(比如按键即开始交易),是否需要回归测试,以及其他和整个任务(而不是某一点)相关的条件。

  2. 首次入场信号(开仓或者设置第一个挂单)是以某种价格形态即指标、时间或者用户的指令为依据的。这可能也包括各种首次入场的限制条件(过滤器)- 时间限制,依赖另一个指标的限制,在连续多次亏损之后如何,遇到不可接受的交易条件(点差过大或止损过小)时如何,或者可用资金不足时如何等。开仓手数以及止损止盈值的计算方法应该分别详细说明(如果所有头寸的计算规则都一样,我们也要把他们拆分成独立的项)

  3. 对挂单的触发或者头寸止盈/止损的触发的后续处理(如果必要的话)。比如,当一个Buy Stop的订单触发了就要删除掉之前一起挂的Sell Stop的订单,当前一个Sell Limit订单触发了就再挂一个新的Sell Limit订单,当前一个订单止损了那下一个开仓的手数就翻番,等等。

  4. 加仓(如果已经有了头寸)或者设置新增挂单(如果有必要)的信号。比如,另外依赖一个指标产生的信号,或者当某个头寸达到了止损或止盈价格时触发加仓或者新增挂单。这里必然会需要一些规则来计算交易手数以及止盈止损值(如果这些规则和上面描述过的不同的话)。

  5. 头寸和挂单的跟踪(一个一个的分别处理,或者如果规则一样的话就一起处理)。比如,修改挂单使其接近市场价(如果市场价格朝相反方向变化),对头寸的移动止损(通常由指标或者其他方式触发),当获取了一定的利润之后部分平仓,等等。

  6. 平仓(全部或部分)或者反向操作的信号,以及删除挂单的规则。

  7. 普通条件,比如和账户状态相关的一些信息--当预付款下降的百分比达到某个指定值,或者当账户金额增加到某个值时平掉所有头寸并停止程序的运行。这些条件用于第一点,但是放到后面(按照使用顺序)比较容易描述他们。

  8. 最后,可能还需要主图上的一些额外的信息,为标注头寸开仓/平仓价位而画的箭头,日志里的详细信息,挂单触发时发送的电子邮件,以及任何其他和交易无关但是是界面展示的信息。

如果我们正在谈论一个指标,那么现在一方面逻辑更加原始更加简单了,一切都容易多了,但是另一方面还是有很多的细节需要注意。

大概纲要如下所示:

  1. 提供需要的数据:待分析的工具的列表(如果有几个的话),所有使用工具的历史数据的深度,时间周期,以及交易服务器的时区。
  2. 提供需要的图形类别(线,信号箭头,蜡烛图,ZigZag中的节段,几何图形等)。
  3. 提供计算第一个值(左边柱子的值)的算法,如果和主算法不同的话。
  4. 如果获得单独一个柱子计算公式困难的话(比如Zig-Zag指标中的计算就是这样),提供为单独一个柱子计算值的基本算法或者计算过程的描述。
  5. 以及如果需要的话提供令人愉快的补充:声音提示,截屏保存,电子邮件的发送等。


让我们从理论走向实践,并完成上面我们举过的一些例子任务:

我们需要一个MetaTrader 4的指标。 任务是 - 在图表的主图口画出任意货币对的反转图。指标应该展示4位和5位小数报价,并带有一个非标准的交易品种名称(比如EURUSDFXF)。

  1. 设置的时候,指定工具名称(symbol(交易品种)参数),并显示这个名称(比如 "GBPUSD_m")。如果没有指定,就使用加载该指标的图表的商品作为交易品种。如果在"市场报价”窗口中没有指定商品,需要弹出一个对话框提示错误信息。
  2. 指标应被绘成日本蜡烛图。上涨和下跌蜡烛柱的颜色以及影线(上下影线分别设置)的颜色必须设计成输入参数。
  3. 每个柱子的OHLC值的计算采用下面公式:
    • Open (indicator) = 1 / Open (symbol );
    • Close (indicator) = 1 / Close (symbol);
    • Low (indicator) = 1 / High (symbol);
    • High (indicator) = 1 / Low (symbol).
  4. 在所有“四舍五入值”(比如1.3200, 1.3300, 1.3400, 1.3500, ...)价位上(这个“四舍五入值”是对4位小数的最后2位取整后的值),你必须要画一个水平线(样式和颜色应被设计为输入参数)。
下面是一个有点难度的EA交易:

我们需要一个MetaTrader 5的EA交易。 只对一个货币交易,入场信号是基于自定义指标(该指标代码见附件)。触发止损/止盈或当一个反向信号出现时平仓。所有头寸基于另外一个指标(该指标代码可提供)设置移动止损。根据账号余额的百分比计算下单手数。.

  1. 开仓信号- iSignalArrow 指标 (所有指标参数可被调整)的箭头:
    • 如果前一柱子上的指标箭头(在图表下方)朝上则建立多单
    • 如果前一柱子上的指标箭头(在图表上方)朝下则建立空单
    • 忽略当前柱子上(还未结束)的箭头,只分析已结束的柱子。
  2. 头寸交易量根据当前余额的百分来计算:Lot = Balance/MarginRequired * LotPercent/100 其中:
    • Balance - 当前账户余额;
    • MarginRequired - 开1手头寸所需的预付款;
    • LotPercent - 输入参数 (计算手数的百分比)。
      比如,当LotPercent = 5, 杠杆是100倍, EURUSD的开仓手数 (当前价格是1.3900) 就是: 10 000 / 1 390 * 5 / 100 = 0.3597所得结果按照通常规则进行四舍五入(如果DC允许下单手数精确到0.01则四舍五入为0.36,如果下单手数最小单位是0.1则四舍五入为0.4)。
  3. 止损(SL)和止盈(TP)- 是固定值,由参数设置。止损止盈
    • 设置水平是4位小数报价的点数;
    • 水平的计算和开仓的价位有关(开仓价对多单就是买入价(Ask price),对空单则是 卖出价(Bid price));
    • 如果设定值太低,则应将其设置在最小允许值的水平;
    • 如果设置为0,则没有止盈止损。
  4. 所有头寸根据 iTrailingLine指标 设置移动止损 (所有指标参数可调整):
    • 如果是多单 并且指标线低于当前价格,则止损移动到指标线的价格水平;
    • 如果是空单 并且指标线高于当前价格,则止损移动到指标线的价格水平;
    • 指标值取自已结束(绘制)的柱子,而不是当前柱子(未结束)。也就是说,止损在一个柱子的周期内至多修改一次;
    • 止损值移动方向只允许是头寸产生盈利的方向- 对于多单为向上而对空单则为 向下
    • 如果止损不能设置为指标线水平,应将其设置为最小允许距离(但必须遵循前面的朝盈利方向移动的规则);
    • 移动止损功能也是可配置的 (AllowTrailing = true/false 参数)。
  5. 如果有一个持仓,现在产生了相反的信号,那就必须平掉持仓,并且(在相反方向)新开仓。
    新开仓的手数的计算必须是在平掉之前持仓之后
  6. 其他方面:
    • 当运行EA交易的时候,应该加载要用的指标并设置好指定参数;
    • 开仓/平仓信息以及SL的修改应该都被记录到日志;
    • 如果有错误产生,则必须将描述错误的消息展现给用户。

算法以这样的形式发给程序员-它包括了系统的足够具体信息并且很容易“翻译”成MQL语言。但是不要急于订购程序,要深思熟虑到最后。


5.3. 什么是必须牢记的?

什么是必须牢记的?一个基于某个算法写出来的程序在理想条件下将运行得很顺利 - 比如在一个独立的客户端,只用一个账户登录,没有用户或者其他程序的干预。

这样一个理想环境的例子就是 - 交易策略测试工具,这个环境中没有网络连接中断错误,没有意外平仓,并且没有其他EA交易在运行。但是我们日常生活中,这样的环境是几乎没有的,程序很可能将受“外在世界”影响。

你可能想让同一个程序的多个拷贝运行在不同的交易品种上,或者运行在同一个交易品种上但是设置不一样,你可能会重启客户端,可能手动交易或者用其他EA交易自动化交易,从同一个客户端登陆到不同的账户 - 如果算法没有处理这些情景的话,以上所有一切都会影响到程序运行。

如果你的目标远不是只是利用交易策略测试工具测试下程序,那么立刻描述下程序与外界交互的规则吧:

  1. EA交易应该如何对 人工建立的头寸或者其他EA交易建立的头寸做出反应呢?通常人们会有以下三种选择:
    • 完全忽略所有”其它“头寸。如果程序是“自足”的,那么其他EA交易或者用户自己的交易行为不应该影响它。
    • 只处理“人工”建立的头寸。如果一个程序被设计成依赖人工建立的头寸,那么它将不会对其他EA交易建立的头寸形成干扰,而且一般它不自己建立自己的头寸。它的目的是帮助人工交易(移动止损,根据信号平仓等等)。
    • 更加普遍的方案是让用户选择:仅仅只处理程序自己建立的头寸,或者是处理满足特定条件的头寸(比如专门针对某个交易品种或者带有指定Magic Number的头寸)。

    在MetaTrader 5中,区分是“它们自己的”还是“其他程序的”交易是非常有意义的 - 客户端只显示交易品种的总的头寸,虽然这些头寸是几个不同的EA交易建立的。考虑所有交易(多个EA在同一个交易品种上正常操作)的实现更困难,所以价格更高。和申请者/开发者核实下,EA交易是否要和其他程序在一个交易品种上共同正常工作。

  2. 如果登陆到另外一个账户,EA交易应该如何应对? 在真实账户运行是否需要一些特殊设计?
    我认为很多交易者“扩大”损失的原因仅仅由于疏忽 - 比如意外登陆到真实账户,启动一个正运行着EA交易的客户端, 或者仓位尚未关闭而改变EA交易的参数。在算法中考虑这些意外那么这些荒谬就可以简单的避免了。
    比如:
    • 当你在真实账户运行EA,应该在主图上创建一个按钮来控制是否允许交易。程序应该只有在用户点击了这个按钮之后才开始工作。
    • 当你用另外一个账户登录,EA应该提示用户正在切换账户并且停止工作一直到重新触发才开始继续工作(一个可选择项 - 询问用户是否继续运行EA程序)。
    • 如果存在EA建立的头寸(或者设置的挂单),当外部参数改变的时候,EA应该能遵循算法的设计而修改头寸(挂单)- 比如,如果止损值改变了,我们需要修改所有头寸的止损,但是仅仅限于止损值还没有被设置的移动止损修改过的头寸。给出一个通用方剂是不可能的,每个参数应当分别描述。另外,当同样的参数变化时不同的策略采取的处理也是不一样的。
  3. 是否需要运行同一个程序的几份拷贝 ,而这些拷贝的参数是类似(或完全相同的)?
    如果EA交易通过修改某参数的值多次引用了同一个指标,并绘制出图形对象,那么所有这些对象的名称中必须包含这个参数的值 - 否则后面引用指标绘制的图形对象就会覆盖前面引用指标绘制的对象。
    对于EA交易,通常使用一个特殊参数 - ExpertId或者MagicNumber,从而使你能够使用不同的参数多次运行EA。要在任务中明确需要使用哪些设置或者哪些设置的组合来同时运行程序,并不是所有的情形都要由程序员考虑并提供支持。
  4. 应该如何实现将EA迁移到以同一账户登录的另一个客户端上呢?EA交易能将一些数据保存到文件里或者保存在客户端的全局变量中么?
    大多数程序是绝对无需保存中间数据信息的,它们的算法是基于货币对的历史数据以及账户的交易历史数据(这个数据可以从任何已经登录的客户端得到)。但是我们常常需要将一些信息保存到文件,在下次启动的时候再从文件获取这些信息 - 有时候这将能加快程序运行速度,而有时候如果没有这些信息的话是无法实现一个可用程序的。告知程序员你对于EA迁移的流程的任何特殊需求,或者只是请他们描述下对于你这种情况的特殊处理流程。

不幸的是,程序员不可能提供所有这些细节。比如,如果EA(由于其他EA所开的头寸导致)没有足够的预付款来正常开仓,那么你必须要么忽略该信号要么将开仓手数降低。

如果其他EA占用了交易上下文(只是在MetaTrader 4中),你的EA将不能交易。如果有挂单最大量的限制,那么新的挂单也无法成功。然而,如果大多数这样的例子已经在你的算法中被提及,那还不至于太糟糕。多积累经验吧,你的EA将会越来越好越可靠。


5.4. 我们怎样使描述理解起来更容易?

如果描述的好那么信息将更加容易被理解。

为了理解一个策略,有文字描述也足够了,但是如果你的系统是不同一般且复杂的,那就多采取一些措施来帮助程序员:

  1. 为你的任务附加一些截屏,将你的算法的各个不同要点描述清楚(信号出现的时间,移动止损的范例,挂单的操作顺序等等)。毫不犹豫地提供带有简单注解的图表,即使已经和文字描述中的一部分重复了。
  2. 采用雅致的形式将任务文本格式化 :为 多单 以及 空单使用不同的颜色,高亮化外部变量(你希望能够设置的参数),给 重要之处 以及公式做标记。这样除了文本更加容易被阅读之外,也更加利于在文本中浏览和定位信息。
  3. 说明。 任何以具体数字描述的公式 会更加清晰明了。
  4. 为算法的段落以及子段落编号 - 这样在讨论的时候可以总是引用这些段落编号。“在2.1.4的错误”比“在描述计算第二个多单的止损值的地方有一个错误”要简短并更加精确。


5.5. 文字,语音或视频?

文字,语音或视频?当某个客户发给我一个链接,这个链接指向某个论坛的有关某个策略的120多页的讨论,或者一个70页的书,或者一个半小时的视频课程的时候,我总觉得很滑稽。确实,程序员拥有大把时间,无需照顾什么 - 他们将花费时间研究这些链接... 事实上,这些信息的有用部分只是半页的算法,或者是,描述随意很不规范。而这样的事实却不能引起人注意。

如果你已经研究过材料,如果你理解了它的内容,如果你很了解该交易策略怎么样工作 - 就将算法规范化吧!去除“废物”(通常占据了80%的信息),令人尴尬的断句,无关的讨论,关于美好未来的故事,观察测试结果后发表的言论 - 申请者/开发者将仅仅接收到他为写程序而真正需要的信息。

但是如果你还不知道书或者课程描述的是什么,如果你不确定是否具备足够的信息完成一个完全自动化的交易系统,那么换一个方式问问题!当你有一个交易策略的时候你可以只是问“基于此策略写一个EA交易程序需要花费多少成本?”。

在我们这个案例中,只有一定数量的信息。它的质量(是否容易规范化,是否足够详细等等)还未知。所以随时询问程序员是否有兴趣研究这些材料“来获取想法” ,如果他没兴趣,那就问他将花费多少成本从“冗长的讨论”中来提取出一个交易系统完备的规则。相信我,问题的形式本身就能反映出你和申请者/开发者之间的关系。

不是所有的程序员都会对读上多页的论文或者一些策略的讨论感兴趣 - 他们有足够的自己的想法需要验证,所以根本不需要新的信息。

不是所有人都想看一个教程谈论怎样画趋势线以及趋势线在交易系统中的角色,恰恰相反人人感兴趣的是他们喜爱的电影。教程经常让人感觉枯燥无味,而更加糟糕的是,它很难被规范化。有时候你必须照着字面意思重新塑造(找到最合理的解释),有些需要猜测或者通过实验来选择,一些问题你需要探索并研究额外的资料。总之,这个过程是相当艰苦同时又具有创造性的,不要低估了这些。

我想单独提及那些喜欢通过Skype或者电话交流的人。通常,你希望口头描述你的策略不仅仅是因为你不愿意采取额外的行动(在键盘上打字),而更糟糕的是因为就是作者自己也缺乏对策略的理解

基于猜测和作者的直觉建立一组交易规则是不可能的,而组织一个感人和凌乱的故事也是非常困难的。还是拿那个长视频教程的例子来说,程序员并不总对听那些“启示录” 感兴趣的 - 即使听了也是因为为了写程序他需要一个算法,并且有些人尽管不感兴趣但是他必须要写程序。

怎么高估现代技术的重要性也不为过 - 他们使我们在语音或视频交流时,可以向对方展示自己显示器上的画面,从而更容易理解。但是,如果有东西需要讨论的话,对话会更加高效 - 把您的想法规范地在纸上描述出来,然后在讨论的过程中,增加一些小的澄清到已描述好的文本,就能制定出一个全面的任务来。

你应该能从以上描述中得到以下结论:

如果你可以将一个想法描绘成一个清晰的策略算法 - 那就你自己描绘并只提交给程序员一些必要信息。
如果将策略规范化的过程非常复杂且需要大量工作 - 那就不要指望程序员会免费为你完成这个工作。

我希望现在你已经很好的理解了任务到底是什么,而我们也该讨论如何选择一个专门的任务执行者了。


6. 选择申请者/开发者

选择执行人当需要选择一个程序员时,如何进行选择至关重要。每一位客户都想以尽可能少的费用获得最好的产品。他们的理想是软件由最好的专业人员免费编写。他们在昂贵的专业人士和初学者之间周璇以求实现这个理想。

当您为第一个工作的实施选择开发者时,我建议您以如下的标准进行评估:

  1. 公开的编写 iMQL4/MQL5 程序的经验。
    如果EA开发者一周以前进入这个市场,他也可能一周之内离开。当然具有两年经验的“职业开发人员”也可能会突然消失,但是这个概率低的多。与开发者失去联系不仅可能导致不能再次订购,而且将会导致:
    • 缺乏后续的技术支持(没有完美无误的软件,只有没经过良好调试的程序);
    • 做最小的改进都变得复杂(采用其他人的代码通常比较麻烦,所以另一个开发者哪怕对程序做很小改动,都可能会索取高额的费用。)

  2. 真实客户的反馈。
    实践是检验真理的标准。如果一个人写的程序被大家实际使用了,就意味着程序是可行的。否则,您总是会有机会从反馈中发现他缺乏专业。
    如果您打交道的朋友曾经使用过某个程序员的服务,请征求他们的的意见 –至少您可以据此预期一下结果。

  3. 是否经常在线。
    没有人喜欢为了一个回复等候多天。对于一些人,甚至2个小时的等待都觉得太长了。
    观察一下这个人 – 他是否经常“在线”,是否能快速的回复消息。通过对这个人的观察,你将来可以节约大量的时间。

  4. 联系方式
    现在通过互联网有各种各样的联系方式:电子邮件,发送即时消息,语音视频聊天软件,互联网论坛短信等。一些人习惯用其中的某个方式,而另一写人习惯其他的方式。尽管安装多个程序没有任何问题,但是一些人可能不愿意这样,他们觉得这样没有必要。所以为了进行良好的联系,您需要选择一种彼此都感到舒服的方式。
    如果您需要即时联系(例如用Skype),询问一下您的开发者他是否能够做到。特别是如果你想打电话或者见面,那么就要事先预约 – 不是每个人都接受“下线”后还要工作。

  5. 合作协议
    下订单之前有必要搞清所有的合作条件:
    • 通过“工作”服务能否开展工作? 对这个问题的肯定答复是所有其他条件的前提。
    • 需要预付费用吗?如果需要预付,金额是多少?
    • 程序如何进行测试?您能得到演示版本吗?
    • 你能得到程序的源代码吗?如果可以得到,那么什么时候能拿到 – 是付款之后还是就在付款的时候?
    • 谁将拥有程序的发布权?
      调查程序员的诚信似乎不太可能。但还是有必要严正声明这一点:如果他不断被怀疑卖EA或算法给客户,他将名誉扫地。
    • 技术支持的时间有多长?有哪些条款?会免费解决程序固有的错误(与算法有出入的)吗?作一些小的改进的费用是多少?
    所有的这些细枝末节应当在交易之前讲清楚,一旦开始交易就很难再做这些事了。

  6. 付款方式
    开发者用的是哪种电子支付系统?可以通过银行转账或者信用卡支付费用吗?
    请务必对现金支付的要求进行确认- 互联网上有各个国家的人,他们不是人人都用俄罗斯卢布的。

  7. 性格
    如果您不单单只是找个人合作,而是要找一个固定的合作伙伴,请尽量弄清楚你们的性格是否相投。相互先打个交道,说下您对另一方的要求,谈下您的世界观、处事原则,以及您的缺点(您可以做一定程度上的自我批评)。
    你也可以 - 尝试在第一次选择的时候就下订单,并且在这个过程中搞定所有一切。但是也可能后来发现所选的合作伙伴与刚接触时相去甚远。

  8. 工作成本.
    最后但并非最不重要的,我不相信一个人认真写一个程序只收取$10,但我也不会为此付$1000 – 所以我得权衡考虑再做决定。从一方面看,价格体现程序员的专业度,而另一方面,也取决于他的兴趣和工作强度。不要希望花5美元就能得到一辆“梅赛德斯”,但也不要为了一辆“别克”付出过多金钱。


我们之前不断提到“程序员清单”的话题 – 这份清单包含了能够从事编程工作的一些专家的联系方式和用户对他们的评论。已经有独立 论坛用户 或对本主题漠不关心的人创建这样的清单 - 我自己尝试在mq14.com网站中的文章"An Expert Advisor Made to Order. Manual for a Trader (定制EA交易。交易者手动进行)" 中描述了这个列表将帮助程序员做首次订购的选择。

但是就在几年之前,是没有这样内容广泛且不断更新的列表的。我们可以一起再一次尝试建立这个人员列表。我认为对此的讨论不在本文的范畴。


7. 防止被欺诈

世界上有各种人,会出现各种的情况。就算是最值得信赖的EA开发者们也可能会工作还没有完成就消失了,而最有责任感的人也会迫于压力违反协议条款。为避免这些不必要的麻烦 - 使用 "工作" 服务吧!

为了满足自动交易策略开发日益增长的需要,2010年年中MetaQuotes Software Corp.软件公司 发布了一个全新的服务,其主要目的是搭建客户和开发者之间的桥梁。时至今日,仅用了6个月时间,这个服务已经被普遍接受,并且每天都有很多交易员和程序员在使用。

关于这个服务的更多信息可以从论坛中的 官方文档 以及 本文的如下描述中获得:

MQL5.community的 "工作" 服务和其他网站上大多数类似的资源和服务的主要不同之处在于其安全性。它确保客户和程序员在整个共同工作的过程中,不会遭受对方的不负责任的行为。当发生纠纷时, MetaQuotes Software Corp.软件公司将承担仲裁人的角色。

尽管这个服务非常完备和严谨,但是在使用时还是会出现问题。通过下面列出的一些简单规则,大部分的问题都可以避免:

  1. 在产生一个新订单(如果您是交易者)或是实现新订单(如果您是程序员)之前,请确认已经阅读了服务条款。 许多纠纷的产生源于对规则的误读或误解。. 如果有不明白的地方或是你觉得模棱两可的地方,那么就在 工作讨论询问一些需要阐述的问题 - 很有可能你提出的问题将会使规则变得更加简单和直接。

  2. 当您订购了一个EA交易,请提供一个清晰的算法。
    本文中有几个章节的内容都是关于这方面的,所以这里就不再重复了。

  3. 挑选价钱合适,有充足时间完成任务的能够胜任的开发者/程序员,不要妄想有“免费的午餐”- 没有这样的好事。
    看一看开发者的工作业务量和已完成工作的评价。确信他没有那么繁忙于其他工作 – 很有可能他会因此而不能按时完成您的订单
    请记住 第二步(需求协商)完成后,完成算法的时间就指日可待了– 流程细节没有什么规范可循,而工作进度则仅取决于您和程序员。

  4. 所有的讨论都使用 "工作" 服务的消息功能 - 只有这样当仲裁的时候它们才能作为凭据。
    即使您通过ICQ或Skype进行联系,也尽量将讨论中所有重要的部分在工作服务中的注解中“记录”下来。

  5. 跟进相关工作的进展(无论是客户还是执行者):定期查看你的个人消息,允许将通知发送到你邮箱,或者将你的手机号码写到你的简介中以便接受短信通知。
    如果你没有保持跟踪工作进展,它可能因你的缺席而关闭,而且是以不利于你的方式 - 它可能因为 过期 而被另一方强行关闭。

除此之外,再除了开发者将为 "工作" 服务付少量的流程管理费用,该服务的使用和那些无中介参与的工作没有区别。


8. 检测结果

最后一步是测试已经完成的工作。 您必须认真仔细并且彻底的对程序进行测试,以确定程序能够按照被认可的算法运行。

  1. 各种不同条件下测试:包括各种类型的账户、各种货币对、各个时间周期,以及各种参数的组合-程序应当在每种情况下都能一样的正确执行。(如果没有在算法中明确指出其他特殊情况)。

  2. 不光在策略测试工具中测试程序,而且要在模拟账户上测试程序。交易策略测试工具能够帮助您快速发现显而易见的错误,允许您在不同的历史时段内测试策略,并且在线测试能够显示程序在接近真实情况下如何运行。您可以对程序进行”特殊“操作-如重启客户端,连接不同账户,运行其他的EA交易或者指标,运行过程中改变设置-最好在这个阶段了解程序在不同情况下的行为特性。

  3. 将EA交易的行为与 认可的算法进行比较,而不是与您预期的系统收益率作比较。. 如果在测试过程中,比较的结果是算法有错误,请做必要的更改并告知开发者对EA交易系统进行修改。但是开发者可能会对此收取一定费用(特别是对一些重大的改进),算法错误不是他的错误。

如果您发现了问题,报告给申请者/开发人员:

  1. 指出程序运行有错误的部分(或者程序发生出错的地方)。
    如果很难找到具体的逻辑不合理的地方,那么就用你自己的话解释这个问题,但是尽量不要与算法问题偏离太远。

  2. 说明在何种条件下进行测试:
    • 附上保存了程序设置参数的文件(点击EA交易“选项”窗口中的“保存”按钮);
    • 指定所使用图表的货币对和时间周期;
    • 指定该终端连接的服务器地址和账户类型(模拟账户、真实账户、竞赛账户,或其他);
    • 指定客户端的构建版本(点击“帮助”菜单—“关于”按钮)
    • 如果你用交易策略测试工具进行测试,那么指定该工具的设置(测试周期,执行类型和模式,初始金额,杠杆比率)。

  3. 附上截屏来描述问题;

  4. 如果问题涉及建仓或平仓,复制策略测试报告的摘录或账户历史的几行信息;

  5. 附上EA交易的日志文件(在客户终端“专家”选项卡或智能交易测试界面的“日志”选项卡的快捷菜单中选择“打开”)。

程序员的知识越多,发现并确定问题就会越容易。希望通过这些过程的说明,你能够准确的知道你需要做什么。在交易员平日忙碌的工作之余,与他人分享一下你的经验吧。


9. 提供评价

提供评价

MQL是一个正在成长的社区,你是其中一分子。

请记住你是如何选择一个程序员的,如何准备你的首要任务规格 - 在这个过程中获得过什么帮助??请分享您的经验!

写出一个清晰的流程,使它成为一个范本。帮助新手形成正式的策略或展示它是不可能的- 拯救另一个圣杯求职者,免其遭受希望的崩溃。

讲述你与程序员交往的经验,指出他们的长处和短处,描述你最喜欢什么地方,以及还存在些什么问题。这将花费你10分钟,但却可以节约后来交易者大量的精力和金钱。

我欢迎任何有建设性的意见,并对这篇文章的任何批评将不胜感激。如果您认为某些段落需要修改,有什么缺失的,或者相反,有什么多余的 - 请告诉我吧!

这篇文章旨在为书写 Job 描述而提供帮助,但是,实际上它包含了很多相关内容。我非常希望该文能让读者觉得浅显易懂,开诚布公,且真正对读者有所帮助。如果您目前已经看过本文,请用一点时间提供您的反馈给我们。您宝贵的意见将会使本文更加完善,谢谢!

针对EA交易软件开发人员的一些疑虑,我想说明的是本文是应MetaQuotes软件公司的要求而写的,其目的不是为我的服务项目做广告,而是帮助培养一种客户和程序员之间关系的文化。

我希望您作为一名真正的专业人士能够支持这一倡议,并帮助我们将整体业务提高到一个新的水平。我期待您的意见和建议。


结论

自动交易一个接一个新的发展动力还在持续。如何发展以及发展到何种程度取决于我们。

现在让我们创造一种友好文化吧!您将很快从高效的EA交易序中获益。

本文由MetaQuotes Ltd译自俄文
原文地址: https://www.mql5.com/ru/articles/235

EA 交易中的限制和验证 EA 交易中的限制和验证
是否可以在周一交易此交易品种?是否有足够的资金用于开仓?如果止损触发,损失有多大?如何限制挂单数量?交易操作在当前柱上执行还是在前一柱上执行?如果交易机器人无法执行此类验证,则任何交易策略可转为带来损失。本文说明在EA交易中有用的验证示例。
使用MetaTrader 5作为MetaTrader 4的信号提供者 使用MetaTrader 5作为MetaTrader 4的信号提供者
分析并通过技术实例说明怎样在MetaTrader 5平台上做交易分析而在MetaTrader 4上做交易。本文将展示如何在您的MetaTrader 5上创建简单的信号提供者,并且把它连接到多个客户端,甚至包括运行MetaTrader 4的客户端。而且您也可以发现怎样在您的真实MetaTrader 4账户中跟随自动交易锦标赛的选手。
MQL5 初学者:EA 交易技术指标使用指南 MQL5 初学者:EA 交易技术指标使用指南
为在EA 交易中获得内置或自定义指标的值,首先应使用相应函数创建指标的处理函数。本文中的示例说明了在创建自己的程序时如何使用技术指标。在本文中说明的指标使用 MQL5 语言构建。本文的目标受众是那些在交易策略开发上不具备太多经验的读者,并旨在通过使用提供的函数库提供简单明了的指标使用方式。
如何将MetaTrader 5中的交易复制到MetaTrader 4 如何将MetaTrader 5中的交易复制到MetaTrader 4
如今,在MetaTrader 5的实盘帐户上进行交易是否可行?如何进行此类交易?本文不仅从理论上解答这些问题,同时还提供可用的源代码,让你能够把MetaTrader 5终端上的交易复制到MetaTrader 4。本文对EA交易的开发者和练习交易者都非常有用。