如何將技術指標轉化為程式交易系統(EA)

 <<第一部分:指標>>
  
  為了能賺錢而不是虧損,無論是專業的交易商還是個人,都在研究總結種種的規律,並做成指標,我們經常會發現一些指標線圖看起來很完美,於是都會想到要根據指標的變化進行交易。
  但這樣做會賺錢嗎?
  能否賺錢,我們就要看這些指標有沒有作弊。即確定指標是否有未來函數的計算,
     也就是說指標會不會根據現在的K線,計算後將指標在歷史K線上標示做更改。比如原來是賣的提示,改為買或消失(恐怖吧)。

  確定是否有未來函數的方法有兩種:
  1.白盒校驗(即查看程式碼)
   直接看程式碼中的迴圈部分,如果有修改歷史曲線陣列的行為,則可以立刻斷定有未來函數。
  2.黑盒觀察
   當沒有程式碼的時候,可以將指標載入到1分鐘的線圖上,連續不斷觀察其標示的變化,尤其注意如果隨著當前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_directoryexpertsindicators目錄內編寫客戶指標(*.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就是一個循環往復的過程。每來一個價格(tick)就運行一次。
  EA是程式,並不知道你現在的倉位情況也不知道指標的情況,除了計算什麼都不知道,一切都是編程者賦予的。因此,編程者腦子裏一定要建立一種綜合狀態的概念。
  EA的一開始一定要先進行倉位的情況檢查。大致的邏輯如下:
  1. 先查出持倉情況和持倉單的方向。
  2. 然後獲得指標的數值。
  3. 判斷並操作。
   持倉狀態下:根據持倉單的方向進行對應來判斷反向訊號是否發生。如果發生則平倉並反向入場。如果沒發生則直接返回,等待下一次價格的而到來。
   空倉狀態下:則兩個方向的訊號都做判斷,哪邊發生了就按那邊的方向進場。
  4. 其他的的細節
   不論進場還是出場都要在發出動作後馬上判斷是否正確執行的判斷。如果沒有執行成功則一定要立刻放棄後面的操作直接返回。等待下一個價格來的時候在此發出同樣的動作。

 

arrow
arrow
    全站熱搜

    fxcashflow 發表在 痞客邦 留言(1) 人氣()