第一部分:指標
為了能賺錢而不是虧損,無論是專業(yè)的交易商還是個體,都在研究各和總結(jié)各種種的規(guī)律,并做成指標,我們經(jīng)常會發(fā)現(xiàn)一些指標圖線看起來很完美,于是都會想到要根據(jù)指標的變化進行交易。
但這樣做會賺錢嗎?
能否賺錢,我們就要看這些指標有沒有作弊。即確定指標是否有未來函數(shù)的計算,也就是說指標會不會根據(jù)現(xiàn)在的K線,計算后將指標在歷史K線上標示做更改。比如原來是賣的提示,改為買。(恐怖吧)。(當然還有一些EA特有的環(huán)節(jié)也會影響盈利問題,在這里不講)
確定是否有未來函數(shù)的方法有兩種:
1.白盒校驗(即查看源碼)
直接看源碼中的循環(huán)部分,如果有修改歷史曲線數(shù)組的行為,則可以立刻斷定有未來函數(shù)。
2.黑盒觀察
當沒有源碼的時候,可以將指標加載到1分鐘的圖線上,連續(xù)不斷觀察其標示的變化,尤其注意與當前K線狀態(tài)最接近的歷史K線標示的變化。如果隨著當前K線的變化出現(xiàn)過歷史變化更改,則也可以確定有未來函數(shù)
指標EA化之前必須要確認的事情:
如果一個指標含有 未來函數(shù),那么這個指標是沒有多大意義的。也就是說,我們要將指標改為EA前,必須確認這個指標是不含未來函數(shù)的,這樣指標EA化才有意義。
第二部分:指標EA化
接下來將指標EA化大致的做法是:
在EA中通過函數(shù)iCustom讀取這個指標的當前K線輸出值,得出當前的狀態(tài),來決定是否入場或者平倉并反向入場。
iCustom的具體用法:
指標一般都是曲線或者箭頭兩種。在這里我們要把曲線和箭頭都看成是數(shù)組就容易理解了。
對于指標來說每一條曲線或者箭頭都是寫在與每個K線對應的數(shù)組中的,也就是說一條曲線對應一個數(shù)組,一個方向的箭頭也是對應一個數(shù)組(有箭頭的數(shù)組值是當時的價格,沒箭頭地方的數(shù)組值是“空”)
iCustom MT4的幫助里說的是:“計算指定的客戶指標并且退回它的值”,即這個函數(shù)可以讓你獲取指定指標的第幾個數(shù)組對應第幾根K線上的計算數(shù)值。
具體如下:
double iCustom(string symbol, int timeframe, string name, ..., int mode, int shift)
計算指定的客戶指標并且退回它的值。 必須在terminal_directoryexpertsindicators目錄內(nèi)編寫客戶指標(*.EX4文件)。
參量:
symbol-計算指標數(shù)據(jù)上的貨幣對名稱. NULL表示當前貨幣對.
timeframe - 時間周期。 可以時間周期列舉任意值. 0表示當前圖表的時間周期.
name - 客戶指標完整的程序名稱.
... - 參量設(shè)置(如果需要)。通過的參量和他們的順序必須與desclaration命令和客戶指標的外部可變物的種類對應。
mode - 索引行。 從0到7并且必須對應以其中一個使用的索引的 SetIndexBuffer 函數(shù).
shift - 從顯示緩沖采取的值的索引(轉(zhuǎn)移相對當前柱特定相當數(shù)量期間前).
示例:
double val=iCustom(NULL, 0, "示例Ind",13,1,0);
double va2=iCustom(NULL, 0, "示例Ind",13,0,1);
例如:一個指標,畫了兩條曲線,則可以用iCustom取得這個指標在第4根K線上對應的第一條曲線的數(shù)值。
我們現(xiàn)在已經(jīng)可以根據(jù)自己的想法去獲得一個指定指標的任何K線上的狀態(tài)數(shù)值了。那麼下一步我們就要開始EA的概念。
因為EA只針對當前價格狀態(tài)下的動作進行控制。所以一般而言我們就取指定指標在當前K線下的計算數(shù)值用于EA的條件判斷。
如果你認為當前K線沒有結(jié)束,其數(shù)值始終在變化,有可能一會有訊號一會沒訊號,那麼你可以采用取前一K線的指標數(shù)值的方式作為基礎(chǔ)。(如果用當前K線指標數(shù)值作為條件會有不確定的結(jié)果,但如果用前一K線數(shù)值做條件則有“錯過最佳入場點”的問題。這是需要程序設(shè)計者權(quán)衡的問題。)
另外的一個問題,就是怎末去判斷指標輸出的數(shù)值與我們?nèi)庋劭吹降挠嵦栆恢缕饋淼膯栴}。
如果參考的指標是一種變色線,則一定是一種顏色一個數(shù)組的方式疊加起來顯示的。我們在取其數(shù)值的時候只需要看看不同顏色的數(shù)組的數(shù)值比較一下就知道其結(jié)果是哪種顏色,并作為EA的條件進行動作就行了。
如果是箭頭的方式,則一樣是去取其數(shù)值,無箭頭的K線上指標對應的數(shù)值是“空”,有箭頭的地方數(shù)組對應的數(shù)值肯定不是空。用這個來判斷是否發(fā)生了訊號就行了。
比如雙色線,就一定是兩個數(shù)組分別顯示不同顏色,當指標認為應該顯示其中一種顏色的時候就將這個顏色對應的數(shù)組在當前K線中的數(shù)值設(shè)成當前價。反之則設(shè)為“空”。這樣循環(huán)一遍后 你肉眼看到的就是變色線了
現(xiàn)在我們可以輕松獲得指標的當前訊號狀態(tài)了!
下一步就是結(jié)合進EA中,就是把指標中的數(shù)組值拿過來
第三部分:EA 編程邏輯
EA就是一個循環(huán)往復的過程。每來一個價格就運行一次。
EA是電腦,并不知道你現(xiàn)在的倉位情況也不知道指標的情況,除了計算什么都不知道,一切都是編程者賦予的。因此,編程者腦子里一定要建立一種綜合狀態(tài)的概念。
EA的一開始一定要先進行倉位的情況檢查。大致的邏輯如下:
1.先查出持倉情況和持倉單的方向。
2.然后獲得指標的數(shù)值。
3.判斷并操作
持倉狀態(tài)下:根據(jù)持倉單的方向進行對應來判斷反向訊號是否發(fā)生。如果發(fā)生則平倉并反向入場。如果沒發(fā)生則直接返回,等待下一次價格的而到來。
空倉狀態(tài)下:則兩個方向的訊號都做判斷,哪邊發(fā)生了就按那邊的方向入場。
4.其他的的細節(jié)
不論入場還是出場都要在發(fā)出動作后馬上判斷是否正確執(zhí)行的判斷。如果沒有執(zhí)行成功則一定要立刻放棄后面的操作直接返回。等待下一個價格來的時候在此發(fā)出同樣的動作。
另外說明的是數(shù)據(jù)是自動更新的。