當前位置 博文首頁 > 信息技術智庫:?? 炒 股 實 戰丨原 地 起 飛 ??

    信息技術智庫:?? 炒 股 實 戰丨原 地 起 飛 ??

    作者:[db:作者] 時間:2021-09-13 18:59

    鄭重聲明:?

    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相關黑科技:爬蟲、算法、小工具?

    (優質好文持續更新中……)?

    cs
lj663的博客 原創內容,個人筆記,僅供參考。篠AP中導出物料 lj663的博客 原創內容,個人筆記,僅供參考。宏P于作者博文的 lj663的博客 原創內容,個人筆記,僅供參考。荷昝鳎罕救瞬┛ lj663的博客 原創內容,個人筆記,僅供參考。宏P于VIP文章的 程序員springmeng:??爆肝熬夜開發了一個SpringBoot活動管理系統 相太陽的博客:CSS font-size字體大小樣式屬性 Jqcode:配置文件中propertyConfigurer類的使用 Jqcode:Eclipse插件使用Mybatis-generator代碼生成器 Jqcode:命令行使用Mybatis-generator代碼生成器 Jqcode:SpringMVC工作原理 Jqcode:MD5Utils Jqcode:mysql中自連接查詢與case-when-then用法 Jqcode:json相關轉換 Jqcode:使用Pipeline管道技術快速寫入百萬級別緩存數據 Jqcode:mysql查詢中常用的函數整理 Jqcode:Eclipse中Debug調試時各個快捷鍵的作用 Jqcode:Controller返回json格式數據報反序列化異常的解決辦法 Jqcode:java配置相關參數啟動項目 Jqcode:初步了解mysql存儲過程 Jqcode:layDate,一款來自layui的強大日期插件 Jqcode:layer,一款來自layui的強大彈出層插件 Jqcode:java實現線程間的通信 Jqcode:java導出EXCEL表格―實戰篇 Jqcode:Redis常問面試題整理 Jqcode:List數據去重方法 Jqcode:初識mysql觸發器 Jqcode:數據庫設計規范之三大范式 Jqcode:關于mysql用戶安全管理的一些命令 Jqcode:關于哈希表必須了解的一些知識 Jqcode:本地環境nexus搭建私服jar包站點 Jqcode:使用Dom4j中的Document與Element解析XML文檔 Jqcode:postman調用https接口方式 Jqcode:簡單記錄Spring中輕量級任務調度@Scheduled注解的使用 Jqcode:項目啟動后控制臺自定義輸出圖案或內容 Jqcode:RabbitMQ消息隊列中間件――安裝與配置 Jqcode:RabbitMQ消息隊列中間件――“Hello World”入門 Jqcode:nginx反向代理實踐:將某個指定的域名代理到指定的服務 Jqcode:Spring Cloud微服務架構――Eureka注冊中心 Jqcode:Spring Cloud微服務架構――Eureka服務注冊 Jqcode:Spring Cloud微服務架構――Eureka服務發現與消費 Jqcode:Spring Cloud微服務架構――Ribbon客戶端負載均衡 Jqcode:Spring Cloud微服務架構――Feign客戶端負載均衡 Jqcode:es+kibana在windows平臺下的搭建記錄 Jqcode:kibana安裝中文插件 Jqcode:mongodb常用語法 Jqcode:關于原碼、反碼、補碼的學習 Jqcode:@Autowired、@Resource還分不清嗎? 英雄哪里出來:??13萬字《C語言動漫對話教程(入門篇)》??(建議收 lyndon:CSDN 去除圖片水印 lyndon:Android 手機修改 WiFi MAC 地址 php怎么將漢字轉成拼音 php 50.00怎么轉換成50 一文帶你分析php7的zval 聊聊關于PHP定時器的那些事 微信推廣 如何做好微商 必看微信朋友圈購物八大準則 如何避免朋友圈購物存在問題 JavaScript循環遍歷的24個方法 關于@PostConstruct、afterPropertiesSet和init-method的執行順序 Redis數據過期策略的實現詳解 Java設計模式之java觀察者模式詳解 java工程師進階之MyBatis延遲加載的使用 提高網站收錄率請從建站開始! php pthreads的使用方法 php分頁有幾種實現方法 Yaf遇上PHP7.1會有什么火花? 這個php-cs-fixer編碼格式化工具,你還不會用嗎? 微信朋友圈曬成交、曬對話有圖不等于有真相 交易量是這么來的 揭秘微商驚天陷阱 微信朋友圈里的面膜都賣給了誰? .net平臺的rabbitmq使用封裝demo詳解 C++類的特種函數生成機制詳解
A级免费视频