使用機器學(xué)習(xí)預(yù)測股票漲跌(附工具類,一鍵調(diào)用)

1纸淮、前置準(zhǔn)備

數(shù)據(jù)來源使用tushare pro平斩,具體操作請看鏈接,注冊就可以使用了
Tushare金融大數(shù)據(jù)開放社區(qū)

2咽块、直接放源碼

封裝沒有做好绘面,很多重復(fù)代碼,湊合看吧侈沪,python不太會揭璃,有大佬看到麻煩指教下是否有問題

# -*- coding: utf-8 -*-
import datetime
import os
import time

import numpy as np
import tushare as ts
from sklearn import svm
import joblib


class SvmUtil(object):

    def __init__(self):
        self.pro = ts.pro_api('此處放tushare的token')

    def svm_learning(self, stockCode):
        end_time = time.strftime('%Y%m%d', time.localtime(time.time()))
        start_year = int(time.strftime('%Y', time.localtime(time.time()))) - 2
        month_day = time.strftime('%m%d', time.localtime(time.time()))
        start_time = '{}{}'.format(start_year, month_day)
        # 獲取數(shù)據(jù)
        df = self.pro.daily(ts_code=stockCode, start_date=start_time, end_date=end_time)

        days_value = df['trade_date'].values[::-1]
        days_close = df['close'].values[::-1]
        days = []
        # 獲取行情日期列表
        for i in range(len(days_value)):
            days.append(str(days_value[i]))

        x_all = []
        y_all = []
        for index in range(15, (len(days) - 5)):
            # 計算三星期共15個交易日相關(guān)數(shù)據(jù)
            start_day = days[index - 15]
            end_day = days[index]
            data = self.pro.daily(ts_code=stockCode, start_date=start_day, end_date=end_day)
            open = data['open'].values[::-1]
            close = data['close'].values[::-1]
            max_x = data['high'].values[::-1]
            min_n = data['low'].values[::-1]
            amount = data['amount'].values[::-1]
            volume = []
            for i in range(len(close)):
                volume_temp = amount[i] / close[i]
                volume.append(volume_temp)

            open_mean = open[-1] / np.mean(open)  # 開盤價/均值
            close_mean = close[-1] / np.mean(close)  # 收盤價/均值
            diff_close_open_mean = close_mean - open_mean  # 收盤價均值-開盤價均值
            volume_mean = volume[-1] / np.mean(volume)  # 現(xiàn)量/均量
            max_mean = max_x[-1] / np.mean(max_x)  # 最高價/均價
            min_mean = min_n[-1] / np.mean(min_n)  # 最低價/均價
            diff_max_min_mean = max_mean - min_mean  # 最高價均值-最低價均值
            vol = volume[-1]
            return_now = close[-1] / close[0]  # 區(qū)間收益率
            std = np.std(np.array(close), axis=0)  # 區(qū)間標(biāo)準(zhǔn)差

            # 將計算出的指標(biāo)添加到訓(xùn)練集X
            # features用于存放因子
            # features = [close_mean, volume_mean, max_mean, min_mean, vol, return_now, std]
            features = [open_mean, close_mean, diff_close_open_mean, volume_mean, max_mean, min_mean, diff_max_min_mean,
                        vol, return_now, std]
            x_all.append(features)

        # 準(zhǔn)備算法需要用到的數(shù)據(jù)
        for i in range(len(days_close) - 20):
            if days_close[i + 20] > days_close[i + 15]:
                label = 1
            else:
                label = 0
            y_all.append(label)

        x_train = x_all[: -1]
        y_train = y_all[: -1]
        # 訓(xùn)練SVM
        model = svm.SVC(C=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0, shrinking=True, probability=False,
                        tol=0.001, cache_size=400, verbose=False, max_iter=-1,
                        decision_function_shape='ovr', random_state=None)
        model.fit(x_train, y_train)
        joblib.dump(model, stockCode[:-3] + "_model.m")

    def svm_predict(self, stockCode):
        if not (os.path.exists(stockCode[:-3] + "_model.m")):
            self.svm_learning(stockCode)
        today = datetime.date.today()
        first = today.replace(day=1)
        last_month = first - datetime.timedelta(days=15)
        start_time = last_month.strftime("%Y%m%d")
        end_time = time.strftime('%Y%m%d', time.localtime(time.time()))
        model = joblib.load(stockCode[:-3] + "_model.m")
        df = self.pro.daily(ts_code=stockCode, start_date=start_time, end_date=end_time)
        open = df['open'].values[::-1]
        close = df['close'].values[::-1]
        train_max_x = df['high'].values[::-1]
        train_min_n = df['low'].values[::-1]
        train_amount = df['amount'].values[::-1]
        volume = []
        for i in range(len(close)):
            volume_temp = train_amount[i] / close[i]
            volume.append(volume_temp)

        open_mean = open[-1] / np.mean(open)
        close_mean = close[-1] / np.mean(close)
        diff_close_open_mean = close_mean - open_mean
        volume_mean = volume[-1] / np.mean(volume)
        max_mean = train_max_x[-1] / np.mean(train_max_x)
        min_mean = train_min_n[-1] / np.mean(train_min_n)
        diff_max_min_mean = max_mean - min_mean
        vol = volume[-1]
        return_now = close[-1] / close[0]
        std = np.std(np.array(close), axis=0)

        # 得到本次輸入模型的因子
        # features = [close_mean, volume_mean, max_mean, min_mean, vol, return_now, std]
        features = [open_mean, close_mean, diff_close_open_mean, volume_mean, max_mean, min_mean, diff_max_min_mean,
                    vol, return_now, std]
        features = np.array(features).reshape(1, -1)
        prediction = model.predict(features)[0]
        return prediction


if __name__ == '__main__':
    code = '002277.SZ'
    # SvmUtil().svm_learning(code)
    SvmUtil().svm_predict(code)

本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末亭罪,一起剝皮案震驚了整個濱河市瘦馍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌皆撩,老刑警劉巖扣墩,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異扛吞,居然都是意外死亡呻惕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門滥比,熙熙樓的掌柜王于貴愁眉苦臉地迎上來亚脆,“玉大人,你說我怎么就攤上這事盲泛”舫郑” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵寺滚,是天一觀的道長柑营。 經(jīng)常有香客問我,道長村视,這世上最難降的妖魔是什么官套? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上奶赔,老公的妹妹穿的比我還像新娘惋嚎。我一直安慰自己,他們只是感情好站刑,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布另伍。 她就那樣靜靜地躺著,像睡著了一般绞旅。 火紅的嫁衣襯著肌膚如雪摆尝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天玻靡,我揣著相機與錄音结榄,去河邊找鬼。 笑死囤捻,一個胖子當(dāng)著我的面吹牛臼朗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蝎土,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼视哑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了誊涯?” 一聲冷哼從身側(cè)響起挡毅,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎暴构,沒想到半個月后跪呈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡取逾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年耗绿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砾隅。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡误阻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出晴埂,到底是詐尸還是另有隱情究反,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布儒洛,位于F島的核電站精耐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏琅锻。R本人自食惡果不足惜黍氮,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一唐含、第九天 我趴在偏房一處隱蔽的房頂上張望浅浮。 院中可真熱鬧沫浆,春花似錦、人聲如沸滚秩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽郁油。三九已至本股,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間桐腌,已是汗流浹背拄显。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留案站,地道東北人躬审。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像蟆盐,于是被迫代替她去往敵國和親承边。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355