深度學習量化交易---0.1.股票K線圖繪製

最老程式設計師閆濤發表於2018-11-25

究股票交易的基本功就是看K線圖,所以在這一節裡面,我們的任務就是拿到一支股票的歷史資料,我們用python畫出其K線圖,這是進行下一步技術分析的基礎。
我們以上證綜指為例,之所以沒拿某支股票為例,是因為股票容易被操控,而上證綜指很難被操控,因為規律性會更強一些。
我們先來看怎樣顯示上證綜指原始資料,如下所示:

    @staticmethod
    def draw_kline():
        print('繪製股票每日價格K線圖')
        raw_datas = pd.read_csv('dataset_2.csv')
        datas = raw_datas.iloc[-30:, 1:]
        print(datas)

在上面的程式中,我們取最新的30條資料,並且去掉第一列(代表股票程式碼),執行結果如下所示:
在這裡插入圖片描述
股票的K線圖是股市最常用的技術分析手段,拿到股票資料第一項就是研究K線圖,所以我們在這裡就要先繪製出K線圖,在執行下面的程式碼之前,需要先安裝:

pip install mpl_finance

接著我們需要解決在matplotlib中顯示中文的問題,首先在windows機器的C盤中查詢simhei.ttf檔案,將該檔案拷貝到下面程式顯示的目錄中:

import matplotlib
print(matplotlib.matplotlib_fname())

其會顯示如下內容:
/home/yantao/dev/tf/tfe/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc
這是matplotlib的配置檔案路徑,我們將simhei.ttf拷貝到/home/yantao/dev/tf/tfe/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/目錄下,接著編輯/home/yantao/dev/tf/tfe/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc檔案,新增如下內容:

font.family : sans-serif
font.sans-serif : SimHei
axes.unicode_minus : False

接著刪除快取檔案:

rm -Rf ~/.cache/matplotlib/

具體程式碼如下所示:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter, WeekdayLocator, DayLocator, MONDAY, date2num
from mpl_finance import candlestick_ohlc
from pylab import mpl
from datetime import datetime
......
    @staticmethod
    def draw_kline():
        print('繪製股票每日價格K線圖')
        raw_datas = pd.read_csv('dataset_2.csv')
        datas = raw_datas.iloc[-30:, 1:]
        datas.date = [date2num( datetime.strptime(date, '%Y/%m/%d') ) for date in datas.date]
        recs = list()
        for i in range(len(datas)):
            recs.append(datas.iloc[i, :])
        ax = plt.subplot()
        mondays = WeekdayLocator(MONDAY)
        weekFormatter = DateFormatter('%y %b %d')
        ax.xaxis.set_major_locator(mondays)
        ax.xaxis.set_minor_locator(DayLocator())
        ax.xaxis.set_major_formatter(weekFormatter)
        plt.rcParams['font.family'] = 'sans-serif'
        plt.rcParams['font.sans-serif'] = ['SimHei']
        plt.rcParams['axes.unicode_minus'] = False
        ax.set_title(u'上證綜指kline picture')
        candlestick_ohlc(ax, recs, width=0.7, colorup='r', colordown='g')
        plt.setp(plt.gca().get_xticklabels(), rotation=50, horizontalalignment='center')
        plt.show()

第4、5行:讀入原始資料,並去掉第一列(代表股票程式碼),取最新30條記錄;
第6行:修改資料中日期欄位,將其變為mpl_finance庫需要的數字格式;
第7~9行:準備用於繪製的資料;
具體繪製過程沒有太多需要關注的地方,這裡需要注意為了讓matplotlib顯示中文,16~18行進行的相關設定。
執行上面的程式,可以繪製出如下圖形:
在這裡插入圖片描述

相關文章