您现在的位置: 比特财富网 >> 财经 >  >> 外匯
在開發一個EA之前,需要對EA的策略進行規劃

在開發一個EA之前,需要對EA的策略進行規劃,做到有的放矢。www.emoneybtc.com

 

EA的策略包括一下幾點:

1、開倉:當行情滿足什麼條件時,EA進行開倉,何時做多,何時做空。

2、平倉:當行情滿足什麼條件時,EA要進行平倉。

3、止損和止贏:EA是否需要設置止損和止贏,如何設置。一般來說,止損是最好要設置的,以防止行情突變所帶來的無法預料的損失。

不同於股票交易,外匯交易在下單的時候,可以設置止損價位和止贏價位,當價格達到止損或止贏價位時,交易單自動平倉。

以做多為例,假設買價為1.5000,止損價為1.4800,止贏價為1.5100,那麼這裡止損就是200點,止贏就是100點。

4、加碼:是否要加碼,何時加碼。

 

接下來,以Larry Williams在《短線交易秘訣》中講到的一個交易方法來作為本例的交易策略。

if

語句:當括號()內的條件成立時,執行 { } 內的代碼

if語句:當括號()內的條件成立時,執行 { } 內的代碼

==運算符:相等判斷

&&運算符:並且判斷

Hour函數: 當前時間的小時部分, 0~23

Minute函數:當前時間的分鐘部分, 0~59

 

Open[0]表示當前周期的開盤價,

Close[1] 表示上一周期的收盤價,

Open 和 Close 都是預定義數組,分別表示開盤價和收盤價, 0 和 1 是周期數,關於數組的詳細描述,請參閱後續章節。

本 ea 是運行於 H1 周期的,

Open[0] 表示當前一小時的開盤價,

Close[1] 表示上一小時的收盤價;當滿足行 8 列出的條件時,

Open[0] 等同於星期一的開盤價,

Close[1] 等同於上周五的收盤價。

行 11 :下買單。

行 13 :下賣單 OrderSend函數用於下單,

 

各參數含義如下:

參數 1 :貨幣對。

Symbol 函數返回 ea 附著的當前貨幣對。

參數 2 :單據類型。 OP_BUY:買單 OP_SELL:賣單

OP_BUYSTOP: BUYSTOP 單 OP_BUYLIMIT: BUYLIMIT 單 OP_SELLSTOP: SELLSTOP 單 OP_SELLLIMIT: SELLLIMIT 單 參數

 

3 :下單大小。本例為 0.1 手

參數 4 :交易價格。

對於買單而言,最低交易價格是 Ask ;對於賣單,最高交易價格是 Bid

參數 5 :滑點。

由於發生 OrderSend 指令到單據成交之間有個時間差,在這段時間之類,交易價格可能會發生變動,導致無法按照指定的價格進行成交。

交易者可以在下單的時候指定最終交易價格和原定交易價格之間的最大浮動值,

以確保交易盡快成交。這個值的單位為 Point 。

 

參數 6 :止損價位。為 0 表示不指定止損價。

參數 7 :止盈價位。為 0 表示不指定止盈價。

參數 8 :單據的備注。

參數 9 :單據的 magic 數字。magic 數字用於區分不同 ea 所下的單,具體請參閱後續章節。

 

參數 10 :單據失效時間。僅限掛單,當單據打到後,掛單自動刪除。為 0 表示不指定失效時間。

參數 11 :箭頭顏色。下單成功後, ea 在行情圖表上會用一個箭頭圖標標注下單位置。買單為藍色 Blue ,賣單為紅色 Red 。

返回值:單據編號。如果返回值為 -1 表示下單失敗。此處沒有檢查下單結果。

行 16 :選定第一個單。在對單據進行後續操作之前,一般需要有個選定的動作。

 

OrderSelect函數:選定一個單據

參數 2 :選定標准。

SELECT_BY_POS 按照單據序號選定,所有的單據都是從 0 開始編序號的。

SELECT_BY_TICKET 按照單據編號選定。

SELECT_BY_POS 和 SELECT_BY_TICKET 都是整數常量,關於整數和常量的概念,請參閱後續章節。

參數 1 :要選定的單據的值,具體的值的含義由參數 2 解釋。

 

行 17 :如果當前時間離選定單據的下單時間超過一天,則執行 18~23 行。

TimeCurrent函數:表示當前時間,單位為秒。返回值為從 1970 年 1 月 1 日零點到現在的秒數。

OrderOpenTime函數:返回選定單據的下單時間,單位為秒。

行 18 :如果為買單則按照 Bid 平倉(行 19 ) 行 19 :如果為賣單則按照 Ask 平倉(行 22 )

OrderType函數:返回選定單據的單據類型。

參數 1 :單據編號。

OrderTicket 函數返回當前選定單據的編號 參數 2 :平倉數量。

OrderLots 函數返回當前選定單據的手數。

 

參數 3 :平倉價格。

對於買單為 Bid ,對於賣單為 Ask 。 Ask 和 Bid 是兩個浮點數類型的變量,關於浮點數和變量的概念,請參閱後續章節。

參數 4 :滑點。含義同 OrderSend 中的滑點。

本 ea 的代碼量為 28 行。

考慮到初學者的理解能力,進入的概念是比較少的。

對本 ea 稍加改造,加上少量代碼後,會完整而可靠的實現交易思路,整個代碼量將不會超過 40 行。

 

一般來說,完整的實現一個交易思路所需的 ea 的代碼量是不大的,即便是對於很復雜的交易策略,

對於熟練開發者來說,所需的代碼量也很少會超過 500 行。如果某個交易思想需要過多的代碼量來表達,

那麼很可能是以下兩種情況。

第一情況,邏輯混亂。 mt 平台的 ea 的運行邏輯和人處理交易的邏輯是有些不一樣的。

人在處理交易的時候,講求一個步驟,先開倉,後平倉,這個過程裡面有一個思維的先後延續性。

而對於 mt 平台的 ea 而言,所有的邏輯只有一個 start 函數,

而 start 函數的執行並非是有先後次序的(當然 start 函數內部的代碼是先後執行的),

 

“價格變動一次, start 函數執行一次”是 ea 邏輯的最高歸納。

這種重復性、隨機性和人工交易的步驟性思維是不一樣的,

為了將這種隨機性邏輯轉化為步驟性邏輯,這就要求開發者在程序內部維護並檢查當前交易進度的狀態,

使得每次 start 被執行的時候,按照當前狀態來決定下一步的動作:開倉或是平倉。

在 ea_002 中,行 8 、行 9 、行 17 即是對當前交易狀態的判斷,

特別是行 17 ,如果去掉了這行,將導致在周一開盤的 5 分鐘內, ea 反復的開倉和平倉。

 

-------------------------------------------------------------------------------------------------------------------------

1.1. 基本語法

MT4的源代碼由以下幾部分組成,各部分之間一般用行進行分隔:

1、 注釋

注釋是源代碼中的說明部分,一般是為了說源代碼進行說明,以便更好的閱讀。

注釋不是可執行代碼的一部分,在源代碼編譯生成可執行代碼的時候,

注釋會被忽略。

(1) 單行注釋 以 // 開頭的行,即是注釋。

(2) 多行注釋 以 結束。 之間的部分即是注釋。

2、 預處理指令

以 # 開頭的行,是預處理指令,用於一些特殊的說明和用途。具體描述請參閱後面的“預處理指令”。

3、 全局變量定義

請參閱後面的“變量”部分。

4、 函數

除了以上三個部分, MT 代碼的其他部分都是由若干個函數組成,函數之間可相互調用。

函數則由語句組成,語句之間采用分號進行分隔,這些語句會在後面逐漸提到。

除非特別說明,語句的各個部分是區分大小寫的,即 start 和 START 是不一樣的。

 

關於語句的一些元素的約定如下: 1、 2、保留字

保留字是 MT 語言中預先占用,用戶不可用於變量命名,這些保留字如下,它們會在後續章節中逐漸提到。

bool、 break 、 case 、 color 、 continue 、 datetime 、 default 、 double 、

else 、 extern 、 false 、 for 、 if 、 int 、 return 、 static 、 string 、 switch 、 true 、 void 、 while 。

其中 return 可以把它當做一個保留字,也可以當做一個特殊的函數。

  風險提示:比特財富網的各種信息資料僅供參考,不構成任何投資建議,不對任何交易提供任何擔保,亦不構成任何邀約,不作為任何法律文件,投資人據此進行投資交易而產生的後果請自行承擔,本網站不承擔任何責任,理財有風險,投資需謹慎。
比特財富網 版權所有 © www.emoneybtc.com