1. 昨天搞了一天,參考了買來的書和多個網頁

終於成功寫出了人生中的第一個指標

真是太感動了~ T__T

以下記錄一些做的方法和要注意的地方

=====

我看的是經瑋文化出的<<黃金投資使用METATRADER 4>>這一本,2017.8出的

不得不吐槽一下,因為市面上介紹MT4的書很少,要起頭的選擇實在不多

不然這本書的文字敘述實在很爛,要買前請三思(沒有別的選擇再買吧)

我猜出版前根本完全沒有人潤稿,裡面錯字一大堆,邊看還要邊挑錯字感覺實在很差

大概每1、2頁都可以碰到錯字吧,真的是超爛的出版品質

很多文字都很不通順,好像是英語版的中文一樣,看得實在是讓人很頭大

 

不過不是只有這本是這樣而已,之前去圖書館借這個系列的書來看,品質也是一樣這麼爛

真的是很難想像有這麼爛的出版品質,還過了好幾年都沒有改善的跡象

而且該出版社的網站也是沒在維護的樣子,之前去寄信反映意見還寄不出去

實在是OOXX

===

寫完抱怨文,還是回到寫指標上

我參照書中的第9章「自製指標和程式碼」去寫

完全copy原本的程式碼後,compile後結果指標還是出不來,只好去網路上搜尋有沒有教學文之類的

後來是參照官方論壇的教學文,才成功弄出來

弄不出來的原因是:書上提供的程式碼少打一個"-1",結果判斷有誤,就無法work了

但compile還是會過喔~

只能說這本書實在是.... 完全在增進初學者的debug功力啊 X_X

===

抱怨寫完了,還是來提供一些實用的意見吧

撇開要自己debug外,其實照著這本書還是大致可以寫出指標的

另外也建議參考官方的教學文(跟前面的連結同一篇),不過是全英文的,對英文不好的人可能很頭大

我這裡就大概寫一下這篇要注意的地方,然後配上我自己寫的指標程式碼講解一下(免得被說盜圖什麼的XD)

 

1.

官方教學文一開始寫了『Custom Indicator Structure』,講客製化指標的結構

然後就進入Necessity of Buffers(緩衝器的必要性)

我覺得講的還蠻清楚的,還有附圖

 

接著就講Components of a Custom Indicator(客製指標的組成元件),告訴你具體上要寫那些東西

中間講『Calculating Values of Indicator Arrays Elements (Be Attentive)』,說要注意(be attentive)

就代表這部分是作者覺得很重要的地方~很多原理這邊都有講

然後講到Function IndicatorCounted ( ),這個是必要的元素,中間講了很多原理blablabla的

不過最重要的是:程式碼中要記得加這段就對了!

 

最後重要的判斷則是寫在start()裡面,前面搞半天那些都是設定而已

文章最後面則是講一些細部設定,很值得看

 

覺得文章太長有點煩的話,可以考慮跳過中間太細節的說明

譬如中間有講什麼Tick的時機點,還用了好幾張圖,那個部分我就跳了

基本上,照著裡面的步驟做,就可以順利寫出第一個指標了

 

2.

下面用我自己寫的版本再重新講一次

總而言之,要寫的部分就三個部分

一是宣告區,二是 init ( ) 的部分,三是 start ( ) 的部分

 

前兩個基本上都是設定的部分,照表操課就行

後面start ( ) 的部分才寫實際的判斷,start ( ) 寫完,整個指標就寫完了

 

====

一開始先從宣告區開始講吧

宣告區就是寫在程式最前面,init ( ) 和 start ( )以外的部分

下面就來看圖說故事吧~

 

請參下圖

一開始要設定:指標要畫在圖內(像移動平均線那樣)?還是要分開一個視窗來畫(像KD指標那樣)?

我做的指標是打算要畫在圖內,所以就是如圖中1.的第一行所示的那樣設定

(其實精靈就幫你設好了)

 

然後教學文跟你講MQL4中,一個指標可以使用最多8個Buffer

方法是在開頭就宣告要用幾個Buffer(如1.的第2行)

如我寫的這個指標就是要用到4個buffer,因為我想要畫兩條線,占兩個buffer,另外兩個拿來做數字處理用的

你用不到這麼多,設1、2個也可以,一開始不確定也沒關係,後面寫一寫不夠再回來前面加就好了

教學文裡也是這樣寫的,這些都是基本設定而已,照做就對了,不用卡太久

 

Buffer就是用陣列來實現的,所以你可以自己設幾個陣列來做數字的處理

基本上一條線就占用一個Buffer,如果要多做其他數字處理就多加上去,頂多8個用完

要注意的地方是,Buffer的數量事先要宣告對

如果Buffer的數量沒宣告對的話,到時候compile會過,可是指標就是不會跑出來,一樣不能work

我寫的時候,有一段時間卡關,就是忘了改buffer的數字,還以為是後面的邏輯判斷寫錯了,查了半天

結果根本是前面設定沒注意到而已,zzz,這點請新手們要特別注意

 

同樣參上圖2的部分,接下來是要設定每一個Buffer預設畫出的線的顏色

線的編號就是如圖中那樣,Indicator_color後面直接寫1、2、3、4就好,不用空格

有的Buffer沒有打算畫出來的(或其實也畫不出來),顏色就給他寫clrNONE,這樣保證就不會畫出來

 

下圖3.的部分是設定外部變數的部分,這個一開始大概是沒有的,是後面程式寫一寫才回來前面加的

一開始寫可以不用管這個

圖中4.的部分則是buffer的名稱,一開始寫的時候也是隨便取名,後面再改成一致、辨識性強的名稱就好了

記得要加 [ ]

然後,類型的部分,如果後面buffer要存的是價位,因為通常都是有小數點的,記得用double

如果要存什麼第幾根K棒的話,可以改成int

上面這樣,宣告區的部分就宣告完了!!

 

3.

前面講完宣告區的部分,接著是 init ( ) 的設定部分,這地方也沒涉及到什麼指標的實際判斷,都是照設定走就好了

 

這邊要設定兩樣東西,一是把指標的buffer連起來,再來是決定指標的形式

如下圖所示,因為我用了4個buffer,所以都要設定,但先單看一組來解說就好了

連結的方法就是用上面的函式:SetIndexBuffer ( ),實際說明請直接參說明檔

反正就是輸入順序號碼,然後把buffer名稱填入,就連結完了,照表操課,easy

貼一下說明檔的內容,只填兩個引數就是第二個的形式

接著要設定線的形式,一樣使用上面圖中的函式:SetIndexStyle ( )

填入 順序號碼 跟 要畫的線的類型,就可以了

如果還要設定其他參數,可以後面繼續加上去

分別是 3. 線的形式、4. 線的粗細、5. 顏色

貼一下說明檔的內容

其中,需要特別說明的是線的形式,也就是第二個參數

分別有下面幾種

一般來說,要把每一根Bar的價位都連起來的話,就用 DRAW_LINE 這個引數

DRAW_SECTION 則是用於像zigzag線的那種畫法

可以參考MQL5的說明檔(不是MQL4,MQL4的說明檔沒寫很清楚T_T,不過概念是通的)

 

DRAW_SECTION 是每隔幾根才做連線,有值的Bar才連,沒有值的Bar不管他

(其實還是有值啦,只是是個對我們做交易沒意義的值罷了)

實際上的作法是把不要做連線的Bar輸入一個『空』的值(EMPTY_VALUE)

如下圖所示

EMPTY_VALUE可以直接給定,或是後面在start ( ) 裡寫判斷填入都可

例如我後面是用下面的寫法,做一個判斷,要嘛填入要畫的點的值,要嘛填入EMPTY_VALUE

 

回到 init ( )的最開頭的圖

Buffer1~4,同樣的事情做四次,

複製貼上,改參數值,這樣這部分就搞定了!!

 

PS:後面記得回傳 0,因為 init ( ) 的回傳值是 INT,網路上有些教學文的CODE是沒寫 0 的,怪怪

===

寫得有點累,下一篇再繼續寫剩下的部分吧 ~_~"

 

 

 

arrow
arrow

    迷途工程師 發表在 痞客邦 留言(1) 人氣()