午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

Python量化基礎(chǔ):繪制K線圖「代碼復(fù)制可用」

 靜幻堂 2019-01-10
原創(chuàng) 數(shù)據(jù)科學(xué)探索 2019-01-08 12:47:05

不管是對(duì)量化分析師還是普通的投資者來(lái)說(shuō),K線圖(蠟燭圖)都是一種很經(jīng)典、很重要的工具。在K線圖中,它會(huì)繪制每天的最高價(jià)、最低價(jià)、開(kāi)盤(pán)價(jià)和收盤(pán)價(jià),這對(duì)于我們理解股票的趨勢(shì)以及每天的多空對(duì)比很有幫助。

一般來(lái)說(shuō),我們會(huì)從各大券商平臺(tái)獲取K線圖,但是這種情況下獲得的K線圖往往不能靈活調(diào)整,也不能適應(yīng)復(fù)雜多變的生產(chǎn)需求。因此我們有必要學(xué)習(xí)一下如何使用Python繪制K線圖。

導(dǎo)入必要庫(kù)

需要說(shuō)明的是,這里mpl_finance是原來(lái)的matplotlib.finance,但是現(xiàn)在獨(dú)立出來(lái)了(而且好像沒(méi)什么人維護(hù)更新了),我們將會(huì)使用它提供的方法來(lái)繪制K線圖;tushare是用來(lái)在線獲取股票數(shù)據(jù)的庫(kù);matplotlib.ticker中有個(gè)FuncFormatter()方法可以幫助我們調(diào)整坐標(biāo)軸;matplotlib.pylab.date2num可以幫助我們將日期數(shù)據(jù)進(jìn)行必要的轉(zhuǎn)化。

import mpl_finance
import tushare as ts
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib import ticker
from matplotlib.pylab import date2num
import numpy as np
sns.set()
pro = ts.pro_api()
Python量化基礎(chǔ):繪制K線圖「代碼復(fù)制可用」

獲取行情數(shù)據(jù)

我們以上證綜指18年9月份以來(lái)的行情為例。

  • 這里我們對(duì)數(shù)據(jù)按照日期做了個(gè)排序,因?yàn)閠ushare默認(rèn)提供的數(shù)據(jù)是最新的數(shù)據(jù)在最前邊;
  • 我們用pd.to_datetime()將字符串日期轉(zhuǎn)換為pandas Timestamp格式(類似datetime.datetime),然后用date2num轉(zhuǎn)換為matplotlib需要的格式。
  • 然后我們另外添加一列dates,這一列用于解決mpl_finance中存在的一些問(wèn)題,后邊我們會(huì)詳細(xì)解釋。
Python量化基礎(chǔ):繪制K線圖「代碼復(fù)制可用」

繪制K線圖

我們先使用mpl_finance繪制一下,看看是否一切正常。

fig, ax = plt.subplots(figsize=(10,5))
mpl_finance.candlestick_ochl(
ax=ax,
quotes=df[['trade_date', 'open', 'close', 'high', 'low']].values,
width=0.7,
colorup='r',
colordown='g',
alpha=0.7)
ax.xaxis_date()
plt.xticks(rotation=30);
Python量化基礎(chǔ):繪制K線圖「代碼復(fù)制可用」

Python量化基礎(chǔ):繪制K線圖「代碼復(fù)制可用」

可以看到,所有的節(jié)假日包括周末,在這里都會(huì)顯示為空白,這對(duì)于我們圖形的連續(xù)性非常不友好,因此我們要解決掉他們。

解決空白問(wèn)題

def format_date(x,pos):
if x<0 or x>len(date_tickers)-1:
return ''
return date_tickers[int(x)]
date_tickers = df.trade_date2.values
fig, ax = plt.subplots(figsize=(10,5))
ax.xaxis.set_major_formatter(ticker.FuncFormatter(format_date))
mpl_finance.candlestick_ochl(
ax=ax,
quotes=df[['dates', 'open', 'close', 'high', 'low']].values,
width=0.7,
colorup='r',
colordown='g',
alpha=0.7)
ax.set_title('上證綜指K線圖(2018.9-)', fontsize=20);
Python量化基礎(chǔ):繪制K線圖「代碼復(fù)制可用」

Python量化基礎(chǔ):繪制K線圖「代碼復(fù)制可用」

可以看到,空白問(wèn)題完美解決,這里我們解釋一下。由于matplotlib會(huì)將日期數(shù)據(jù)理解為連續(xù)數(shù)據(jù),而連續(xù)數(shù)據(jù)之間的間距是有意義的,所以非交易日即使沒(méi)有數(shù)據(jù),在坐標(biāo)軸上還是會(huì)體現(xiàn)出來(lái)。連續(xù)多少個(gè)非交易日,在坐標(biāo)軸上就對(duì)應(yīng)了多少個(gè)小格子,但這些小格子上方并沒(méi)有相應(yīng)的蠟燭圖。

明白了它的原理,我們就可以對(duì)癥下藥了。我們可以給橫坐標(biāo)(日期)傳入連續(xù)的、固定間距的數(shù)據(jù),先保證K線圖的繪制是連續(xù)的;然后生成一個(gè)保存有正確日期數(shù)據(jù)的列表,接下來(lái),我們根據(jù)坐標(biāo)軸上的數(shù)據(jù)去取對(duì)應(yīng)的正確的日期,并替換為坐標(biāo)軸上的標(biāo)簽即可。

上邊f(xié)ormat_date函數(shù)就是這個(gè)作用。由于前邊我們給dates列生成了從0開(kāi)始的序列連續(xù)數(shù)據(jù),因此我們可以直接把它當(dāng)作索引,從真正的日期列表里去取對(duì)應(yīng)的數(shù)據(jù)。在這里我們要使用matplotlib.ticker.FuncFormattter()方法,它允許我們指定一個(gè)格式化坐標(biāo)軸標(biāo)簽的函數(shù),在這個(gè)函數(shù)里,我們需要接受坐標(biāo)軸的值以及位置,并返回自定義的標(biāo)簽。

你學(xué)會(huì)了嗎?

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多