一眼看清股市狀況之用Python繪製K線圖

前幾天美股熔斷,據悉這次熔斷是自美股有熔斷機制30年來第二次,成了頭條新聞。對股票一竅不通的我也在此情此景進行了一波學習,股市的變化瞬息萬千,有一種圖可以用來清晰地反應一段時間內股市的變化情況,它就是K線圖。

今天我們用Python基於兩種不同的方式來繪製K線圖,它們都是Python可視化的好幫手——Matplotlib、Pyecharts。

K線圖這種圖表源處於日本德川幕府時代,被當時日本米市的商人用來記錄米市的行情與價格波動,後因其細膩獨到的標畫方式而被引入到股市及期貨市場。目前,這種圖表分析法在我國以至整個東南亞地區均尤爲流行。由於用這種方法繪製出來的圖表形狀頗似一根根蠟燭,加上這些蠟燭有黑白之分,因而也叫陰陽線圖表。

file

K線圖由週期內的開盤價、最高價、最低價以及收盤價繪製而成。首先選擇該日的最高價和最低價,垂直連線,接着將改日的開盤價和收盤價連成一個長方體。如果該日的開盤價高於收盤價,以綠色來表示(跌了),反之以紅色來表示(漲了)。這便是K線圖繪製的原理,而Matplotlib、Pyecharts都已經給我們寫好了繪製K線圖的方法,我們僅需調用這些方法。

生成數據

這邊我爲了方便繪圖根據這些數據之間簡單的邏輯關係,隨機生成了一個月的股市數據,數據順序具體爲日期,開盤價,最高價,最低價,收盤價。

start="2020-1-1"
data=[]
for i in range(31):    
    random_data=[random.randint(2000,2500) for _ in range(4)]
    sorted_data=sorted(random_data)
    day=date2num(datetime.datetime.strptime(start,'%Y-%m-%d'))
    print(day)
    if i==0:
        one=(day,sorted_data[1],sorted_data[3],sorted_data[0],sorted_data[2]) if random.random()>0.5 else (day,sorted_data[2],sorted_data[3],sorted_data[0],sorted_data[1])       
    else:
        one=(day+i,sorted_data[1],sorted_data[3],sorted_data[0],sorted_data[2]) if random.random()>0.5 else (day+i,sorted_data[2],sorted_data[3],sorted_data[0],sorted_data[1])
    data.append(one)

Matplotlib繪製

file

from matplotlib import pyplot as plt
from mpl_finance import candlestick_ohlc

fig,ax=plt.subplots(facecolor="white",figsize=(12,8))
fig.subplots_adjust(bottom=0.1)
ax.xaxis_date()
plt.xticks(rotation=30)
plt.title('K-line')
plt.xlabel('time')
plt.ylabel('price')
candlestick_ohlc(ax,data,width=0.5,colorup='r',colordown='green') 
plt.grid(True)

Pyecharts繪製

file

c=(
        Kline()
        .add_xaxis(["2017/7/{}".format(i + 1) for i in range(31)])
        .add_yaxis("kline", 
                   data,
                   itemstyle_opts=opts.ItemStyleOpts(
                   color="#ec0000",
                   color0="#00da3c",
                   border_color="#8A0000",
                   border_color0="#008F28",
            )
        )
        .set_global_opts(
            xaxis_opts=opts.AxisOpts(is_scale=True),
            yaxis_opts=opts.AxisOpts(
                is_scale=True,
                splitarea_opts=opts.SplitAreaOpts(
                    is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
                ),
            ),
            title_opts=opts.TitleOpts(title="K-line"),
        )
)
c.render("k-line.html")

另外,我們還可以設置伸縮座標軸,便於放大縮小觀察k線圖。

file

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章