MQL5: 通过反向持仓来平仓

EA交易中最常见的操作,下单和平仓。
在脚本程序中写。
首先要了解发送下单需要的函数OrderSend
同样,先放上官方给的函数参考链接 OrderSend

OrderSend函数的参数列表

MqlTradeRequest 交易请求结构,该结构的属性如下图所示

MqlTradeResult 交易请求结果结构,该结构的属性如下图所示

然后通过代码来看如何去使用这两个结构去实例化OrderSend函数

//+------------------------------------------------------------------+
//|                                                        order.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart(){setorder();   }
//+------------------------------------------------------------------+
void setorder(){
//--- 准备请求MqlTradeRequest req={0};req.action      =TRADE_ACTION_DEAL;                      //立即处理req.symbol      =_Symbol;                                //当前图表的交易品种名称req.magic       =02;req.volume      =0.01;                                   //手数req.type        =ORDER_TYPE_BUY;                         //订单类型req.price       =SymbolInfoDouble(_Symbol,SYMBOL_ASK);//报价req.deviation   =10;req.comment     ="Buy using OrderSendAsync()";           //订单注释MqlTradeResult  res={0};                                             if(!OrderSendAsync(req,res)){Print(__FUNCTION__,": error ",GetLastError(),", retcode = ",res.retcode);}}

注意到这里给了一个交易的幻数 ,即req.magic = 02。给订单指定的交易幻数意味着可以在平仓时指定需要平掉的订单。当然也可以根据指定报价去平仓,这里不做讨论。

以下给出 遍历持仓来找到幻数为02的订单,且为做多单,然后通过反向持仓来平仓 的脚本程序

void OnStart(){
//--- 声明并初始化交易请求和交易请求结果MqlTradeRequest request;MqlTradeResult  result;int total=PositionsTotal(); // 持仓数
//--- 重做所有持仓for(int i=total-1; i>=0; i--){//--- 订单的参数ulong  position_ticket=PositionGetTicket(i);                                                           // 持仓价格string position_symbol=PositionGetString(POSITION_SYMBOL);                        // 交易品种 int    digits=(int)SymbolInfoInteger(position_symbol,SYMBOL_DIGITS);              // 小数位数ulong  magic=PositionGetInteger(POSITION_MAGIC);                                        // 持仓的幻数double volume=PositionGetDouble(POSITION_VOLUME);                                 // 持仓交易量ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);    // 持仓类型//--- 如果幻数匹配if(magic == 02 && type == POSITION_TYPE_BUY ){//--- 归零请求和结果值ZeroMemory(request);ZeroMemory(result);//--- 设置操作参数request.action   =TRADE_ACTION_DEAL;        // 交易操作类型request.position =position_ticket;          // 持仓价格request.symbol   =position_symbol;          // 交易品种 request.volume   =volume;                   // 持仓交易量request.deviation=5;                        // 允许价格偏差request.magic    =EXPERT_MAGIC;             // 持仓幻数//--- 根据持仓类型设置价格和订单类型 request.price=SymbolInfoDouble(position_symbol,SYMBOL_BID);request.type =ORDER_TYPE_SELL;//--- 输出关闭信息PrintFormat("Close #%I64d %s %s",position_ticket,position_symbol,EnumToString(type));//--- 发送请求if(!OrderSend(request,result))PrintFormat("OrderSend error %d",GetLastError());  // 如果不能发送请求,输出错误代码//--- 操作信息   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);//---}}}
//+------------------------------------------------------------------+

以上程序均可运行。
如有表达错误,还请指正。

MQL5: 通过反向持仓来平仓相关推荐

  1. 【证券】什么是开仓、持仓和平仓?

    一:开仓 开仓即建仓.在交易中通常有两种操作方式,一种是看涨行情做多头(买方),另一种是看跌行情做空头(卖方).无论是做多或做空,下单买卖就称之为"开仓".也可理解为在交易中,无论 ...

  2. 建仓、斩仓、持仓、增仓、平仓、补仓、满仓、半仓、清仓、空仓

    建仓.增仓.补仓.持仓.平仓.斩仓: 建仓:第一笔买入某股票: 斩仓:亏钱卖出. 持仓:持有股票: 增仓:在上涨过程中继续买入称增仓: 平仓:卖出股票称平仓: 补仓:在下跌过程中买入 满仓:资金的全部 ...

  3. 期货交易所持仓标准(期货持仓规则)

    期货持仓量大小的含义是什么? 期货持仓就是在期货交易过程中我们有交易的资金正在交易,这就是代表有持仓,持仓量的意思就是我们账户内的资金为总金额,交易时候扣除的保证金多少也就是仓位的大小 例如:目前账户 ...

  4. 国债期货合约约(国债期货合约是什么)

    什么是国债期货? ;     国债期货(Treasury future)是指通过有组织的交易场所预先确定买卖价格并于未来特定时间内进行钱券交割的国债派生交易方式.国债期货属于金融期货的一种,是一种高级 ...

  5. 八款知名MartingaleEA 策略的评价

    八款知名MartingaleEA 策略的评价 "Martingale是纯粹的恶魔,它会吞噬掉你所拥有的一切!",多年来,这是人们对Martingale的一致看法.Martingal ...

  6. 期货卖成交(期货卖出买入)

    期货的交易是如何操作的? 期货交易方法如下: 1.进行期货交易前需要进行开户,可以在期货公司进行开户,签订说明书和合同即可.也可以在网上进行开户,线上提交信息即可. 2.开户后缴纳保证金,然后要对期货 ...

  7. 期货基础知识09——期货盈亏的计算方法

    转自 http://blog.sina.com.cn/s/blog_674caeca0101nbzd.html 首先,你得明白,期货交易实行的是"当日无负债结算制度".所谓&quo ...

  8. python高频交易策略_VNPY中 Tick级别准高频交易简单策略

    VNPY中,大多策略都是基于bar分钟级别:国内tick是一秒两笔,频率不算太高.这里尝试做了一个Tick基本准高频交易策略,只是为了实现思路.可以回测,不要直接用.. 回测时候记得把回测模式改为TI ...

  9. 金融市场基础知识小结

    1.按照<中国金融期货交易所交易规则>及相关细则: ①对于沪深300指期货合约,进行投机交易的客户某一合约单边持仓限额为5000手: ②对于中证500.上证50合约均为1200手: 某一股 ...

最新文章

  1. 斯坦福大学李飞飞团队图像分类课程笔记
  2. python 进程池pool简单实例
  3. 【leetcode】clone-graph
  4. ---WebCam网络摄像头7 cmos--yuv rgb , Format............:V4L2_PIX_FMT_YUYV
  5. [leedcode 215] Kth Largest Element in an Array
  6. ASP.NET项目中的驼峰格式JSON响应
  7. vue.js v-model
  8. 程序员如何年薪百万?深度学习必读书籍!
  9. 【leetcode 简单】 第六十七题 回文链表
  10. php 生成vbs文件路径,vbs下一些取特殊路径的方法总结
  11. 基于IFC标准的4DBIM可视化平台
  12. Xilinx SDK 初学之–API函数笔记(AXI_GPIO)
  13. C4D学习笔记1-动画-动画关键帧
  14. python 极客学院 正则表达式
  15. iphone iOS 更换手机铃声 免itunes
  16. 【环境配置】自定义Linux欢迎界面/etc/motd文件
  17. ps ui html,UI设计的PS配置技巧
  18. Computer Transformation UVA - 1647
  19. 大数据常用同步工具(DataX/Sqoop/Nifi/Canal等)
  20. VS2015 scanf 函数报错 error C4996: 'scanf'

热门文章

  1. Dynamics CRM IFD部署之后遇到的登录问题
  2. websocket协议和服务实现
  3. Markdown实用快捷键
  4. 青鸟云题库2018年8月26日15:20:28 springmvc错题总结
  5. Linux高级网络开发奇妙之旅
  6. web期末复习---老师划重点!!
  7. 【NVMe2.0b 7】NVMe 基本队列数据结构
  8. 30 岁前实现财务自由的人,都做对了哪些事?
  9. IK 分词器空格支持
  10. 如何在jsp中写一个弹窗