本帖最後由 jinace 於 16-8-11 13:23 編輯
AmiBroker試用心得
最近有了進軍海外市場的念頭,第一個讓我想到的就是amibroker,因為寬大提供了很完整的solution.
基本上操作起來非常順手,選單介面很直覺,速度也很快,評估的這段時間還發現很多教學資源都來自印度朋友,關鍵字搜尋好像印度也名列前茅,印象中印度人的數學可是一級棒的!
---
對AFL(即AmiBroker使用的程式語言)的一些評估:
AFL每一次的執行都是一個全新的狀態,也就是說每一次被執行時與上一次執行都是不相關的,也就是說一般宣告的number或array都沒辦法延續到下一次的執行,除非用StaticVar或從外部載入
AFL會在不同的狀況下被要求執行(觸發),觸發的原因可以透過Status("actionEX")得知
BarCount是AFL執行時能夠存取的陣列元素(K棒)數量,但不一定等於全域的K棒數量,AFL會自動計算出一個適合該AFL運算的一個最佳size(或透過SetBarsRequired指定),例如有一百天的資料,但只需要顯示最後10天的5日均線,BarCount就有可能是10+5.也就是說BarCount是一個區間的K棒數量,這個區間會是N到全域的最後一根K.
通常拿AFL做backtest只會執行一次,所以不會察覺BarCount在變動,但在圖表(chart)中就會發現BarCount可能隨著可視區間一直在調整,也就是說系統可能每次都會給AFL不同區間的陣列做運算.
這樣的做法會有一些問題,可以試試看ema100 = EMA(C, 100);當可視區域的K棒從最少慢慢調多時,ema100的值也會跟著變動,因為ema是一個累計運算,如果不從頭算起就會有誤差,雖然誤差不大,但會造成一些難以掌控的因素.
陣列取值除了指定索引外也很常用函數取值
LastValue取得最後一個值
SelectedValue取得點選值(highlight位置或最後位置)
其中SelectedValue為一些函數內部預設的取值方式
範例:
LastValue(C) == C[BarCount-1] == C[Lastvalue(BarIndex())] == 最後的C值
---
花了五六天研究評估,到今天想棄守了,可能打算先擱置再試試看multicharts或tradestation,把我評估的一些缺憾與不適應跟大家分享一下:
1.AFL的生命週期僅只有執行的當下
無法保留變數做累積的運算,只能用StaticVarSet,但我覺得這個挺難用的,因為一個AFL不會只有一個實體,必須指定一個變數名稱讓每個實體不會衝突,而且這個變數的生命週期是從建立後就一直存在硬碟中,除非執行函數刪除.具有累積意義的變數有時候蠻需要init或reset的...
2.1.歷史資料不是依時序執行
我所謂的依時序執行是從第一天逐步執行到最後一天,但AFL一次的執行就解決了所有的歷史資料,陣列式的運算在數學統計上確實很好寫,但逐元素的邏輯運算就變得有些綁手綁腳.
2.2.思考邏輯的轉換
通常我們的思考比較偏向處理當下時間點的局面,但AFL每次執行都要求你完成一個"區段時間"的資料,有點像是用人腦替電腦最佳化....,像是給你最近100根K的報價,你就必須把這100根K內的每個進出信號都算出來,而且必須確保下一次執行也能在過去的同時間點算出同樣的值,否則你會被自己搞混. 沒想到這會成為我的障礙,腦袋不太好使...
3.圖表(chart)
圖表很方便,但圖表無法執行歷史的暫態,即K棒內發生的變化都會被忽略,例如周K圖中就無法處理日K發生的事情,若有這樣的需求,只能把K線調成日K,在AFL再建立周K,或跑Bar Replay,但每秒好像只能跳5筆,或執行回測時將periodicity設為1日,但跑完只有回測數據無法對應K線圖(當然你可以自己開...但與回測無關)
4.回測(backtest)
會希望能夠在K線上看到進出的點位,信號的路徑,口數,註解等等,點擊每筆交易都能開啟策略圖表到適當的時間點觀察.感覺回測與圖表的整合度相當低.
5.實單系統
好像只有幫忙做了下單api,其他都沒有?基本上要搭配backtest運作.這是我比較失望的部分,原本想說會有一套系統紀錄實單的信號/點位/口數/權益數等,結果交易最重要的一環著墨最少.
---
以上是我初步評估的結果,當然研究的不是很透徹,可能還有些技巧我遺漏了,或錯用,還請先進指教.
接下來還會試試看其他軟體,希望各位過來人也能給我些建議,也不排除amibroker.
|