這是一個拿來跑各式各樣測試的股市模型控制流程,可以簡單的增加自己想要的模型並測試結果。接上我的另一個專案 台灣上市上櫃股票爬蟲,含歷史資料,就可以簡單做到歷史資料模擬、隔日評估、即時預測等功能。
下載完本專案後,可以把之前的 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
,Sell
orNothing
Value
: 要下單的價格,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 = False
tmrHold
和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 麻煩跟我說:[email protected]
最後更新時間:2015/03/26
In short, stockflow is available under the MIT license. See the LICENSE file for more info.