歡迎你們訂閱《Python數據分析實戰:構建股票量化交易系統》小冊子,學完小冊上的知識點後,必定要學以至用的方式來輔助咱們分析股票! sql
相信你們都據說了量化交易這個東西了吧!數據庫
量化交易是一種新興的系統化金融投資方法,它綜合多個學科的知識,用先進的數學模型代替人的主觀思惟制定交易策略,利用計算機強大的運算力從龐大的股票、債券、 期貨等歷史數據中回測交易策略的盈虧「機率」,經過管理盈虧的「機率」幫助投資者作出準確的決策。json
那麼,什麼纔是普通股民所適合的量化交易打開方式呢?微信
本文就用一個接地氣的數據管理場景來和你們分享一下,普通股民如何去使用量化交易!markdown
咱們知道數據是量化交易的源頭,如何高效地管理大量數據是量化交易分析中很是關鍵的環節。數據庫就是最佳的解決方案。app
經過API接口獲取到股票行情數據以後,咱們能夠存入到數據庫之中,這樣下次調用的時候只須要從本地數據庫中獲取便可。oop
在存入數據庫以前須要考慮如何劃分數據表以及如何創建對應的股票池。性能
固然,根據交易者不一樣的操做風格能夠有不同的劃分方法。好比把A股市場全部指數和上市個股都概括到一個表中;也能夠把本身熟悉的幾個板塊個股概括到一個表中……學習
接下來咱們就以板塊來劃分數據表,把水泥和半導體板塊劃分爲同一個表中,而後介紹在實際應用中如何把個股行情數據更新到數據庫中。網站
咱們使用Tushare Pro版本的stock_basic()接口獲取已上市的全部股票基礎信息數據,包括股票代碼、名稱、上市日期、退市日期、所屬板塊等。
從上市的全部股票的代碼中用Pandas條件表達式選取出「水泥」和「半導體」板塊股票,好比:
df_basic[(df_basic["industry"] == u"水泥")]
複製代碼
選出的結果以下圖所示:
將股票名稱name和股票代碼ts_code做爲鍵值對轉換爲字典格式數據,而後使用dump把Python股票池存儲爲JSON文件便可。好比:
with open("stock_pool.json", "w", encoding='utf-8') as f:
json.dump(stock_index, f, ensure_ascii=False, indent=4)
複製代碼
建立的JSON文件內容,以下圖所示:
目前流行的數據庫有Oracle、MySQL、MongoDB、Redis、SQLite……關於數據庫的選型一般取決於性能、數據完整性以及應用方面的需求。每一個數據庫都有它的特色和最適合的應用場合。
這裏推薦一款輕型的關係型數據庫SQLite。咱們僅僅是用於本地的數據管理,無須多用戶訪問,數據容量小於2TB,無須海量數據處理,關鍵是移植方便、使用簡單、處理迅速。這裏推薦選擇SQLite在實現本地數據管理。
固然,若是你們自己就擅長MySQL、MongoDB的話,或者有更高級玩法的話,徹底能夠選擇MySQL、MongoDB這類的數據庫。
首次建立數據庫的時候要補全個股的歷史行情走勢,而後每過一個交易日就更新一天。
剛纔咱們存儲的JSON文件提供了股票池的代碼,使用open()把json文件打開,而後使用load()將文件中JSON編碼字符串轉換成Python數據類型,好比:
with open("stock_pool.json", 'r') as load_f:
stock_index = json.load(load_f)
複製代碼
接下去能夠用for循環遍歷獲取股票池對應的股票數據,也能夠多任務提速股票數據的獲取。
好比是第一次建立數據表,以000401爲例,咱們指定Tushare Pro版本的daily()接口起始時間和終止時間參數爲分別'20190101'和'20200101',獲得的數據內容以下圖所示:
若是要更新下一個交易日的數據的話,只需調整起始時間便可。
建立數據庫的代碼:
conn = sqlite3.connect('stock-boards.db')
複製代碼
把數據更新到數據庫表中能夠直接調用DataFrame.to_sql()接口:
df_stock.to_sql('cement_semicon', conn, index=False, if_exists='append')
複製代碼
讀取整張表數據能夠調用pd.read_sql_query:
df_table = pd.read_sql_query("select * from 'cement_semicon';", conn)
複製代碼
好比咱們存取了水泥板塊所有股票的行情數據到數據庫表中,讀取出來的數據格式以下所示:
有了數據庫,咱們能夠快速查詢和統計一些數據。
好比查詢‘20190125’這天交易日漲幅超過2%的股票:
df_target = pd.read_sql_query("select * from 'cement_semicon' where pct_chg > 2 and trade_date == '20191225'", conn)
複製代碼
統計獲得符合要求的股票只有2只,以下圖所示:
在量化交易的實戰中,數據的準確度是很是重要的,也就是說存儲到數據庫中的股票行情數據要保證足夠的準確。
如何保證數據足夠準確呢?
一個建議是選取兩個數據源進行相互驗證。若是是使用免費API接口,能夠分別用兩個接口獲取數據,存在本地的CSV文件中,而後分別導入文件中的行情數據進行對比。出現誤差時要人爲去判別,當數據經過檢驗以後再轉存數據庫中。
更高質量數據的話,可使用收費的獲取數據途徑,例如萬得(Wind)、同花順等公司提供的金融數據終端,聚寬團隊提供的JQData數據服務,預測者網站提供的金融數據下載服務等。
固然,也能夠用爬蟲方式從財經網站獲取,好比東方財富網:
學習完書籍以後,想再次升級學習的內容能夠加入知識星球《玩轉股票量化交易》(點擊可查看目錄)。
經過這個簡單而又實用的股票量化場景,但願可以給廣大朋友對於量化交易有一個直觀的感覺。
而後,咱們應該升級本身的炒股方式了,把本身之前炒股的那套方法,抽象成策略模型,用量化的方法去全市場回測評估,而後讓程序幫助咱們監測行情的走勢。
這個纔是普通股民所適合的量化交易打開方式!
———————————————————————————————————————————————— 你們若是想對涉及到的知識點進行更全面、更體系的從0-1方式的介紹,這裏推薦給你們個人書籍《Python股票量化交易從入門到實踐》
!天貓、京東、噹噹全面開售!
同時也歡迎你們關注個人微信公衆號【元宵大師帶你用Python量化交易】瞭解更多Python量化交易相關內容