最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

MT5 EA交易期貨-限價單開倉平倉

2022-11-04 14:34 作者:wewin28  | 我要投稿

期貨的訂單類型和外匯不一樣,國內(nèi)期貨交易所只有限價單和市價單。

限價單就是比如交易者報限價單4000做多螺紋鋼,則交易所只會在4000或4000以下撮合該多單,所以如果能成交,成交價格只會在4000或4000以下。

比如交易者報限價單8000做空蘋果,則交易所只會在8000或8000以上撮合該空單,所以如果能成交,成交價格只會在8000或8000以上。

也就是說限價單會在交易者指定的價格上成交,超出了該價格則不成交。更多請看期貨與外匯交易機制的不同。

本例子的源代碼在"EA交易" -> "Examples"下,演示了EA如何報限價單做多,成交后10秒平倉。

EA是通過調(diào)用mt5ctp.dll進行期貨交易,所以EA需要先引用mt5ctp.dll,該DLL頭文件mt5ctp.mqh在\MQL5\Include目錄下。

EA獲取當前圖表的合約。對于非主連合約如rb2209可以通過Symbol()屬性獲得當前圖表的合約,但對于主連合約如rb9999,則需要通過SYMBOL_ISIN屬性獲得主連合約現(xiàn)在對應(yīng)的合約(rb2301),當主連合約rb9999隨著時間發(fā)生換月后,通過SYMBOL_ISIN屬性得到的合約就會自動變?yōu)閞b2305。使用后者的寫法可以讓EA在主連合約和非主連合約的圖表上都能獲得當前圖表的合約。

通過SYMBOL_EXCHANGE屬性獲得該合約對應(yīng)的交易所, 如獲得rb2301所屬的交易所SHFE(上期所)。

通過SYMBOL_DIGITS屬性獲得該合約的小數(shù)后位數(shù),如螺紋鋼是0,股指是1。

splitCommma是代表逗號。

定義報單時間全局變量entryTime,用來判斷是否已經(jīng)報單。定義倉位全局變量,如果pos等于0就是空倉,如果大于0就是持倉。eaOrderRef是EA報單編號,作用類似外匯EA的魔術(shù)號碼。

EA判斷如果還沒有報單和空倉就報單,先取得當前最新的MqlTick結(jié)構(gòu)體:

getLastMQLTick函數(shù)首先獲得現(xiàn)在的格林威治時間,將格林威治時間轉(zhuǎn)成北京時間,獲得3個小時之前的時間(比如當前是12點就是9點),將之前3個小時以來的全部跳復(fù)制到ticks[]數(shù)組(MqlTick結(jié)構(gòu)體)訪問ticks[]數(shù)組的最后一個元素,即獲得并返回最新價格的MqlTick結(jié)構(gòu)體。

通過最新的MqlTick結(jié)構(gòu)體取得最新成交價,設(shè)置報單手數(shù)1手,調(diào)用mt5ctp.dll getOrderRefCTP函數(shù)生成EA報單編號并保存在eaOrderRef變量,CTP對報單編號格式有格式要求,不能像外匯EA的魔術(shù)號碼可隨意自行指定, 否則報單會失敗,所以EA需先調(diào)用getOrderRefCTP函數(shù)生成EA報單編號再報單。

EA調(diào)用mt5ctp.dll sendOrderLimit函數(shù)發(fā)送限價報單,其中第一個參數(shù)是合約,第二個參數(shù)是mt5ctp.mqh頭文件中定義的枚舉ENUM_CTP_BUY_ORDER(代表多單),第三個參數(shù)是mt5ctp.mqh頭文件中定義的枚舉ENUM_CTP_OPEN_POSITION(代表開倉),第四個參數(shù)是報單的價格,第五個參數(shù)是報單的手數(shù),第六個參數(shù)是EA報單編號,第七個參數(shù)是mt5ctp.mqh頭文件中定義的枚舉ENUM_CTP_ACCOUNT_SPECULATION(代表開戶的期貨賬號是投機)。


請注意sendOrderLimit函數(shù)調(diào)用后會同步返回本地電腦發(fā)送報單請求的結(jié)果,0是本地電腦向交易所成功發(fā)送報單,-1是網(wǎng)絡(luò)連接失敗,-2是未處理請求超過許可數(shù),-3是每秒發(fā)送請求數(shù)超過許可數(shù)。但即使sendOrderLimit函數(shù)返回0(即完成下圖中的1和2),也不代表已經(jīng)成功在交易所掛單,還需要等待交易所異步返回對EA報單的撮合結(jié)果即報單回調(diào)和成交回調(diào)(即下圖中的3)。更多請看交易所異步回調(diào)。

MT5通過mt5ctp.dll得到報單回調(diào)和成交回調(diào),然后把這些回調(diào)作為MQL圖表事件發(fā)送給全部圖表,EA 通過MQL圖表事件響應(yīng)函數(shù)OnChartEvent得到這些回調(diào)(即上圖中的4)。

期貨發(fā)出的MQL圖表事件ID都是3000,EA需要在OnChartEvent函數(shù)中只處理ID是3000的事件。


EA是通過OnChartEvent函數(shù)的sparam參數(shù)獲得圖表事件中的交易所報單回調(diào)。

報單回調(diào)是一個字符串,格式如下:

OnRtnOrder, 交易所, 合約, EA報單編號, CTP報單編號, 多空, 開平, 報單狀態(tài)枚舉, 報單狀態(tài)信息, 報單價格, 報單手數(shù), 成交手數(shù), 報單時間, 撤單時間,FrontID,SessionID,e

EA通過OnChartEvent函數(shù)的sparam參數(shù)獲得MQL圖表事件中的交易所報單回調(diào)。把sparam對應(yīng)的字符串按逗號拆分后保存到字符數(shù)組chartEvents[]。

因為在OnChartEvent函數(shù)中ID是3000的事件包括了各種的交易所回調(diào)(如報單回調(diào),成交回調(diào),撤單回調(diào),錯誤回調(diào),倉位回調(diào),資金回調(diào)),更多請看交易所異步回調(diào)。 所以EA需要先根據(jù)chartEvents[0]="OnRtnOrder"篩選出其中的報單回調(diào)。

chartEvents數(shù)組的第4個元素是EA報單編號。如果有多個EA同時在不同的圖表上運行并報單,本圖表的OnChartEvent也會接收到其他圖表上的EA產(chǎn)生的報單回調(diào),在上面EA已經(jīng)生成并記錄了EA本次報單編號在eaOrderRef變量中,所以只有報單回調(diào)中的EA報單編號等于eaOrderRef變量才是本EA本次報單的回調(diào)(作用類似于外匯EA中的魔術(shù)號碼)。

EA獲得報單回調(diào)中的交易所、合約、EA報單編號、CTP報單編號、報單是做多或做空、報單是開倉或平倉,獲得報單價格,報單手數(shù),報單成交手數(shù),報單時間,撤單時間和交易所對這次報單的撮合結(jié)果。

如果報單成交了,EA接著會收到交易所的成交回報。

成交回調(diào)是一個字符串,格式如下:

OnRtnTrade, 交易所, 合約, EA報單編號, CTP報單編號, 成交編號, 多空, 開平, 成交價格, 成交手數(shù), 成交時間,e

因為在OnChartEvent函數(shù)中ID是3000的事件包括了交易所的各種回調(diào)(如報單回調(diào),成交回調(diào),撤單回調(diào),錯誤回調(diào),倉位回調(diào),資金回調(diào)), 所以EA需要先根據(jù)chartEvents[0]="OnRtnTrade"找出其中的成交回調(diào)。

EA取得成交回調(diào)中的EA報單編號。如果有多個EA同時在不同的圖表上運行并報單,本圖表的OnChartEvent也會接收到其他圖表上的EA產(chǎn)生的成交回調(diào),在上面eaOrderRef變量已經(jīng)記錄了這次報單的編號,所以成交回調(diào)中的EA報單編號等于該變量才是本EA本次報單的成交回調(diào)(作用類似于外匯EA中的魔術(shù)號碼)。

EA就可以獲得成交回調(diào)中的交易所、合約、CTP報單編號、CTP成交編號、報單是做多還是做空、報單是開倉還是平倉)、報單的成交價格、報單的成交手數(shù)、報單成交時間。

然后根據(jù)報單成交回調(diào)計算EA多空倉位并用全局變量pos記錄。

如果交易所拒絕了EA的報單, EA通過報單錯誤回調(diào)獲得該報單被拒絕的原因。

報單錯誤回調(diào)過程


持倉10秒后買一價報限價空單平倉,平倉程序和開倉同理。


MT5 EA交易期貨-限價單開倉平倉的評論 (共 條)

分享到微博請遵守國家法律
廊坊市| 仲巴县| 太和县| 清涧县| 金沙县| 博罗县| 永泰县| 新巴尔虎右旗| 华蓥市| 邵阳县| 东乡县| 天等县| 太康县| 青浦区| 澜沧| 昌宁县| 团风县| 朝阳市| 志丹县| 商洛市| 尉氏县| 定州市| 苍梧县| 孝义市| 富锦市| 荥经县| 唐海县| 公安县| 泾源县| 鹰潭市| 渭源县| 高淳县| 安图县| 五指山市| 侯马市| 大悟县| 墨竹工卡县| 泰和县| 象州县| 留坝县| 南雄市|