這幾天沒時間發新文章,原因就是上星期本來想把一直在使用的程式交易策略串接的 Data 由外部程式改回連結自已的資料庫,所有的指標都要自已重新計算,一直到計算指標時才發現法人資料庫內的自營商避險賣超及自營商避險買賣超的資料有問題,花了四、五天才找出問題在那,所以在這裡分享一下。

台灣股市資料庫

很久之前就自已用 Excel 跟 Access 建立起自已的台股資料庫了,一直以來在使用上都沒出現過什麼問題,而且同為微軟的 Office 軟體,相容性也相當高,使用 Access 做資料庫的缺點就是容量限制一個資料庫只有2 GB 的容量,不過這部份的限制並不影響使用,但優點當然就是快,因為 Access 對雲端使用及多用戶的不友善,所以大多只會裝在本機上,在本機上的速度一定是比雲端傳輸還要快的,而且用 Excel VBA 取資料也不難,所以我一直沒把資料庫換成 MySql 或 MsSql 這類主流的資料庫。

資料出現錯誤

上星期在計算指標時,發現了法人資料庫內的自營商避險賣超及自營商避險買賣超二個欄位的資料怪怪的,有自營商避險買超幾千幾萬張的,結果自營商避險賣超及自營商避險買賣超都是0的,也有相反的,但都搭不起來,而且比對了很多天都出現問題,所以開始了寫程式最麻煩的 DeBug 環節。

DeBug 第一步,比對資料

第一件事,就是看是那一天的資料,直接去打開原始的csv資料來看,原始資料上沒問題,第一個懷疑的是會不會在使用 Excel VBA 整理資料時,我一邊在使用電腦做其它的事,造成資料誤值,所以又重新跑了一次,發現還是有相同的問題....

DeBug 第二步,檢查程式

一度以為是自已的程式出錯了,會這樣子認為是因為證交所及櫃買中心的法人資料都有各改過二次格式,而且打開資料庫看,錯誤集中在2018-2019這二年,所以才會以為是不是程式上的錯誤,花了一天仔細的查看程式碼,也沒有發現任何問題,所以再用程式跑一次2018-2019二年的資料,還是出現同樣的問題,但是相同的程式跑2020的資料確完全沒問題。

DeBug 第三步,找不到原因

此時真的相不出什麼原因,一度想說是不是要直接把程式重新寫出來,但又覺得太麻煩了,所以這時只能像平時我們找不到東西時一樣,有時一直找反而找不到,結果不找時那樣東西自已就會出現..

DeBug 第四步,過慮錯誤

休息了一天,想說錯誤集中在2018-2019這二年,是不是有什麼原因造成格式錯誤誤值欄位,所以又跑了一次程式,把原始的csv資料再整理一次,發現這幾天跑出來所有的錯誤都是相同的日期,所以因為系統不穩定造成誤值的可能性就沒有了,因為誤值的話錯誤不會完全相同。

DeBug 第五步,排除錯誤

此時想說我計算指標是一檔一檔股票去計算的,所以我的焦點都集中在那一檔股票,那會不會出錯的那一個日期所有股票都有問題,所以把篩選條件由股票代號改為日期,一比對之後才發現,原來所有的資料都被往上移一例了,這時就可以猜想很可能是原始資料上有問題,所以用排除法去找出問題在那,因為上市法人最新的格式是2017/12/18修改的,但看出資料有問題的日期最早是2018/1/30,所以猜想問題可能在這一個半月之中,經過一天一天的比對,終於在2018/1/25的資料找出了問題,原來是因為有一檔股票的資料列中有三個空欄位,所以造成那一天之後所有的資料都被往上移一列了。
整理資料後的錯誤資料
2018/1/25 原始csv資料 - 出現三個空欄位
2018/1/25 證交所的資料


最後去證交所下重新下載一次,發現新檔案是好的,所以猜想可能當初我下載時就有這個問題,之後證交所也有發現到,所以把檔案修復了,但因為那個數據我之前很少用到,所以一直沒注意到,一直到上星期才發現。

Post a Comment

較新的 較舊