ABCDE幕後製作花絮:AmiBroker與AFL使用觀感與心得
目錄【開場白】
【先從AFL這語言本身談起】
【再談談AFL的說明文件】
【再談談幾項細微問題】
【其它注意事項】
【做ABCDE的最終感言】
【對某些軟體的小小抱怨:笑死人的設計】
【開場白】
這篇花絮,算是答謝曾經棒場過的大大們。
其實自己接觸AmiBroker與AFL不算久,以下有些東西是花時間摸索出來,也許能幫助初學者省下一些自行摸索的時間。
部份內容在User's Guide中也有,只是自己覺得特別重要,故在此點出來。
主要偏重在AFL方面,是在製作ABCDE的過程,以及之前使用AFL所碰到的一些狀況。 【先從AFL這語言本身談起】
※使用AFL應有的幾點基本認識
AFL不是「一般性」的電腦程式語言,而是有「針對性」的,主要針對股市數據的數列做處理。
所以使用AFL時,千萬別以使用一般電腦程式語言的方式來看待與思考問題。
而是應以如何處理股市數據的角度與觀點來思考問題如何處理。
也不要以一般程式語言的標準去要求AFL要能達到某些功能,這種要求可能不切實際,因語言的本質上是有些異差。但看似AFL無法達成的功能,也許也能用不同的作法來實現。
有了以上的幾點認識,這樣才不致有時對AFL產生誤解。如果以前學過其它程式語言,也許覺得AFL不能這樣不能那樣,用起來很蹩腳,事實上也有可能是自己還沒搞清楚這其中的邏輯。
User' Gude中「Understanding how AFL works」
這段解釋AFL的運作方式對初學者是很重要的,它解釋AFL如何處理股市的數據數列,這數列換句話說,也就是一種陣列
所以AFL中很多function的傳入參數是陣列,傳回值也是陣列,道理在此
以下提幾個實際例子做為上述的補充說明。我曾以一般程式語言的使用習慣,在AFL的陣列中存放字串,發現行不通而感到納悶,但當想到它的陣列本來就是用來存放股市數據,而股市數據的型態原本就是數值而不是字串時,就莞然一笑,原來是自己錯用心了。它的陣列是用來存數值的,而不能存字串,這樣想來也是合情合理。致於處理字串,它有其它專門處理字串的function,像WriteIf()。
了解了AFL的運作,對於If與IIf()用法的區分才會清楚,不致搞錯。以及IIf()與WriteIf()運作方式的異同才能認識正確。
雖然AFL的語法與某些程式語言很像,但畢竟只是「像」而已,並不代表「一樣」,有時不能將原本在其它語言用慣的語法或習慣直接套過來用,前面就提到一個例子,這裡再提另一例:fuction中回傳值的return用法,與類似語言的用法是有點不一樣的,不能像這樣用:function DemoFunction(p){
if (0==p)
return 0;
else
return 1;
}而要這樣用:function DemoFunction(p){
if (0==p)
result=0;
else
result=1;
return result;
}return關鍵字必須放在最後面。這種細微說明在User's Guide中似乎並沒有特別提醒使用者,要自己去發現,像這類的情況也算不少。
所以如果原本有寫程式底子的人,再學AFL當然是較有利,但某些特別要區別的地方必須搞清楚,否則有時可能反而比沒底子的人容易陷入混亂。 【再談談AFL的說明文件】
整體來講,對於有程式底子的人,雖然AFL並不難學,主要的說明文件都在User's Guide中,AFL說明這部份大致上也還算好,但某些細部說明仍是欠缺,不一定很詳細,就像前面提到的一般。另外,它的某些範例程式,也會有細微錯誤,自己曾在這方面吃了幾次虧,所以建議當在自己的程式中採用它的範例碼時,最好要自己再仔細檢查一下其中的程式碼是否正確。
在像某些軟體領域的網路討論區中,如果有人對於某項軟體提出問題,而這答案其實已清楚記載在說明手冊中,可能會有人簡單回答他幾個字母:RTFM (Read The Fxxking Manual),意思是叫他先回頭查一下說明手冊。
自己為了做ABCDE,RTFM是免不了,已大略將User's Guide讀過一遍,但某些問題不是RTFM之後就能找到Fxxking Answer。當說明中不清楚時,與別人討論也得不到滿意的答案時,也許也可以去找別人的東西來觀摩一下,嘗試從其中找尋答案,也許會有意料外的答案或解決方案,或許也可激發出自己不同的想法。就像這樣,除了coco這裡與海洋部落,自己還去過這些地方觀摩過:
Users' Knowledge Base
AmiBroker Yahoo Group
AFL Libray
以上在AmiBroker官網上都可找到連結
【再談談幾項細微問題】
※整數的使用
其實AmiBroer並沒有所謂的整數型態(請參見StrFormat()說明),數值一律是以浮點數的方式處理。
※AB的數值儲存方式
我在第一次測試從AB匯出資料時,因為沒指定好小數位數,就發現到很奇怪的結果,為何原先匯入的資料只到小數兩位,如10289.10,匯出卻看到像10289.099609375的結果。這是AB儲存數值的方式所造成,其實只好指定好小數位數,輸出值就正常。
※在使用浮點數時,有時也要注意…
你若檢視ABCDE中的程式碼,也許會注意到有一段比較小數數值的判斷式寫法很奇怪(其實這段也可用別種寫法,看起來會比較直覺)。
因為兩個存放不同運算過的浮點數的變數a, b表面上看都是12.12,看來是相等,這是因顯示時只取二位小數的結果(我們在這樣看習慣後,通常會如此以為)。但實際上a與b不見得相等,即(a==b)不見得成立的,a也許是12.1199978,而b也許是12.12000123。
※四捨五入
板上有人問過這個問題,AB沒有適合的小數四捨五入function。其實個人後來想想,感覺上也沒這必要,因要做四捨五入的動作,幾乎都是運算到最後,要將數字顯示出來,而做顯示的function,如NumToStr()就可以達成這樣的作用。除非很在意小數位數的精確度,否則交給NumToStr()這類function去處理即可。
其實目前一般與金錢有關,做小數進位的做法,應該是採用Banker's round居多,而不是我們在小學時所學到的四捨五入。Banker's round的做法是「四捨六入,五無後留雙」,在此提出供參考。
※沒有提供debugger?有問題怎麼查?
有一天檢查程式錯誤時,突然想到了這個問題。的確是沒有很完整的debug工具,只有簡單的debug viewer與_TRACE這類作法,而自己目前也還沒用過。其實自己是運用一些debug技巧,把錯誤輸出檢視,大致上也還過的去。 【其它注意事項】
最後提一些與AmiBroer相關的其它注意事項,有些東西自己不是很確定,故僅考參考,如果有不對之處,也歡迎指正。有些事項是之前曾在AB板上曾提過的。
AmiBroker儲存的成交量無法大於2147483648。像自己自行從Yahoo下載的國際股市資料,若直接匯入AmiBroker,就會發現成交量的顯示很奇怪,後來比對原始匯入的資料,才發現這問題。要自行處理一下,也許像除以1000後取整數再轉入會較合適。
AFL中別用中文,只用Ansi編碼格式。
function無法做遞迴,需此功能可改用plug-in。
function無法傳回多個變數。這可能要用其它方式來變通。
user defined function無法讓參數有預設值。
在基本資料欄位中,似乎沒有股本這個欄位。這倒讓我有點意外。
【做ABCDE的最終感言】
其實很希望AmiBroker本身就提供了ABCDE裡面的部份功能,這樣就不必自己這麼辛苦,做這些東西,感覺好像自己動手打造航空母艦,而這還只是航空母艦中的一個小小元件。
但在這過程,也實際感受到AmiBroker提供了開放式的架構,可供使用者自行延伸功能,算是不錯的設計。比起以下所提,可說是夠彈性了。
【對某些軟體的小小抱怨:笑死人的設計】
自己算算也用過不少家的股市軟體,其中也包含價格並不算低的付費軟體,有些還會有堪稱笑死人的白痴設計,提出幾點也讓各位笑一下。
1.某家知名券商看盤軟體,K線圖上,其歷史K線竟看不到漲跌點數,只能看到當天的漲跌。
2.某個付費軟體,週線圖竟有7%漲停板的顯示(當週K線漲過7%就顯示為漲停)。花了大把銀子,竟買到這種令人啼笑皆非的功能,用了幾年也不見改善。常害我以為自己的股票漲停板,仔細一看才知道是誤會一場。 *
大大厲害唷!! {:5_266:} 真真多謝 fygul大! AmiBoker Fomulas 教學能這樣的深入淺出,真是“好嘢”! 犀利! 請教各位高手
amibroker 與 multichart有何差異?
對新手而言哪一種比較容易上手? 請教各位高手
amibroker 與 multichart有何差異?
對新手而言哪一種比較容易上手? ...
JadeFeng 發表於 11-4-27 09:13 PM http://www.coco-in.net/images/common/back.gif
小弟不是高手
但... MC 會比較容易上手唷
(先不論資訊源、軟體費用的問題) {:5_266:} 對新手如我來說則都是從頭起,所以我選擇:
* 多人使用,普遍的技術分析軟件(教材多,討教容易)
* 購買容易
* 佔用電腦資源(CPU,RAM)小
* 鏈接容易,功能是開放式的
* 顯示快(AB可以說是最快的) f大辛苦了!
之前寫一篇Ami接ABTW的step by step manual就累的半死了
跟您的大工程比真的是差太多
小的冒昧 如果有空的話
可以分享一下用過眾多軟體的心得嗎...{:4_627:} 回復 10# gomegoer
寫這種東西的確要花不少時間,一方面寫給別人看,一方面也給自己做記錄,免得自己老人痴呆症提早發作,做過的東西都忘了{:4_155:}
不知gomegoer所指
可以分享一下用過眾多軟體的心得嗎...
是指哪方面?是我前面提到【對某些軟體的小小抱怨:笑死人的設計】中所提到股市軟體嗎?
其實這部份有些是券商的軟體,也不敢講有什麼心得,用的不甚深入
至於我用過付費軟體,可能也不是大家常見的東西。
這方面就以自己的觀點而言,只能說各家的設計各有千秋,所著重的方向不一樣。
就自己用過多種股市軟體的經驗,要去習慣或學習每個軟體的不同使用習慣也很花時間。
所以如果有自己用慣了的軟體,也能符合自己操作與需求的,這是最好的狀況。不太需要去學自己用不到的軟體功能,有用到時再來學也不遲,這點供參考。 回復 11# fygul
關於軟體的方面
因為小弟沒有用過國內一些有名的付費軟體
比如說 轟天雷、精業、奇狐等等之類的
想當然爾 付費 又能存活在市場上的軟體
一定有它的優點所在
所以好奇想知道它們獨特的功能有哪些
感謝f大的回覆{:4_195:} 回復 12# gomegoer
比如說 轟天雷、精業、奇狐等等之類的
想當然爾 付費 又能存活在市場上的軟體
一定有它的優點所在
所以好奇想知道它們獨特的功能有哪些
我用軟體剛好都不在上述之列{:4_186:}
它們的獨特功能應該可在該公司的產品網頁上可查到
只是光是同一家的不同產品就可能讓人眼花瞭亂了,因不同產品有不同用途與功能,也許直接問公司才會比較明白
我就稍提一下一般付費的盤後軟體比較可能會有的獨特功能好了
一、五分盤資料。這種通常保留三個月,太久硬碟恐怕也要塞爆。
二、主力庫存等籌碼指標:主力庫存可能每家軟體公司的算法不一法。主力庫存增加的股票,通常表示有主力進場,上漲機率較高。這項也許是使用者要使用付費軟體的其中一個最大原因。這項功能也可能會與券商進出資料一起。
三、基本面資料。詳細的財報資料也許要另付費購買。
有些軟體可能還有選股功能、使用者自訂指標,或該軟體公司自行寫的特殊指標。詳細的國際盤商品指數也可能要另付費
若付費的即時盤,有些可能還有即時選股的功能
就大致談到這些,詳細的還是請自行看各產品的介紹囉 什麼是ABCDE? Amibroker plugin? 什麼是ABCDE? Amibroker plugin?
zoolander 發表於 11-7-10 12:30 PM http://www.coco-in.net/images/common/back.gif
在這裡AmiBroker Chart Display Enhancement
http://www.coco-in.net/thread-9718-1-5.html