- 昨天搞了一天,參考了買來的書和多個網頁
終於成功寫出了人生中的第一個指標
真是太感動了~ 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 的,怪怪
===
寫得有點累,下一篇再繼續寫剩下的部分吧 ~_~"
留言列表