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

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

MT5 EA交易期貨-止盈止損

2022-11-08 21:04 作者:wewin28  | 我要投稿

該例子演示EA開空倉后,賺5個跳止盈或者虧4個跳止損。

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

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

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

通過SYMBOL_TRADE_TICK_SIZE屬性獲得該合約每一跳的大小,如螺紋鋼是1,股指期貨是0.2。

通過SYMBOL_TRADE_TICK_VALUE屬性獲得該合約每一跳是多少錢,如螺紋鋼每一跳是10元,股指期貨每一跳是60元。

定義了幾個全局變量:vol是報單的手數(shù),entryPrice是報單的手數(shù),pos是當前持倉,eaOrderRef是EA報單編號,作用類似外匯EA的魔術號碼。splitCommma是代表逗號。


在OnTick()事件中,如果沒有持倉就馬上報單

報單前需獲得當前最新價格的MqlTick結構體:

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


然后EA就可以取得當前最新價格結構體中的買一價報單。

EA調(diào)用mt5ctp.dll的接口函數(shù)getOrderRefCTP生成EA報單編號并保存在eaOrderRef變量,CTP對報單編號格式有規(guī)定,不能像外匯EA的魔術號碼可隨意自行指定, 否則報單會失敗,所以EA需調(diào)用getOrderRefCTP函數(shù)生成EA報單編號。

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

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

期貨發(fā)出的MQL圖表事件的ID都是3000,EA需要在OnChartEvent函數(shù)中只處理ID是3000的事件。EA通過OnChartEvent函數(shù)的sparam參數(shù)獲得MQL圖表事件中的交易所成交回調(diào)

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

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

定義一個字符串數(shù)組chartEvents。

MT5通過mt5ctp.dll得到交易所對該報單的處理結果(即報單回調(diào)),之后會把這些回調(diào)作為MQL圖表事件發(fā)送給全部圖表,EA 通過MQL圖表事件響應函數(shù)OnChartEvent得到這些回調(diào)(即下圖中的4)。

把sparam對應的字符串按逗號拆分后保存到字符數(shù)組chartEvents[],這樣chartEvents[0]就是"OnRtnTrade"。因為在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)。

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

遍歷chartEvents數(shù)組,取出成交回調(diào)中的合約,多空,開平,成交價格,成交手數(shù),成交時間。

根據(jù)成交回調(diào)中的成交手數(shù)計算倉位。

獲得成交回調(diào)中的成交價格用于計算倉位盈虧

持倉后開始計算止盈:

獲得當前最新價格的MqlTick結構體。

獲得當前最新價格的MqlTick結構體中的最新價。

獲得當前最新價格的MqlTick結構體中的賣一價。

當最新價小于空倉開倉價格4個跳就平倉止盈。

也可以用錢計算止盈,先計算最新價小于空倉開倉價格多少個跳, 再乘以每跳多少錢,如果大于50元就平倉止盈。

生成平空多單的eaOrderRef EA報單編號。

因為本例子是10秒后平倉,即是平今倉,而上期所和能源中心區(qū)分平今倉昨倉,所以這些交易所的合約參數(shù)需要使用mt5ctp.mqh頭文件中定義的枚舉ENUM_CTP_CLOSE_POSITION_TODAY, 其他交易所合約不用區(qū)分平今倉昨倉,參數(shù)用mt5ctp.mqh頭文件中定義的枚舉ENUM_CTP_CLOSE_POSITION。

上期所、能源中心和中金所沒有市價單,這些交易所的合約用漲停價發(fā)限價單平倉,其他交易所則發(fā)市價單平倉。

通過SYMBOL_SESSION_PRICE_LIMIT_MAX屬性獲得漲停價。

如果達到止盈條件,則調(diào)用mt5ctp.dll的接口函數(shù)sendOrderLimit用漲停價報限價單平倉。

持倉后開始計算止損:

當最新價大于空倉開倉價格3個跳就平倉止損

也可以用錢計算止損,計算當最新價大于空倉開倉價格多少個跳, 再乘以每跳多少錢,如果大于50元就平倉止損。

止損其余程序和止盈同理。



MT5 EA交易期貨-止盈止損的評論 (共 條)

分享到微博請遵守國家法律
雷山县| 沁源县| 楚雄市| 克拉玛依市| 阿城市| 金堂县| 桃园市| 丹东市| 清流县| 德庆县| 阜城县| 无锡市| 奉新县| 韶山市| 得荣县| 迭部县| 巩留县| 饶阳县| 烟台市| 东平县| 桓台县| 太康县| 禹州市| 通许县| 万年县| 吉安县| 沂南县| 南京市| 应用必备| 博湖县| 固原市| 高陵县| 井研县| 宁乡县| 南通市| 拜泉县| 同心县| 大关县| 上高县| 铜山县| 安泽县|