第五节 交易函数下单及挂单

交易函数也算是MT4平台的独特函数了,也是最关键的一类,我们写程序最终还是要落到交易上的,那么下单和挂单的函数就必不可少。

1下单

打开帮助文件,我们可以看到交易函数还是有蛮多的,这节课我们先不讲这么多,我们完成一个目标就可以了,那就是做好开单和挂单。

开单和挂单我们都采用OrderSend()函数来执行,首先我们试一下在当前品种开一个市价多单,代码如下:

void OnStart(){double lot=0.01;int huadian=10;int ticket= OrderSend (Symbol(),OP_BUY,lot,
MarketInfo(Symbol(),MODE_ASK),huadian,0,0,"MQL4 Lesson",1000,
0, clrAliceBlue);}

可以看到OrderSend()函数是个比较复杂的参数,它有十一个参数,给大家讲解一下这些参数都是什么意思。

第一个参数,是品种的名称;

第二个参数是开单的方式,如果是市价单,那么用OP_BUY或者OP_SELL,如果是突破单则用OP_BUYSTOP或是OP_SELLSTOP,如果是限价单则用OP_BUYLIMIT或者OP_SELLLIMIT;

第三个参数是开仓的手数;

第四个参数是开仓的价位,如果开市价多单,那么开仓价为买入价就可以了;第五个参数是滑点,如果滑点超过了这个数值,那么订单是不会成交的;

第六、第七个参数分别是止损、止盈价位,如果是0则表示不设置止损止盈;

第八个参数是订单的注释,可以备注开单的原因等等;

第九个参数是魔术号码,这个号码非常重要,一般来说EA是通过这个号码来识别它开的订单的,所以一定注意不同的EA一定要用不同的魔术号码来管理,否则会造成管理的混乱而产生亏损;

第十个参数是持续的时间,一般不怎么用,所以设置0就可以了;

最后一个参数是颜色,这个指的是开单后在图标上显示开单位置的那个箭头的颜色。

我们运行一下脚本,如下图,可以看到我们成功地开出了一个0.01手欧美的多单,备注是"MQL4 Lesson",没什么毛病。

2分批下单

在我们做下单的程序时,我们肯定也会想到一些问题,比如说单子手数很小,小于平台的最小手数限制,或者反之单子大于了平台最大单子的限制怎么办?

对于手数很小的单子我们没有办法,只能给一个输出提示一下,毕竟如果强行用最小手数的话有可能会出问题,因为有些品种的最小手数是1手,盈亏会很大,所以不建议当手数小于最小手数时采用最小手数下单。

那么当手数大于最大手数时,我们就得把这个单子拆成几个单子来下了,其实也不难,采用for循环就可以轻松做到,下面是一个例子:

void OnStart(){string sym= Symbol();int huadian=10;double lot=0.001;double maxlot= MarketInfo(Symbol(),MODE_MAXLOT);double minlot= MarketInfo(Symbol(),MODE_MINLOT);double amount=0;double lot_last=0;int i;int ticket=0;if (lot<minlot){Print("手数太小");return;}else if (lot>maxlot){amount= MathCeil(lot/maxlot);lot_last=lot-(amount-1)*maxlot;for(i=(int)amount;i>0;i--){if (i!=1){
ticket= OrderSend (sym,OP_BUY, maxlot,
MarketInfo(Symbol(),MODE_ASK),huadian, 0,0,
"MQL4  Lesson",1000,0, clrAliceBlue);}else{
ticket= OrderSend (sym,OP_BUY, lot_last,
MarketInfo(Symbol(),MODE_ASK),huadian, 0,0,
"MQL4 Lesson",1000,0, clrAliceBlue);}
}}else{ticket= OrderSend (Symbol(),OP_BUY,lot,
MarketInfo(Symbol(),MODE_ASK),huadian, 0, 0,
"MQL4 Lesson",1000,0, clrAliceBlue);}}

上例中,我们把这个品种的最大手数赋给了maxlot,把最小手数赋给了minlot,如果开单的手数在maxlot和minlot之间,那么我就直接开单。

如果开单的手数比minlot小,那么我们就输出“手数太小”,不开单。

如果开单的手数比maxlot还要大,那么我们就求出这个大订单需要拆解成多少个小订单,并把订单数量存放在amount这个变量中,上例中的MathCeil()函数是向上取整的意思。然后我们计算出如果按最大手数来开单,最后一单应该是多少手,比如说我要开70手而最大订单数是50手,那么我应该开50手+20手,最后一单的手数是20手。这些都做好后用for循环开单就行了。

我们开一个0.001手试一下,运行结果如下:

可以看到程序输出了“手数太小”。接下来我们调整手数,将lot调整为0.01,可以看到我们开出了0.01手的订单。

最后我们试一下开1200手订单:

可以看到程序自动将1200手订单拆成了2个500手的单子和1个200手的单子,运行结果没有问题。

在以后的模块编写中,这一部分内容将非常重要。

3挂单

挂单其实和下单区别不是太大,不同之处在于单子成交的价格和挂单的类别。比如说我现在想在欧元美元1h级别的上一根K线最高价以上10个点挂一个0.1手的多单,代码如下:

void OnStart(){double lot=0.1;int huadian=10;double Price= iHigh("EURUSD",60, 1)+ 10 *(MarketInfo("EURUSD", MODE_POINT)* 10);int ticket= OrderSend ("EURUSD",OP_BUYSTOP,lot, Price,huadian, 0, 0,"MQL4 Lesson",1000,0, clrAliceBlue);}

可以看到和开单的例子相比,挂单仅仅多了一个挂单的价格Price,然后把OP_BUY改成了OP_BUYSTOP,其他都没变,所以学会了开单那么挂单也是一样的。

运行以上代码,我们顺利完成了挂单的任务。

4新闻交易双向挂单脚本

有了以上的挂单的基础,我们就可以搞一点点黑科技出来了,比如说写一个在重大消息公布之前一键双向挂单的脚本,这个脚本要能够实现快速地挂单,并设置好止损止盈。

如果这个任务交给一个人去完成,那是非常困难的事情,考验手速,没玩过几年星际争霸都搞不出来,而且在数据公布前有的时候会比较紧张,一紧张就容易挂错。这项黑科技便可以替我们完成这一系列复杂的操作。

我们在市价以上5个点挂一个0.1手突破多单,止盈为20个点,止损为5个点,然后在市价以下5个点挂一个0.1手突破空单,同样止盈20个点,止损5个点。代码如下:

void OnStart(){
double lot=0.1;
int huadian=10;
int tp=20;
int sl=5;
double Price_BUY= MarketInfo(Symbol(), MODE_ASK)+
5 *(MarketInfo(Symbol(), MODE_POINT)* 10);
double tp_BUY= Price_BUY+tp*(MarketInfo(Symbol(),
MODE_POINT)* 10);
double sl_BUY= Price_BUY-sl*(MarketInfo(Symbol(),
MODE_POINT)* 10);
int ticket= OrderSend (Symbol(),OP_BUYSTOP,lot, Price_BUY,huadian, sl_BUY, tp_BUY,"MQL4 Lesson",1000,0, clrAliceBlue);double Price_SELL= MarketInfo(Symbol(), MODE_BID)-
5 *(MarketInfo(Symbol(), MODE_POINT)* 10);
double tp_SELL= Price_SELL-tp*(MarketInfo(Symbol(),
MODE_POINT)* 10);
double sl_SELL= Price_SELL+sl*(MarketInfo(Symbol(),
MODE_POINT)* 10);
ticket= OrderSend (Symbol(),OP_SELLSTOP,lot, Price_SELL,huadian, sl_SELL, tp_SELL,"MQL4 Lesson",1000,0, clrAliceBlue);}

以上程序我们将多单和空单挂单的价格分别赋给了Price_BUY和Price_SELL,将多单的止盈止损分别赋给tp_BUY和sl_BUY,然后挂出多单,将空单的止盈止损分别赋给tp_SELL和sl_SELL并挂出空单,从而实现了双向挂单的功能。

我们双击一下脚本,程序自动挂了两个单,执行正常。

当然,要做一款用于新闻交易的EA肯定不止是这么简单的,比如说后面我们还要实现移动止损的功能,还有删除挂单的功能以及根据时间自动开仓的功能等,需要学习的东西还非常多,但是到这一步也算是比手工做单来的方便点了。

更多内容请关注公众号【火象】~

MQL4课程-交易函数下单及挂单相关推荐

  1. MQL4课程-交易函数平仓及修改止损止盈

    第六节 交易函数平仓及修改止损止盈 俗话说进场是徒弟,出场是师傅,一款程序想要盈利,那就得学会如何出场,要出场那我们还是有必要学一学离场的函数.首先和大家说一下,离场一般就分为两类,一种是主动离场,一 ...

  2. MQL4内置函数--总结汇总

    原文地址:MQL4内置函数--总结汇总作者:交易之外 MQL4内置函数 Abs –返回这个数值的绝对值(模块) 语法:Abs函数 (n个表达式) 参数:数值 AccountName – 返回包含用户名 ...

  3. 程序化交易接口下单程序怎么编写?

    程序化交易接口下单程序怎么编写?程序化交易接口主要提供同花顺交易系统的数据信息,如果要想从中挖掘更多的数据信息,则就要进行参考性的分析一套股票数据接口编程,那应该怎么写呢? 参考程序化交易接口系统开发 ...

  4. MQL4课程-市场信息函数

    第四节 市场信息函数 1价格信息查询 这节课比较重要,也是MQL4比较独特的地方,它可以直接获取当前的市场各货币对信息以及历史的信息,这对于量化交易来说是极为方便的. 打开MQ4帮助文件的目录,我们可 ...

  5. MQL4课程-学习一款神经网络EA

    第十八节 学习一款神经网络EA 随着计算能力的增强以及深度学习的出现,人们采用神经网络技术解决了很多实际问题,同时对神经网络也越来越重视.那么,神经网络如何用于外汇的交易?其实早在2008年就已经出现 ...

  6. html类型转换函数,MQL4数据类型转换函数 -

    外_汇_邦 WaiHuiBang.com 本组函数提供从一种格式到另一种格式的数据转换功能. 特别要注意 NormalizeDouble() 函数,它确保了表示价格所需的准确性.在交易过程中,MT4不 ...

  7. 股票自动交易python下单接口_股票自动交易Python下单接口

    股票自动交易软件助手的 Order.dll 自动下单接口不仅仅能在大智慧,通达信,飞狐等软件公式里调用,也可以在windows程序里直接调用,支持 Python, C/C++/C#接口调用.有编程能力 ...

  8. Excel进阶课程一函数与公式

    目录 ​ SUM函数 RANK函数 IF函数 COUNTIF函数 Large函数 SMALL函数 FREQUENCY函数 公式和函数之常见错误 数据处理 1.合并计算 2.排序 3.筛选 4.分类汇总 ...

  9. 零基础自学SQL课程 | IF函数

    大家好,我是宁一. 今天是我们的第22课:IF函数. 大家如果学过其他编程语言,应该对IF函数很熟悉了.用来根据条件,返回不同值. 基本语法: IF(条件表达式, 值1, 值2) 如果条件表达式为Tr ...

最新文章

  1. 在线作图|两分钟在线做中性群落模型分析
  2. JS服务器端开发基础篇(Array.slice方法和splice方法)
  3. linux 时间戳 c语言,c语言中的时间戳和时间格式
  4. Halcon初学者知识【17】如何将零件提取dxf图
  5. 怎么简述计算机网络的含义,计算机网络复习资料-含简答题参考答案
  6. 使用Istio进行多集群部署管理:单控制平面 Gateway 连接拓扑
  7. 从小白到入门算法,我的经验分享给你~
  8. 解析高通vendor层mct框架
  9. 越狱环境下代码控制手机重启(IOS,XCODE)
  10. 51 Nod 一维战舰
  11. 【物联网+GIS】让传感器数据在三维地图上显示,更直观,更震撼!
  12. java用打印机打印小票_使用CUPS和热敏打印机打印postscript文档
  13. 如何获取股票交易接口
  14. 戏如人生,人生如戏!
  15. 超全万字汇总!科研论文绘图实操干货!11类Matplotlib图表,含代码
  16. 腾讯面试--测试工程师职位
  17. 牛逼,我用Python做了一个word、PPT水印添加器!还带加密功能!
  18. Python style百分制转五分制
  19. 语音唤醒真香警告,轻松开启与Siri、小度和小爱的畅聊
  20. PyQt4实时显示文本内容GUI

热门文章

  1. python太阳代码_利用python计算太阳天顶角、方位角、高度角
  2. 使用kubeadm安装部署1.21.3版本Kubernetes
  3. 【K8s】什么是Pod?Pod的调度与控制器
  4. 50幅精美绝伦的世界各地风光摄影作品欣赏(下篇)
  5. 广播模块加继电器怎么接线_智能继电器模块如何接线?
  6. 通过一个word模板来生成新的word并且填充内容
  7. mysql 虚拟数据库_虚拟mysqli数据库
  8. A. Ivan the Fool and the Probability Theory
  9. 激光切割机机械结构设计
  10. oracle数据库的基本教程 pdf,Oracle数据库技术基础教程 PDF 下载