您现在的位置: 比特财富网 >> 财经 >  >> 外匯
MT4編程:如何將外匯技術指標轉化為智能交易系統(外匯EA)
外_匯_邦 WaiHuiBang.com

第一部分:指標

  

  為了能賺錢而不是虧損,無論是專業的交易商還是個體,都在研究各和總結各種種的規律,並做成指標,我們經常會發現一些指標圖線看起來很完美,於是都會想到要根據指標的變化進行交易。www.emoneybtc.com

  但這樣做會賺錢嗎?

  能否賺錢,我們就要看這些指標有沒有作弊。即確定指標是否有未來函數的計算,也就是說指標會不會根據現在的K線,計算後將指標在歷史K線上標示做更改。比如原來是賣的提示,改為買(恐怖吧)。(當然還有一些EA特有的環節也會影響盈利問題,在這裡不講)

  確定是否有未來函數的方法有兩種:

  1.白盒校驗(即查看源碼)

  直接看源碼中的循環部分,如果有修改歷史曲線數組的行為,則可以立刻斷定有未來函數。

  2.黑盒觀察

  當沒有源碼的時候,可以將指標加載到1分鐘的圖線上,連續不斷觀察其標示的變化,尤其注意與當前K線狀態最接近的歷史K線標示的變化。如果隨著當前K線的變化出現過歷史變化更改,則也可以確定有未來函數。

  

  指標EA化之前必須要確認的事情:

  如果一個指標含有未來函數,那麼這個指標是沒有多大意義的。也就是說,我們要將指標改為EA前,必須確認這個指標是不含未來函數的,這樣指標EA化才有意義。

  

  第二部分 指標EA化

  

  接下來將指標EA化大致的做法是:

  在EA中通過函數iCustom讀取這個指標的當前K線輸出值,得出當前的狀態,來決定是否入場或者平倉並反向入場。

  

  iCustom的具體用法:

  指標一般都是曲線或者箭頭兩種。在這裡我們要把曲線和箭頭都看成是數組就容易理解了。

  對於指標來說每一條曲線或者箭頭都是寫在與每個K線對應的數組中的,也就是說一條曲線對應一個數組,一個方向的箭頭也是對應一個數組(有箭頭的數組值是當時的價格,沒箭頭地方的數組值是“空”)

  iCustom MT4的幫助裡說的是:“計算指定的客戶指標並且退回它的值”,即這個函數可以讓你獲取指定指標的第幾個數組對應第幾根K線上的計算數值。

  具體如下:

  double iCustom(string symbol, int timeframe, string name, ..., int mode, int shift)

  

  計算指定的客戶指標並且退回它的值。必須在terminal_directory\experts\indicators目錄內編寫客戶指標(*.EX4文件)。

  參量:

  symbol - 計算指標數據上的貨幣對名稱。NULL表示當前貨幣對。

  timeframe - 時間周期。可以時間周期列舉任意值。0表示當前圖表的時間周期。

  name - 客戶指標完整的程序名稱。

  ... - 參量設置(如果需要)。通過的參量和他們的順序必須與desclaration命令和客戶指標的外部可變物的種類對應。

  mode - 索引行。從0到7並且必須對應以其中一個使用的索引的 SetIndexBuffer 函數。

  shift - 從顯示緩沖采取的值的索引(轉移相對當前柱特定相當數量期間前)。

  示例:

  double val=iCustom(NULL, 0, "示例Ind",13,1,0);

  double va2=iCustom(NULL, 0, "示例Ind",13,0,1);

  

  例如:一個指標,畫了兩條曲線,則可以用iCustom取得這個指標在第4根K線上對應的第一條曲線的數值。

  我們現在已經可以根據自己的想法去獲得一個指定指標的任何K線上的狀態數值了。那麼下一步我們就要開始EA的概念。

  因為EA只針對當前價格狀態下的動作進行控制。所以一般而言我們就取指定指標在當前K線下的計算數值用於EA的條件判斷。

  如果你認為當前K線沒有結束,其數值始終在變化,有可能一會有訊號一會沒訊號,那麽你可以采用取前一K線的指標數值的方式作為基礎。(如果用當前K線指標數值作為條件會有不確定的結果,但如果用前一K線數值做條件則有“錯過最佳入場點”的問題。這是需要程序設計者權衡的問題。)

  另外的一個問題,就是怎末去判斷指標輸出的數值與我們肉眼看到的訊號一致起來的問題。

  如果參考的指標是一種變色線,則一定是一種顏色一個數組的方式疊加起來顯示的。我們在取其數值的時候只需要看看不同顏色的數組的數值比較一下就知道其結果是哪種顏色,並作為EA的條件進行動作就行了。

  如果是箭頭的方式,則一樣是去取其數值,無箭頭的K線上指標對應的數值是“空”,有箭頭的地方數組對應的數值肯定不是空。用這個來判斷是否發生了訊號就行了。

  比如雙色線,就一定是兩個數組分別顯示不同顏色,當指標認為應該顯示其中一種顏色的時候就將這個顏色對應的數組在當前K線中的數值設成當前價。反之則設為“空”。這樣循環一遍後,你肉眼看到的就是變色線了。

  現在我們可以輕松獲得指標的當前訊號狀態了!

  下一步就是結合進EA中,就是把指標中的數組值拿過來。

 

  第三部分 EA 編程邏輯

  EA就是一個循環往復的過程。每來一個價格就運行一次。

  EA是電腦,並不知道你現在的倉位情況也不知道指標的情況,除了計算什麼都不知道,一切都是編程者賦予的。因此,編程者腦子裡一定要建立一種綜合狀態的概念。

  EA的一開始一定要先進行倉位的情況檢查。大致的邏輯如下:

  1. 先查出持倉情況和持倉單的方向。

  2. 然後獲得指標的數值。

  3. 判斷並操作。

  持倉狀態下:根據持倉單的方向進行對應來判斷反向訊號是否發生。如果發生則平倉並反向入場。如果沒發生則直接返回,等待下一次價格的而到來。

  空倉狀態下:則兩個方向的訊號都做判斷,哪邊發生了就按那邊的方向入場。

  4. 其他的的細節

  不論入場還是出場都要在發出動作後馬上判斷是否正確執行的判斷。如果沒有執行成功則一定要立刻放棄後面的操作直接返回。等待下一個價格來的時候在此發出同樣的動作。

  另外說明的是數據是自動更新的。

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