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

期货的订单类型和外汇不一样,国内期货交易所只有限价单和市价单。

限价单就是比如交易者报限价单4000做多螺纹钢,则交易所只会在4000或4000以下撮合该多单,所以如果能成交,成交价格只会在4000或4000以下。

比如交易者报限价单8000做空苹果,则交易所只会在8000或8000以上撮合该空单,所以如果能成交,成交价格只会在8000或8000以上。

也就是说限价单会在交易者指定的价格上成交,超出了该价格则不成交。

本例子演示了EA如何报限价单做多,成交后10秒平仓。

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

#property copyright "www.wewin28.com 1145412@qq.com"
#property version   "1.1"
#include <mt5ctp.mqh>   //引用MT5CTP头文件

EA获取当前图表的合约。对于非主连合约如rb2209可以通过Symbol()属性获得当前图表的合约,但对于主连合约如rb9999,则需要通过SYMBOL_ISIN属性获得主连合约现在对应的合约(rb2301),当主连合约rb9999随着时间发生换月后,通过SYMBOL_ISIN属性得到的合约就会自动变为rb2305。使用后者的写法可以让EA在主连合约和非主连合约的图表上都能获得当前图表的合约。

通过SYMBOL_EXCHANGE属性获得该合约对应的交易所, 如获得rb2301所属的交易所SHFE(上期所)。

通过SYMBOL_DIGITS属性获得该合约的小数后位数,如螺纹钢是0,股指是1。

splitCommma是代表逗号。

string symbol=SymbolInfoString(Symbol(), SYMBOL_ISIN); //获取合约(如果是主力合约的话取对应的合约) get symbol
string exchange=SymbolInfoString(symbol, SYMBOL_EXCHANGE); //该品种的交易所 get exchange   
long digits=SymbolInfoInteger(symbol, SYMBOL_DIGITS);  //该品种价格的小数位数  get decimal
ushort splitCommma=StringGetCharacter(",",0);         //逗号 comma

定义报单时间全局变量entryTime,用来判断是否已经报单。定义仓位全局变量,如果pos等于0就是空仓,如果大于0就是持仓。eaOrderRef是EA报单编号,作用类似外汇EA的魔术号码。

datetime entryTime=D'1970.01.01 00:00';    //报单时间全局变量 send order datetime
int pos=0;  //EA仓位全局变量  position
long eaOrderRef=0;   //EA报单编号全局变量  magic number

如果还没有报单和空仓就报单,先取得当前最新的MqlTick结构体:获得现在的格林威治时间,将格林威治时间转成北京时间,获得3个小时之前的时间(比如当前是12点就是9点),将之前3个小时以来的全部跳复制到ticks[]数组(MqlTick结构体)访问ticks[]数组的最后一个元素,即获得并返回最新价格的MqlTick结构体。

MqlTick getLastMQLTick()
{
    datetime gmt=TimeGMT();   
    datetime chinaCurrentDatetime=(datetime)(gmt+8*60*60);               //格林威治时间
    ulong last3HourMinute=(long)(chinaCurrentDatetime-60*60*3)*1000;     //将格林威治时间转成北京时间  convert GMT time to Beijing time
                       
    MqlTick ticks[]; 
    MqlTick lastTick;
    
    int copyTick=CopyTicks(symbol,ticks,COPY_TICKS_ALL,last3HourMinute,30000); 
                    
    if(copyTick>=0)
    {
       int tickCount=ArraySize(ticks);
    
       if(tickCount>0)
       {
          lastTick=ticks[tickCount-1];        
       }
       else
       {
         printf("tick count 0");
       }
    }   
    else
    {
      printf("copyTick 0");
    }
    
    return lastTick;
}

通过最新的MqlTick结构体取得最新成交价,设置报单手数1手,调用mt5ctp.dll getOrderRefCTP函数生成EA报单编号并保存在eaOrderRef变量,CTP对报单编号格式有格式要求,不能像外汇EA的魔术号码可随意自行指定, 否则报单会失败,所以EA需先调用getOrderRefCT

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
简介 这是一个控制和管理订的风控软件,可用于监控交易员的成交手数,也避免忘记设置止损和止盈的错误。 很多风控技术工作者在该软件系统的帮助下,节约了大量的工作时间,同时也避免了很多严重性的错误。 同时它可以根据风控参数的设置,关闭其他窗口的EA运行,并执行风控指令。 设计原理 该程序会不断扫描账户的资金与订信息,并与用户设定的风控参数等信息进行比较。 当账户的的资金状态和订状态超过风控参数设置的要求时,该系统会立刻进行对账户订进行平仓,减或者清的操作。 风控大师的优点 节省风控时间,管理员不需要一直24小时盯着账户信息,通过该软件实现风控操作。 避免人为错误,人工执行风控,可能会出现疏忽性的错误,该系统可以避免人为错误。 提高风控执行,人工风控总是收到心里因素的影响,从而错过了最佳风控时间,该系统可以避免人性的不足。 风控时间及时,人工风控操作会有操作时间差,再瞬息万变的金融市场,速度就是一切,避免因人工风控不足的穿。 面板选项选择组合自由使用,易学易用,不用退出软件。 功能简介 净值以上清线--当账户的净资产大于该值时,执行清操作。 净值以下清线--当账户的净资产小于该值时,执行清操作。 整体盈利清线-- 当账户的浮动盈利大于该值时,执行清操作。 整体亏损清线-- 当账户的浮动亏损大于该值时,执行清操作。 笔浮盈平仓线-- 当该笔订浮动盈利大于该值时,执行该订平仓笔浮亏平仓线-- 当该笔订浮动亏损大于该值时,执行该订平仓。 盈利关其他窗线-- 当账户的浮动盈利超过该值时,关闭除本软件所在的其他任何窗口。 亏损关其他窗线-- 当账户的浮动亏损超过该值时,关闭除本软件所在的其他任何窗口。 最大手数-- 当某笔订的手数超过该值时候,执行减操作,直到符合要求。 最大总持手数-- 当账户的总持手数超过该值时候,执行减操作,直到符合要求。 限制最大止损点-- 当某订无止损或止损点数超过该值时候,执行修改止损符合要求。 限制最大止盈点--当某订无止盈或止盈点数超过该值时候,执行修改止盈符合要求。 自动平保盈利点-- 当某订盈利点超过该值时,修改止损到入场位附近。 跟踪止损距离点-- 订每次盈利该指定点数,执行跟踪止损。 自动平保盈亏比-- 当某订的的盈利与止损的比例超过该值时,修改止损到入场价附近。 使用注意事项 本软件运行速度很快,先修改数值,在选择✓,否则数值尚未输入完毕就开始执行风控了。 mt4软件本身固有缺陷,在输入数值时,不要用按键,而是双击直接修改,否则会删除软件界面,如果不幸遇到,那么退出该软件重新加载即可,这种现象在mt5中没有。 软件意义 很多人操盘习惯性不带止损, 重,或者疏忽下错手数。执行力不够,到达止盈和止损位时,舍不得平仓了结。 总想赚得更多, 或者再等一等浮亏就会回来,这种赌徒的心理最终会害了自己的。该软件解决交易员执行力问题。 监控其他交易员及其他EA的运行状态并执行风控,也可以辅助自己盯盘执行平仓操作。 关于我们 迈达量化专业开发mt4和mt5程序服务,十几年金融与编程经验。 若您有任何软件开发或功能升级等相关需求欢迎联系我们。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值