香港:
  • 纽约:
  • 伦敦:
  • 东京:
  • 悉尼:
  • 香港:
  • 新加坡:
首页> 资讯> 最新 >正文

【0基础学mql4 EA编程】第三单元3-2- 交易函数 -订单创建和管理

William 2024-06-05 18:38:39 关注
学习和使用4个订单管理函数,了解开仓、止盈止损、平仓过程。

文章来源:123财经导航 | william

在上一期,我们认识了交易函数和常量当中的订单信息获取方式,这是在一个EA中非常重要的一部分,也是不可缺的一部分。那订单信息从何而来?比如止盈止损怎么修改?这就到了今天的学习内容,4个重要的函数:

  • OrderSend();订单发送
  • OrderModify();订单修改
  • OrderDelete();挂单删除
  • OrderClose();持仓单平仓

发送订单 OrderSend()

用于发送新的交易订单
语法/函数结构:

参数说明:

  • symbol: 交易品种
  • cmd: 交易指令,可以是以下6种当中的任何一种
  • volume: 交易手数
  • price: 开仓价格
  • slippage: 最大允许的滑点
  • stoploss: 止损价格
  • takeprofit: 止盈价格
  • comment: 订单备注
  • magic: 订单魔术号
  • expiration: 挂单有效期
  • arrow_color: 订单箭头颜色

返回值:
大于0 表示下单成功,-小于0表示下单失败

实践:
在这个实例中,我们首先定义一个开仓的手数,使用NormalizeDouble函数对该值进行规范化处理到2位小数的手数值,另外是注释和魔术数。对于止损和止盈我们留空,如果你需要在开仓时就带上固定的止盈止损,可以设为你想要的止损值。止盈止损的计算方式在下一个函数中解读。
此时我们按照上面学到的函数结构,分别填入对应的参数(11个),这个订单发送逻辑就创建好了。

我们一起来看下效果!

Damn!!有没有注意到,这样会无限下单,显然是违背正常开单的,那怎么办呢?当然是根据你实际的使用,比如产生某个信号时,再使用 OrderSend()函数,也就是对下单的频率进行限制,不要任由该函数持续性的执行。


订单修改 - OrderModify()

用于修改已经存在的订单属性,对于挂单,包括止盈止损以及价格和挂单过期时间;对于市场订单,可以修改其止盈止损。必备条件必须有明确的订单号,比如我要修改某一个订单的止损,首先得通过遍历订单的方式找到该订单的单号,该函数才能执行具体操作。
语法:

参数说明:

  • ticket: 要修改的订单号
  • price: 修改后的开仓价格(市场单不能改)
  • stoploss: 修改后的止损价格
  • takeprofit: 修改后的止盈价格
  • expiration: 修改后的挂单有效期
  • arrow_color: 订单箭头颜色(可选)

返回值:
true - 修改成功,false - 修改失败。

止盈止损的基本逻辑图解:
下图为多单的止盈止损示意图。止盈顾名思义就是在顺着订单的反向设的值,等价格达到理想盈利价位后自动关闭订单;反之,止损则是在订单的后方设置一个不利于订单发展的价位,以预防造成更多的亏损。对于设置止盈止损的反向,多单和空单正好相反。
而规范化价格的函数NormalizeDouble(),最后通过以给定的止损点位计算,将得到一个标准化的止损/止盈价,因为单独用点位来设置盈损是行不通的。这里给大家普及一个概念如下:

  • 原始盈损点:整数,相当于价格当中的大点价值1,比如1.00528的价格如果直接设置100点将变成101.00528,。
  • 实际止盈价:浮点数,相当于价格的小点价值0.00001计算(根据品种而定),比如1.00528的价格如果设置100点将变成1.00628。

(以tp:300,sl:100计算的盈损示意图)

实践:
以下实例同样是无条件对当前货币的多单进行止盈止损的设置,设置前使用了几个判断条件过滤订单以满足要求,也就是只处理满足条件的订单,判断成立后自动执行。填入参数时,一定要反复确认参数对应位置是否和语法一致。


关闭订单 - OrderClose()

功能:用于平仓已经存在的订单
语法:

参数说明:

  • ticket: 要平仓的订单号
  • lots: 平仓数量
  • price: 平仓价格
  • slippage: 最大允许的滑点
  • clr: 订单备注颜色(可选)

返回值:
0 - 平仓失败,false
1 - 平仓成功,true

实践:
对于持仓订单,在没有设置止盈止损、或者在满足其他条件的情况下,我们可以使用该函数来进行平仓操作。另外在上一期文章中,我们提到了的反向循环:在平仓的时候,如果使用正向循环遍历,此时假如有正在开仓的订单出现,那么可能导致平仓不彻底,因为循环开始的时候是从当第一个订单开始(排序0),如果有新订单进入,循环还是会继续,但新订单再次把顺序【0】刷新为自己,这就会导致最后一个订单被忽略掉,为了避免这种情况发生,我们使用反向循环遍历处理平仓。
实例中,我们定义一个时间点作为平仓条件,达到这个时间,如果一系列条件都吻合,那么就执行平仓,如果平仓失败会打印错误信息。


删除挂单 - OrderDelete()

功能:用于删除已经存在的挂单
语法:

参数说明:

  • ticket: 要删除的订单号
  • clr: 订单删除备注颜色(可选)

返回值:

  • true - 删除成功
  • false - 删除失败

实践:

对于删除挂单的函数,参数很简单,用法和平仓相似,只需要遍历到订单号即可删除所有满足条件的挂单。在示例中,最后一个条件为if(OrderType()>1),也就是订单类型大于1,既为挂单。挂单类型大家可以反复查看文章口头中的订单类型介绍图。大于1的包括3456,自然也就包含了所有挂单类型。如果要对错误信息处理,可以参照平仓里的错误判断信息编写。

本章知识点:

  • OrderSend();订单发送 - 无需循环遍历即可执行下单
  • OrderModify();订单修改 - 需要循环遍历获取原始订单号
  • OrderDelete();挂单删除 - 需要循环遍历获取原始订单号
  • OrderClose();持仓单平仓 - 需要循环遍历获取原始订单号
【免责声明】123财经导航所发布的信息内容仅供交易投资者参考,并不构成投资建议“据此操作,风险自担”。网站上部分信息内容及图片来自于网络/注册作者/投稿人,版权归原作者所有,如有侵权,请您与我们联系关闭,邮箱:938123@qq.com。
第三方账号登录
第三方账号登录
第三方账号登录
  • *站点:
  • *网址:
  • 类型:
  • 联系方式:
  • 简介:

  • RRH123欢迎您的加入!如有问题请添加咨询管理员【微信号:938123】
  • *类型:
  • *问题:
  • 图片说明:
  • 联系方式:

  • RRH123感谢您的反馈!如有问题请添加咨询管理员【微信号:938123】