但对于主连合约如rb9999—怎么确定mt4被骗EA获取目前图外的合约。对待非主联合约如rb2209能够通过Symbol()属性获取目前图外的合约,但对待主联合约如rb9999,则必要通过SYMBOL_ISIN属性获取主联合约而今对应的合约(rb2301),当主联合约rb9999跟着年华产生换月后,通过SYMBOL_ISIN属性取得的合约就会主动变为rb2305。运用后者的写法能够让EA正在主联合约和非主联合约的图外上都能获取目前图外的合约。
通过SYMBOL_EXCHANGE属性获取该合约对应的生意所, 如获取rb2301所属的生意所SHFE(上期所)。
通过SYMBOL_TRADE_TICK_SIZE属性获取该合约每一跳的巨细,如螺纹钢是1,股指期货是0.2。
通过SYMBOL_TRADE_TICK_VALUE属性获取该合约每一跳是众少钱,如螺纹钢每一跳是10元,股指期货每一跳是60元。
界说了几个全体变量:vol是报单的手数,entryPrice是报单的手数,pos是目前持仓,eaOrderRef是EA报单编号,效率好像外汇EA的魔术号码。splitCommma是代外逗号。
最先获取目前的格林威治年华,将格林威治年华转成北京年华,获取3个小时之前的年华(例如目前是12点便是9点),将之前3个小时以后的悉数跳复造到ticks[]数组(MqlTick构造体),拜候ticks[]数组的最终一个元素,获取并返回最新价值的MqlTick构造体。
EA移用mt5ctp.dll getOrderRefCTP函数天生EA报单编号并保生存eaOrderRef变量,CTP对报单编号体式有轨则,不行像外汇EA的魔术号码可肆意自行指定, 不然报单会挫折,以是EA需移用getOrderRefCTP函数天生EA报单编号。
移用mt5ctp.dll sendOrderLimit函数发送限价报单,此中第一个参数是报单合约,第二个参数是mt5ctp.mqh头文献中界说的罗列ENUM_CTP_SELL_ORDER(代外空单),第三个参数是mt5ctp.mqh头文献中界说的罗列ENUM_CTP_OPEN_POSITION(代外开仓),第四个参数是报单的价值(买一价),第五个参数是报单的手数,第六个参数是EA报单编号,第七个参数是mt5ctp.mqh头文献中界说的罗列ENUM_CTP_ACCOUNT_SPECULATION(代外开户的期货账号是谋利)。
sendOrderLimit函数移用后会同步返回当地电脑管束报单苦求的结果,0是当地管束报单苦求凯旋,-1是收集相联挫折,-2是未管束苦求赶过许可数,-3是每秒发送苦求数赶过许可数。但纵然sendOrderLimit函数返回0,也不代外曾经凯旋正在生意所报单(只是实行下图中的1和2),还必要恭候生意所异步返回对报单的说合结果即报单回调(即下图中的3)。这与外汇生意的机造有差异,更众请看MT5Future:MT5 EA生意期货8-CTP异步事故回调
MT5通过mt5ctp.dll取得生意所对该报单的管束结果(即报单回调),之后会把这些回调举动MQL图外事故发送给悉数图外,EA 通过MQL图外事故反映函数OnChartEvent取得这些回调(即下图中的4)。
chartEvents数组的第4个元素是EA报单编号。假设有众个EA同时正在差异的图外上运转并报单,本图外的OnChartEvent也会回收到其他图外上的EA报单后形成的成交回调,正在第52行eaOrderRef变量曾经记实了EA报单编号,以是成交回调中的EA报单编号等于该变量才是本EA的成交回调(效率好像于外汇EA中的魔术号码)。
遍历chartEvents数组,取出成交回调中的合约,众空,开平,成交价值,成交手数,成交年华。
也能够用钱谋划止盈,先谋划最新价小于空仓开仓价值众少个跳, 再乘以每跳众少钱,假设大于50元就平仓止盈。
由于本例子是10秒后平仓,即是平今仓,而上期所和能源核心区别平今仓昨仓,以是这些生意所的合约参数必要运用mt5ctp.mqh头文献中界说的罗列ENUM_CTP_CLOSE_POSITION_TODAY, 其他生意所合约不必区别平今仓昨仓,参数用mt5ctp.mqh头文献中界说的罗列ENUM_CTP_CLOSE_POSITION。
上期所、能源核心和中金所没有时价单,这些生意所的合约用涨停价发限价单平仓,其他生意所则发时价单平仓。
也能够用钱谋划止损,谋划当最新价大于空仓开仓价值众少个跳, 再乘以每跳众少钱,假设大于50元就平仓止损。