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