利用python數(shù)據(jù)分析處理進行炒股實戰(zhàn)行情
作為一個新手,你需要以下3個步驟:
1、用戶注冊 > 2、獲取token > 3、調(diào)取數(shù)據(jù)
數(shù)據(jù)內(nèi)容:
包含股票、基金、期貨、債券、外匯、行業(yè)大數(shù)據(jù),
同時包括了數(shù)字貨幣行情等區(qū)塊鏈數(shù)據(jù)的全數(shù)據(jù)品類的金融大數(shù)據(jù)平臺,
為各類金融投資和研究人員提供適用的數(shù)據(jù)和工具。
1、數(shù)據(jù)采集
我們進行本地化計算,首先要做的,就是將所需的基礎(chǔ)數(shù)據(jù)采集到本地數(shù)據(jù)庫里
本篇的示例源碼采用的數(shù)據(jù)庫是MySQL5.5,數(shù)據(jù)源是xxx pro接口。
我們現(xiàn)在要取一批特定股票的日線行情
部分代碼如下:
# 設(shè)置xxxxx pro的token并獲取連接 # 公眾號:信息技術(shù)智庫 ts.set_token('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx') pro = ts.pro_api() # 設(shè)定獲取日線行情的初始日期和終止日期,其中終止日期設(shè)定為昨天。 start_dt = '20100101' time_temp = datetime.datetime.now() - datetime.timedelta(days=1) end_dt = time_temp.strftime('%Y%m%d') # 建立數(shù)據(jù)庫連接,剔除已入庫的部分 db = pymysql.connect(host='127.0.0.1', user='root', passwd='admin', db='stock', charset='utf8') cursor = db.cursor() # 設(shè)定需要獲取數(shù)據(jù)的股票池 stock_pool = ['603912.SH','300666.SZ','300618.SZ','002049.SZ','300672.SZ'] total = len(stock_pool) # 循環(huán)獲取單個股票的日線行情 for i in range(len(stock_pool)): try: df = pro.daily(ts_code=stock_pool[i], start_date=start_dt, end_date=end_dt) # 打印進度 print('Seq: ' + str(i+1) + ' of ' + str(total) + 'Code: ' + str(stock_pool[i]))
上述代碼的注釋部分已將每行代碼的功能解釋清楚了,實際上數(shù)據(jù)采集的程序主要設(shè)置三個參數(shù):獲取行情的初始日期,終止日期,以及股票代碼池。
當我們獲取數(shù)據(jù)后,就要往本地數(shù)據(jù)庫進行寫入(存儲)操作了,
本篇代碼用的是SQL語言,需提前在數(shù)據(jù)庫內(nèi)建好相應(yīng)的表,表配置和表結(jié)構(gòu)如下:
庫名:stock 表名:stock_all
其中 state_dt
和 stock_code
是主鍵和索引。state_dt
的格式是 ‘yyyy-mm-dd'
(例:'2018-06-11')。
這樣的日期格式便于查詢,且在MySQL內(nèi)部能夠進行大小比較。
2、數(shù)據(jù)預(yù)處理
無論是量化策略還是單純的機器學習項目,數(shù)據(jù)預(yù)處理都是非常重要的一環(huán)。
以機器學習的視角來看,數(shù)據(jù)預(yù)處理主要包括
- 數(shù)據(jù)清洗
- 排序
- 缺失值或異常值處理
- 統(tǒng)計量分析
- 相關(guān)性分析
- 主成分分析(PCA)
- 歸一化等
本篇所要介紹的數(shù)據(jù)預(yù)處理比較簡單
只是將存在本地數(shù)據(jù)庫的日線行情數(shù)據(jù)整合成一份訓練集數(shù)據(jù),
以用于后續(xù)的機器學習建模和訓練。
在介紹具體的示例代碼之前,我們需要先思考一個問題,
應(yīng)用有監(jiān)督學習的算法對個股進行建模
- 我們的輸入數(shù)據(jù)有哪些,
- 我們期望得到的輸出數(shù)據(jù)又是什么?
這個問題的答案因人而異,因策略而異。
這個問題本身是將市場問題轉(zhuǎn)化為數(shù)學問題的一個過程。
依賴的是量化寬客自己的知識體系和對市場的理解。
回到正題,本篇示例我們將以最簡單的數(shù)據(jù)進行分析,
我們輸入端的數(shù)據(jù)是個股每日基礎(chǔ)行情,輸出端數(shù)據(jù)是股價相較前一交易日的漲跌狀態(tài)。
簡單點說就是,我們向模型輸入今天的基礎(chǔ)行情,讓模型預(yù)測明天股價是漲還是跌。
在代碼實現(xiàn)方式上,
- 采用面向?qū)ο蟮乃枷耄?/li>
- 將整個數(shù)據(jù)預(yù)處理過程和結(jié)果,封裝成一個類,每次創(chuàng)建一個類實例,
- 就得到了特定條件下的一份訓練集。
示例代碼如下:
class data_collect(object): def __init__(self, in_code,start_dt,end_dt): ans = self.collectDATA(in_code,start_dt,end_dt) def collectDATA(self,in_code,start_dt,end_dt): # 建立數(shù)據(jù)庫連接,獲取日線基礎(chǔ)行情(開盤價,收盤價,最高價,最低價,成交量,成交額) db = pymysql.connect(host='127.0.0.1', user='root', passwd='admin', db='stock', charset='utf8') cursor = db.cursor() sql_done_set = "SELECT * FROM stock_all a where stock_code = '%s' and state_dt >= '%s' and state_dt <= '%s' order by state_dt asc" % (in_code, start_dt, end_dt) cursor.execute(sql_done_set) done_set = cursor.fetchall() if len(done_set) == 0: raise Exception self.date_seq = [] self.open_list = [] self.close_list = [] self.high_list = [] self.low_list = [] self.vol_list = [] self.amount_list = [] for i in range(len(done_set)): self.date_seq.append(done_set[i][0]) self.open_list.append(float(done_set[i][2])) self.close_list.append(float(done_set[i][3])) self.high_list.append(float(done_set[i][4])) self.low_list.append(float(done_set[i][5])) self.vol_list.append(float(done_set[i][6])) self.amount_list.append(float(done_set[i][7])) cursor.close() db.close() # 將日線行情整合為訓練集(其中self.train是輸入集,self.target是輸出集,self.test_case是end_dt那天的單條測試輸入) self.data_train = [] self.data_target = []
最終這個類實例化后是要整合出三個數(shù)據(jù):
1. self.train
:訓練集中的輸入端數(shù)據(jù),本例中是每日基礎(chǔ)行情。
2. self.target
:訓練集中的輸出數(shù)據(jù),本例中相較于前一天股價的漲跌,漲為1,不漲為0。并且在排序上,每條 t 交易日的self.train里的數(shù)據(jù)對應(yīng)的是 t+1 天股價的漲跌狀態(tài)。
3. self.test_case
:在 t 末交易日的基礎(chǔ)行情數(shù)據(jù),作為輸入端,用于模型訓練完成后,對第二天的漲跌進行預(yù)測。
3、SVM建模
機器學習中有諸多有監(jiān)督學習算法
SVM是比較常見的一種,本例采用SVM算法進行建模。
關(guān)于SVM的理論原理本篇不做詳述,以下僅從實踐角度進行建模介紹。
先貼一段建模、訓練并進行預(yù)測的代碼大家感受一下:)
model = svm.SVC()# 建模 model.fit(train, target) # 訓練 ans2 = model.predict(test_case) # 預(yù)測
三行代碼,讓人想起了把大象裝冰箱分幾步的冷笑話……
不過這側(cè)面也說明Python在數(shù)據(jù)挖掘方面的強大之處:簡單,方便,好用。
本例用的機器學習框架是scikit-learn
是個非常強大的算法庫。
熟悉算法原理的朋友可以查閱官方API文檔,可修改模型參數(shù),進一步調(diào)優(yōu)模型;
亦可嘗試其他算法比如決策樹,邏輯回歸,樸素貝葉斯等。
以上就是利用python數(shù)據(jù)分析進行炒股實戰(zhàn)行情的詳細內(nèi)容,更多關(guān)于python數(shù)據(jù)分析的資料請關(guān)注本站其它相關(guān)文章!
版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。