2009年6月14日 星期日

分線內取日線的價格


之前我寫過一篇利用自己做函數的方式來抓取日線的價格:http://www.yctseng.net/2007/06/blog-post_26.html

這一次介紹的感覺上比較鳥的方式,但是在實作上可能算是比較容易的。至少不用去做好多個函數。萬一你在分線中要知道日線的MA60,那可真是會做函數做到想吐。

首先,在分線中抓取昨天的日線收盤,我會這樣做:

Value3= iff( D>D[1], C[1], Value3 )

是的,昨天的收盤價必須等到今天的開盤第一根K棒出現時才會得知,用Value3這個變數來儲存。從上面這一行語句中可以知道,當K棒的日期比上一根K棒大的時候,Value3會填入上一根的收盤價,其他的時候,則Value3一直保持與上一根K棒的Value3一樣,也就是 Value3 不會變化,除非K棒是每天的開盤第一根。

接著,如果我想知道前天或是大前天,更或是大大前天的日線收盤價呢?這時候就直接從Value3的序列來下手。因為Value3只會在每天開盤的第一根K棒有變化,其他的時間則不會,因此,不管在今天的哪一根K棒(開盤第一根除外),我只要倒數Value3往前的一天份的K棒數值就可以取得前天的日線收盤價:當今天開盤第一根出現時,Value3[0]就成為昨天的日線收盤價。以30分鐘線為例,Value3[10]就是前天的日線收盤價了,而Value3[20]就是大前天的日線收盤價,Value3[30]則是大大前天的日線收盤價。

我希望能在不同的分線都可以有比較自動取得多日前的日線收盤價,那麼我們就會需要使用這給內建函數:BarInterval。這是現在使用的分線是幾分線的意思,不如當你打開30分線的時候,BarInterval就會傳回30這個數值。而台指期一天的交易時間是300分鐘,所以只要把 300 / BarInterval 就可以知道一天會有幾根K棒了。

所以當你把 Value3= iff( D>D[1], C[1], Value3) 放在程式的前方, Value3 就可以用來記錄每天的收盤價(但不包含今日)。那麼前天的日線收盤價就是 Value3[ 300 / BarInterval*1 ],大前天呢?就是 Value3[ 300 / BarInterval*2 ],大大前天就是 Value3[ 300 / BarInterval*3 ] 了。

這樣就可以得到一個通式:Value3[ 300 / BarInterval*N ]。N就是用來表示幾天前的日線收盤價,當N=0可以得到昨天,N=1可以得到前天,N=2可以得到大前天的日線收盤價,依此類推。

接下來,如果你需要很多天的日線收盤價,只需要在 Value3[ 300 / BarInterval * N ] 的 N 上去動手腳就行了。

熱門文章