鄭重宣告:
1、個人版可以免費獲取交易資料進行分析,企業級大規模呼叫資料需要購買積分(大家玩玩即可)
2、為避免廣告代言,本文將不會出現任何logo、鏈接和包,需要玩的主頁私聊我!
🍅 作者主頁:不吃西紅柿
🍅 簡介:CSDN博客專家🏆、資訊技術智庫公號作者?簡歷模板、PPT模板、技術交流、面試套路盡管【關注】私聊我,
🍅 歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!
本文主要介紹三部分:資料采集,資料預處理,利用SVM演算法進行建模,
作為一個新手,你需要以下3個步驟: 1、用戶注冊 > 2、獲取token > 3、調取資料
資料內容:包含股票、基金、期貨、債券、外匯、行業大資料,同時包括了數字貨幣行情等區塊鏈資料的全資料品類的金融大資料平臺,為各類金融投資和研究人員提供適用的資料和工具,

>> 1、資料采集 <<
我們進行本地化計算,首先要做的,就是將所需的基礎資料采集到本地資料庫里,本篇的示例原始碼采用的資料庫是MySQL5.5,資料源是xxx pro介面,
我們現在要取一批特定股票的日線行情,部分代碼如下:
# 設定xxxxx pro的token并獲取連接
# 公眾號:資訊技術智庫
ts.set_token('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
pro = ts.pro_api()
# 設定獲取日線行情的初始日期和終止日期,其中終止日期設定為昨天,
start_dt = '20100101'
time_temp = datetime.datetime.now() - datetime.timedelta(days=1)
end_dt = time_temp.strftime('%Y%m%d')
# 建立資料庫連接,剔除已入庫的部分
db = pymysql.connect(host='127.0.0.1', user='root', passwd='admin', db='stock', charset='utf8')
cursor = db.cursor()
# 設定需要獲取資料的股票池
stock_pool = ['603912.SH','300666.SZ','300618.SZ','002049.SZ','300672.SZ']
total = len(stock_pool)
# 回圈獲取單個股票的日線行情
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]))
上述代碼的注釋部分已將每行代碼的功能解釋清楚了,實際上資料采集的程式主要設定三個引數:獲取行情的初始日期,終止日期,以及股票代碼池,
當我們獲取資料后,就要往本地資料庫進行寫入(存盤)操作了,本篇代碼用的是SQL語言,需提前在資料庫內建好相應的表,表配置和表結構如下:
庫名:stock 表名:stock_all

其中 state_dt 和 stock_code 是主鍵和索引,state_dt 的格式是 ‘yyyy-mm-dd’(例:'2018-06-11'),這樣的日期格式便于查詢,且在MySQL內部能夠進行大小比較,
>> 2、資料預處理 <<
無論是量化策略還是單純的機器學習專案,資料預處理都是非常重要的一環,以機器學習的視角來看,資料預處理主要包括資料清洗,排序,缺失值或例外值處理,統計量分析,相關性分析,主成分分析(PCA),歸一化等,本篇所要介紹的資料預處理比較簡單,只是將存在本地資料庫的日線行情資料整合成一份訓練集資料,以用于后續的機器學習建模和訓練,
在介紹具體的示例代碼之前,我們需要先思考一個問題,應用有監督學習的演算法對個股進行建模,我們的輸入資料有哪些,我們期望得到的輸出資料又是什么?
這個問題的答案因人而異,因策略而異,這個問題本身是將市場問題轉化為數學問題的一個程序,依賴的是量化寬客自己的知識體系和對市場的理解,
回到正題,本篇示例我們將以最簡單的資料進行分析,我們輸入端的資料是個股每榷訓礎行情,輸出端資料是股價相較前一交易日的漲跌狀態,簡單點說就是,我們向模型輸入今天的基礎行情,讓模型預測明天股價是漲還是跌,
在代碼實作方式上,我們采用面向物件的思想,將整個資料預處理程序和結果,封裝成一個類,每次創建一個類實體,就得到了特定條件下的一份訓練集,示例代碼如下:
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):
# 建立資料庫連接,獲取日線基礎行情(開盤價,收盤價,最高價,最低價,成交量,成交額)
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 = []
最終這個類實體化后是要整合出三個資料:
- 1. self.train :訓練集中的輸入端資料,本例中是每榷訓礎行情,
- 2. self.target :訓練集中的輸出資料,本例中相較于前一天股價的漲跌,漲為1,不漲為0,并且在排序上,每條 t 交易日的self.train里的資料對應的是 t+1 天股價的漲跌狀態,
- 3. self.test_case :在 t 末交易日的基礎行情資料,作為輸入端,用于模型訓練完成后,對第二天的漲跌進行預測,
>> 3、SVM建模 <<
機器學習中有諸多有監督學習演算法,SVM是比較常見的一種,本例采用SVM演算法進行建模,關于SVM的理論原理本篇不做詳述,以下僅從實踐角度進行建模介紹,
先貼一段建模、訓練并進行預測的代碼大家感受一下:)
model = svm.SVC() # 建模
model.fit(train, target) # 訓練
ans2 = model.predict(test_case) # 預測
三行代碼,讓人想起了把大象裝冰箱分幾步的冷笑話……
不過這側面也說明Python在資料挖掘方面的強大之處:簡單,方便,好用,
本例用的機器學習框架是scikit-learn,是個非常強大的演算法庫,熟悉演算法原理的朋友可以查閱官方API檔案,可修改模型引數,進一步調優模型;亦可嘗試其他演算法比如決策樹,邏輯回歸,樸素貝葉斯等,
熱門專欄推薦:
🥇 大資料集錦專欄:大資料-硬核學習資料 & 面試真題集錦
🥈 資料倉庫專欄:數倉發展史、建設方法論、實戰經驗、面試真題
🥉 Python專欄:Python相關黑科技:爬蟲、演算法、小工具
(優質好文持續更新中……)?

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/296672.html
標籤:區塊鏈
下一篇:flink命令列引數啟動
