本例子演示了EA如何获得期货的持仓。

EA是通过调用mt5ctp.dll进行期货交易,所以EA需要先引用mt5ctp.dll,该DLL头文件mt5ctp.mqh在\MQL5\Include目录下。

#property copyright "www.wewin28.com 1145412@qq.com"
#property link      "http://www.wewin28.com"
#property version   "1.00"#include <mt5ctp.mqh>
ushort splitCommma=StringGetCharacter(",",0);

EA通过mt5ctp.dll得到交易所的各种回调(如报单回调,成交回调,撤单回调,错误回调,仓位回调,资金回调),然后会把这些回调作为MQL图表事件发送给全部图表,EA 通过MQL中的图表事件响应函数OnChartEvent得到这些回调,所以EA需要在OnChartEvent函数中只处理ID是3000的事件。

void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
{if(id==3000)     //只处理MT5 CTP的事件 process MT5 CTP event only{      

EA通过OnChartEvent函数的sparam参数获得MQL图表事件中的仓位回调,仓位回调是一个字符串,格式如下:

OnRspQryInvestorPosition, 交易所, 合约, 仓位多空, 昨天持仓, 总持仓, 今天持仓, 持仓均价, 持仓盈亏, 冻结, 浮动盈亏,开仓均价,是否最后一个仓位,e

把sparam参数对应的字符串按逗号拆分后保存到字符数组chartEvents[],这样chartEvents[0]就等于"OnRspQryInvestorPosition"。因为在OnChartEvent函数中ID是3000的事件包括了交易所的各种回调(如报单回调,成交回调,撤单回调,错误回调,仓位回调,资金回调), 所以EA需要先根据chartEvents[0]=OnRspQryInvestorPosition找出其中的仓位回调。

void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
{if(id==3000)     //只处理MT5 CTP的事件 process MT5 CTP event only{      string chartEvents[];     int n=StringSplit(sparam,splitCommma,chartEvents);   //CTP查询仓位回调中的各个数据用逗号分隔if(n>0){string eventType=chartEvents[0];   if(eventType=="OnRspQryInvestorPosition")    //CTP查询仓位回调 query position event{

然后遍历chartEvents数组,得到仓位回调中的各项数据:

chartEvents[2]是合约

chartEvents[3]是2(多)或3(空)

chartEvents[4]是昨仓

chartEvents[5]是昨仓+今仓

chartEvents[6]是今仓

chartEvents[7]是持仓均价

chartEvents[8]是持仓盈亏

chartEvents[9]是冻结

chartEvents[10]是浮动盈亏

chartEvents[11]是开仓均价

chartEvents[12]是否最后一个仓位

void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
{if(id==3000)     //只处理MT5 CTP的事件 process MT5 CTP event only{      string chartEvents[];     int n=StringSplit(sparam,splitCommma,chartEvents);   //CTP查询仓位回调中的各个数据用逗号分隔if(n>0){string eventType=chartEvents[0];   if(eventType=="OnRspQryInvestorPosition")    //CTP查询仓位回调 query position event{printf(sparam);//OnRspQryInvestorPosition, 1交易所, 2合约, 3仓位多空, 4昨天持仓, 5总持仓, 6今天持仓, 7开仓均价, 8持仓盈亏, 9冻结, 10浮动盈亏,estring symbol=chartEvents[2];       //CTP查询仓位回调中的合约 symbol in the callbackstring buySellEnum=chartEvents[3];      //多空  buy/sell string buySell="";if(buySellEnum=="1"){buySell="净 net";         }if(buySellEnum=="2"){buySell="多 buy";          }if(buySellEnum=="3"){buySell="卖 sell";          }string yesterdayPosition=chartEvents[4];  //昨仓 before today positionstring position=chartEvents[5];           //总仓  total positionstring todayPosition=chartEvents[6];      //今仓  today positionstring price=chartEvents[7];              //持仓均价 open average pricestring settlementPricePnl=chartEvents[8];      //持仓盈亏 settlement price pnlstring frozen=chartEvents[9];      //冻结  frozenstring pnl=chartEvents[10];      //浮动盈亏 pnlstring openPrice=chartEvents[11];   //开仓均价 open average pricestring isLastPos=chartEvents[12];          //是否最后一个仓位 is last positionlong digits=SymbolInfoInteger(symbol, SYMBOL_DIGITS);printf("%s  %s 昨仓 before today position %s 总仓 total position %s 今仓 today position %s 持仓均价 open average price %s 持仓盈亏 settlement price pnl %s 浮动盈亏 pnl %s 开仓均价 open average price", symbol, buySell, yesterdayPosition, position, todayPosition, DoubleToString((double)price, (int)digits), DoubleToString((double)settlementPricePnl,0), DoubleToString((double)pnl,0), DoubleToString((double)openPrice,0));}} }
}

MT5 EA交易期货-获得持仓相关推荐

  1. MT5 EA交易期货-挂单撤单

    本例子演示在买一价往上10个跳的价格上挂空单, 挂单后10秒后撤单. 与外汇交易不同,为了防止盘口愰骗,各交易所都将频繁撤单列入异常交易管理规范请注意. EA是通过调用mt5ctp.dll进行期货交易 ...

  2. MT5 EA交易期货-EA编程接口

    为什么MT5可以交易期货? 如下图MT5 EA是通过调用mt5ctp.dll接口函数进行期货交易的.该DLL在MQL5\Libraries目录下.外汇EA只需要修改报单部分的程序即可使用在期货上面. ...

  3. MT5 EA交易期货-市价单开仓平仓

    该例子演示了EA如何报期货市价单开仓,开仓后10秒钟报市价单平仓. 在外汇交易里没有市价单,而期货交易有市价单, 市价单报单时不指定价格,让交易所自行成交,就是做多无论多贵都买,做空无论多便宜都卖,不 ...

  4. MT5 EA交易期货-限价单开仓平仓

    期货的订单类型和外汇不一样,国内期货交易所只有限价单和市价单. 限价单就是比如交易者报限价单4000做多螺纹钢,则交易所只会在4000或4000以下撮合该多单,所以如果能成交,成交价格只会在4000或 ...

  5. MT5 EA交易期货-查询资金

    本例子演示了EA如何获得期货账号下的权益.手续费.占用保证金.平仓盈亏.持仓盈亏和可用资金. EA是通过调用mt5ctp.dll进行期货交易,所以EA需要先引用mt5ctp.dll,该DLL头文件mt ...

  6. MT5 EA交易期货-报单部分成交

    期货的交易机制会出现报单部分成交的情况. EA是通过调用mt5ctp.dll进行期货交易,该DLL提供了接口函数可以指定如何处理报单部分成交的情况, 开发者可以根据自己的策略去选择如何处理不同的报单部 ...

  7. MT5 EA交易期货-盘口

    MT5期货里提供了上期所和能源中心的五档盘口(卖5,卖4,卖3,卖2,卖1,买1,买2,买3,买4,买5),中金所.大商所和郑商所的一档盘口(卖1,买1),这样我们就可以开发基于盘口的策略了. 下面的 ...

  8. python网格交易_网格交易(期货)

    网格交易(期货) 分享 阅读 30668 更新 2020-12-03 15:44:39 网格交易法(期货) 1. 原理 什么是网格交易法? 网格交易法是一种利用行情震荡进行获利的策略.在标的价格不断震 ...

  9. 期货的交易量和持仓量(期货的持仓量和成交量)

    期货的成交量,持仓量,日增仓都各代表什么意思 期货的成交量是指已经成交的合约数量:持仓量也称空盘量或未平仓合约量,是指买入或卖出后尚未对冲及进行实物交割的某种商品期货合约的数量:日增仓是当天的持仓的增 ...

  10. 另类数据:跟踪期货高手持仓策略(完整录播)

    数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学,点击下方链接报名: 量化投资速成营(入门课程) Python股票量化投资 Python期货量化投资 Python数 ...

最新文章

  1. Winsock异步模式I/O模型WSAEventSelect的使用
  2. Facebook 3D视觉研究最新进展
  3. 18种方法让你集中精力工作
  4. CentOS6.2部署qt开发环境
  5. javascript 之 面向对象【理解对象】
  6. [xsy3343]程序锁
  7. 单片机串口通信电平不匹配的解决电路,5V 3.3V串口通讯
  8. python min函数时间复杂度_作为Python程序员,你真的会用max()和min()函数吗?
  9. python写入Excel时,将路径或链接以超链接的方式写入
  10. 解决request.getSession().getServletContext().getRealPath(“/“)为null问题
  11. Pytorch Tensor与Numpy ndarray的交互/相互转化
  12. Unity3D使用经验总结 编辑器扩展篇
  13. html+css网页开发 之 头部导航条(logo、导航栏、搜索框)
  14. python计算2的n次方_python求n次方
  15. Netgear R6800 padavan稳定固件亲测
  16. python 入门篇 之 正则表达式re.findall的使用
  17. {typedir} {style} {tid} {aid} 分别是什么意思?
  18. 三节点大数据环境安装教程1
  19. 用C语言解“计算工资”题
  20. java warmup,20. dubbo源码-预热warmup过程

热门文章

  1. 线性代数学习笔记(七)——克莱姆法则
  2. [JavaSE] 二维数组详解【静态初始化和动态初始化区别】—Day13
  3. 反黑教程:手把手教你应对搜索引擎劫持攻击
  4. 第三章 集合的基本概念和运算
  5. 试图加载格式不正确的程序 0x8007000b
  6. LoadLibrary加载dll失败的问题
  7. 【暴强】200种好口碑便宜护肤品 - 健康程序员,至尚生活!
  8. 你应该会的一道多线程笔试题
  9. 宝藏又小众的覆盖物PBR多通道贴图素材网站分享
  10. Android 软键盘顶起布局相关