這是一個拿來跑各式各樣測試的股市模型控制流程,可以簡單的增加自己想要的模型並測試結果。接上我的另一個專案 台灣上市上櫃股票爬蟲,含歷史資料,就可以簡單做到歷史資料模擬、隔日評估、即時預測等功能。
下載完本專案後,可以把之前的 tsec 專案用 ln -s 放到 stockflow 下,或者是更改 ctrls/settings.py 裡面的 TSEC_DATA_PATH 至原本有下載過的 tsec 目錄。
while True:
row = reader.getInput() # Reader 讀新的資料
if row == None: break # 讀不到就 Stop
prediction = model.predict('start', float(row[3]))#決定開盤要不要買賣
trade = trader.do(row, prediction, 'start')
# 盤中 update
model.update(row, trade)
# 快收盤的買賣
prediction = model.predict('end', float(row[6]))
trade = trader.do(row, prediction, 'end')
traderRecorder.record(trader.analysis())# TraderRecorder 紀錄買賣資料一個可以預測的模型,有放上 exampleModel 當成範例。
update(row, trade = None):根據新的資料,和新的交易結果來做更新
predict(when, value):讓 model 預測下一步應該要怎麼做,模擬一個下單的過程。when 是 'start' 或 'end',value 是開盤價或收盤價。需要回傳一個 dictionary,包含:
Act:Buy,SellorNothingValue: 要下單的價格,0 代表用開盤價買Volume: 要下單的量,0 代表能買多少盡量買
========
可以讀取 tsec 單隻股票的歷史資料
Reader(number):number 是股票編號
getInput():會回傳下一天的資料,自動把沒有交易的資料過濾掉,若沒有資料了則回傳 None
========
可以模擬交易,並輸出交易資訊分析
Trader(model_infos, stock_number):model_infos 是 Model 內建描述,stock_number 是股票編號
do(row, prediction, when):把 Reader 新讀的一行 row 和 Model 輸出的 prediction 來去做買賣,when 是 'start' 或 'end'
analysis():輸出交易資訊結果分析,包含很多東西不多加描述,可以直接 run 一次看看 result 裡多出什麼就知道了。
========
可以紀錄買賣的結果成 csv 檔、和把交易序列輸出成圖檔
record(result):把 Trader.analysis() 的結果輸出成檔案,可以看到圖片中紅點是 Model 買入點,藍點是賣出點,視覺化後一目了然,此外 result 中也有很多資料可以看。
========
可以測試 Model、預測明日趨勢、預測即時趨勢
run(mode = 'train', noLog = False, noRecord = False, dateFrom = None, dateTo = None, roiThr = -100, drawCandle = True):跑測試
- mode:有
train,tmrGood,tmrHold,tmpGood,tmrGood五種 - 所有 mode 都可以設定
dateFrom和dateTo設定指定區間 train會跑測試資料,可以選擇noLog = True和noRecord = True兩個參數tmrGood和tmpGood可以預測 Model 要買的清單,可以設定roiThr為輸出的最低累計 ROI 門檻。如果不輸出圖片可以設定drawCandle = FalsetmrHold和tmpHold可以根據現有持有的股票,用 Model 預測下一步動作。如果不輸出圖片可以設定drawCandle = False
========
可以測試指定股票清單和指定年份,做多年單隻股票的績效分析和同年不同模型的平均績效統計。
BenchMark(numbers, Model):numbers 是要測試的股票清單,Model 是一個可以用來輸出的 Model
run(noLog = False):開始測試,noLog = True 可以把螢幕輸出關掉
========
可以輸出 BenchMark 測試不同年份的結果,相同年份存在同一個檔案中。
BenchYearRecorder(model_infos, year):model_infos 是模型敘述,year 是年份
update(result):把每隻股票指定年份的結果更新
record():輸出成 csv 檔
========
可以輸出 BenchMark 測試不同年份的結果,相同 Model 存在同一個檔案中。
BenchModelRecorder(model_infos, number):number 是股票編號,model_infos 是模型敘述
update(result):把每隻股票指定年份的結果更新
record():輸出成 csv 檔
========
可以輸出日收盤價的圖
draw(number, length = SIMPLE_FIG_LENGTH):number 是股票編號,length 是想要輸出的序列長度
========
可以輸出 K 線圖 + 布林通道 + 每日最高最低區間 + 量的圖
draw(number, length = SIMPLE_FIG_LENGTH):number 是股票編號,length 是想要輸出的序列長度
========
參數設定都在 ctrls/settings.py 中,可以設定輸出檔案位置、交易稅、起始金額等資料。
有寫幾個常用功能的範例於檔案中,可以參考使用,都短短的兩三行就可以做到以下功能。
findTmrGood:可以根據自己設定的 Model 和指定時間至今的績效,找出明天要買的清單,getTmrHold:可以根據自己設定的 Model,找出現有清單中,明天該做的動作。
findTmpGood:可以根據自己設定的 Model 和指定時間至今的績效,找出當下要買的清單,findTmpHold:可以根據自己設定的 Model,找出現有清單中,當下該做的動作。
main:基本的範例格式testThisYearTilNow:測試今年至今的績效runBenchMark:測試特定資料群組在特定年份中歷年的績效,和比較歷年績效。
drawSimple:一般收盤圖drawCandle:蠟燭圖
- printTrade 改成 trader 輸出
- 更新風險公式
- 為了方便計算,利息依照融資歸還比例償還總累計利息
- 不考慮資產變為負的後續處理
- doc 獨立開來成gh-page,要改明白一點
- 東西命名改成 Python 一點
- 有時候漲停跌停,有錢可能買不到賣不出,是個邏輯 bug 點
- 融資融券是不是要有斷頭
本人旨在為廣大投資人提供正確可靠之資訊及最好之服務,作為投資研究的參考依據,若因任何資料之不正確或疏漏所衍生之損害或損失,本人將不負法律責任。是否經由本網站使用下載或取得任何資料,應由您自行考量且自負風險,因任何資料之下載而導致您電腦系統之任何損壞或資料流失,您應負完全責任。
有 Bug 麻煩跟我說:azx754@gmail.com
最後更新時間:2015/03/26
In short, stockflow is available under the MIT license. See the LICENSE file for more info.



