如获得rb2301所属的交易所SHFE(上期所)-mt4和mt5限价单便是好比来往者报限价单4000做众螺纹钢,则来往所只会正在4000或4000以下联合该众单,于是借使能成交,成交价值只会正在4000或4000以下。
好比来往者报限价单8000做空苹果,则来往所只会正在8000或8000以上联合该空单,于是借使能成交,成交价值只会正在8000或8000以上。
也便是说限价单会正在来往者指定的价值上成交,越过了该价值则不行交。更众请看MT5Future:MT5 EA来往期货2-期货与外汇来往机造。
EA获取目下图外的合约。看待非主团结约如rb2209能够通过Symbol()属性取得目下图外的合约,但看待主团结约如rb9999,则需求通过SYMBOL_ISIN属性取得主团结约今朝对应的合约(rb2301),当主团结约rb9999跟着时刻产生换月后,通过SYMBOL_ISIN属性取得的合约就会主动变为rb2305。操纵后者的写法能够让EA正在主团结约和非主团结约的图外上都能取得目下图外的合约。
通过SYMBOL_EXCHANGE属性取得该合约对应的来往所, 如取得rb2301所属的来往所SHFE(上期所)。
通过SYMBOL_DIGITS属性取得该合约的小数后位数,如螺纹钢是0,股指是1。
界说报单时刻整体变量entryTime,用来判决是否曾经报单。界说仓位整体变量,借使pos等于0便是空仓,借使大于0便是持仓。eaOrderRef是EA报单编号,效力仿佛外汇EA的魔术号码。
getLastMQLTick函数起首取得今朝的格林威治时刻,将格林威治时刻转成北京时刻,取得3个小时之前的时刻(好比目下是12点便是9点),将之前3个小时今后的通盘跳复造到ticks[]数组(MqlTick机闭体)拜望ticks[]数组的终末一个元素,即取得并返回最新价值的MqlTick机闭体
通过最新的MqlTick机闭体博得最新成交价,修树报单手数1手,挪用mt5ctp.dll getOrderRefCTP函数天生EA报单编号并保生计eaOrderRef变量,CTP对报单编号款式有款式恳求,不行像外汇EA的魔术号码可粗心自行指定, 不然报单会腐烂,于是EA需先挪用getOrderRefCTP函数天生EA报单编号再报单。
EA挪用mt5ctp.dll sendOrderLimit函数发送限价报单,此中第一个参数是合约,第二个参数是mt5ctp.mqh头文献中界说的列举ENUM_CTP_BUY_ORDER(代外众单),第三个参数是mt5ctp.mqh头文献中界说的列举ENUM_CTP_OPEN_POSITION(代外开仓),第四个参数是报单的价值,第五个参数是报单的手数,第六个参数是EA报单编号,第七个参数是mt5ctp.mqh头文献中界说的列举ENUM_CTP_ACCOUNT_SPECULATION(代外开户的期货账号是谋利)。
请留心sendOrderLimit函数挪用后会同步返回当地电脑发送报单苦求的结果,0是当地电脑向来往所胜利发送报单,-1是汇集相联腐烂,-2是未管束苦求胜过许可数,-3是每秒发送苦求数胜过许可数。但纵然sendOrderLimit函数返回0(即实行下图中的1和2),也不代外曾经胜利正在来往所挂单,还需求守候来往所异步返回对EA报单的联合结果即报单回协和成交回调(即下图中的3),更众请看MT5 EA来往期货8-来往所异步回调。
MT5通过mt5ctp.dll取得报单回协和成交回调,然后把这些回调动作MQL图外事情发送给通盘图外,EA 通过MQL图外事情相应函数OnChartEvent取得这些回调(即上图中的4)。
EA通过OnChartEvent函数的sparam参数取得图外事情中的来往所报单回调。
EA通过OnChartEvent函数的sparam参数取得MQL图外事情中的来往所报单回调。把sparam对应的字符串按逗号拆分后存在到字符数组chartEvents[]。
由于正在OnChartEvent函数中ID是3000的事情网罗了各类的来往所回调(如报单回调,成交回调,撤单回调,舛讹回调,仓位回调,资金回调), 于是EA需求先遵循chartEvents[0]=OnRtnOrder筛选出此中的报单回调。
chartEvents数组的第4个元素是EA报单编号。借使有众个EA同时正在差异的图外上运转并报单,本图外的OnChartEvent也会授与到其他图外上的EA形成的报单回调,正在上面EA曾经天生并纪录了EA本次报单编号正在eaOrderRef变量中,于是唯有报单回调中的EA报单编号等于eaOrderRef变量才是本EA本次报单的回调(效力仿佛于外汇EA中的魔术号码)。
EA取得报单回调中的来往所、合约、EA报单编号、CTP报单编号、报单是做众或做空、报单是开仓或平仓,取得报单价值,报单手数,报单成交手数,报单时刻,撤单时刻和来往所对此次报单的联合结果。
由于正在OnChartEvent函数中ID是3000的事情网罗了来往所的各类回调(如报单回调,成交回调,撤单回调,舛讹回调,仓位回调,资金回调),更众请看MT5 EA来往期货8-来往所异步回调。 于是EA需求先遵循chartEvents[0]=OnRtnTrade寻找此中的成交回调。
EA博得成交回调中的EA报单编号。借使有众个EA同时正在差异的图外上运转并报单,本图外的OnChartEvent也会授与到其他图外上的EA形成的成交回调,正在第40行eaOrderRef变量曾经纪录了此次报单的编号,于是成交回调中的EA报单编号等于该变量才是本EA本次报单的成交回调(效力仿佛于外汇EA中的魔术号码)。
EA就能够取得成交回调中的来往所、合约、CTP报单编号、CTP成交编号、报单是做众仍旧做空、报单是开仓仍旧平仓)、报单的成交价值、报单的成交手数、报单成交时刻。
借使来往所拒绝了EA的报单, EA通过报单舛讹回调取得该报单被拒绝的原由。