1. 程式人生 > 資訊 >華為 MateStation X 一體機皓月銀今晚 24 點開售:搭載 R7-5800H 處理器,11999 元

華為 MateStation X 一體機皓月銀今晚 24 點開售:搭載 R7-5800H 處理器,11999 元

matplotlib

資料視覺化工具包

安裝

pip install matplotlib

import matplotlib.pyplot as plt

繪圖:plt.plot()

顯示:plt.show()

plot函式

繪製折線圖

  • marker

    • 線型(-,-.,--,...)

    • 點型(v,^,s,*,H,+,x,D,o,...)

  • color:顏色(b,g,r,y,k,w,....),k是black

  • label:線的標註

  • o:k,說明是黑點

繪製多條曲線,執行多個plot()即可

影象標註

  • plt.title():標題

  • plt.xlabel():x軸標籤

  • plt.ylabel():y軸標籤

  • plt.xlim(min,max):x軸範圍

  • plt.ylim(min,max):y軸範圍

  • plt.xticks([]):x軸的刻度

    • plt.xticks(np.arange(0,10,2),['a','b','c','d','e'])

  • plt.yticks([]):y軸的刻度

  • plt.legend():顯示線的標籤

  • pandas包對plot的支援

    • df = pd.read_csv('file_name.csv',parse_dates=['date',index_col='date'])['open','close','high','low']

    • df.plot()

    • plt.show()

畫布與子圖

  • 畫布:fig = plt.figure()

  • 子圖:ax1 = fig.add_subplot(2,2,1)

    • 將畫布分成兩行兩列,圖佔第一個位置

  • 調節子圖間距:suplots_adjust(left,bottom,right,top,wspace,hspace)

圖型別

函式說明
plt.plot(x,y,fmt,...) 座標圖
plt.boxplot(data,notch,position) 箱型圖
plt.bar(left,right,width,bottom) 條形圖
plt.barh(width,bottom,left,height)
橫向條形圖
plt.polar(theta,r) 極座標圖
plt.pie(data,explode) 餅圖
plt.psd(x,NFFT=256,pad_to,Fs) 功率譜密度圖
plt.specgram(x,NFFT=256,pad_to,F) 譜圖
plt.cohere(xy,NFFT=256,Fs) X-Y相關性函式
plt.scatter(x,y) 散點圖
plt.step(x,y,where) 步階圖
plt.hist(x,bins,normed) 直方圖

繪製k線圖

  • matplotlib.finanace子包中有許多繪製金融相關圖的函式介面

  • 繪製k線圖:matplotlib.finanace.candlestick_ochl函式

     1 import matplotlib.finanace as fin
     2 from matplotlib.dates import date2num
     3  4 df['time'] = date2num(df.index.to_pydatetime('date'))
     5 df = df.iloc[:100,:]
     6 fig = plt.figure()
     7 ax = fig.add_subplot(1,1,1)
     8 # 對應ochl
     9 arr =df['time','open','close','high','low'].values
    10 fin.candlestick_ochl(ax,arr)
    11 fig.show()

Tushare

免費、開源的python財經資料介面包

安裝

pip install Tushare

依賴pandas,lxml

使用

http://tushare.org/

股票資料分析

 1 import numpy as np
 2 import pandas as pd
 3 import matplotlib.plot as plt
 4 import tushare as ts
 5  6 df = ts.get_k_data('600660',start='2010')   # 查詢福耀玻璃
 7 df.to_csv('福耀玻璃.csv')
 8 df = pd.read_csv('福耀玻璃.csv',index_col='date',parse_dates=['date'])[['open','close','high','low']]
 9 10 # 輸出收盤比開盤上漲3%以上的日期
11 df[(df['close']-df['open'])/df['open']] >= 0.03]
12 13 # 輸出所有開盤比前日收盤跌幅超過2%的日期
14 (df['open']-df['close'].shift(1))/df['close'].shift(1)<=-0.02
15 16 # 從2019年1月1日開始到2021年,每月第一個交易日買入1手股票,每年最後一個交易日賣出所有股票,收益如何?
17 price_last = df['open'][-1]
18 df = df['2019-01':'2021-12']    # 去除首尾不用的資料
19 df_monthly = df.resample("M").first()
20 df_yearly = df.resample("A").last()
21 cost_money = 0
22 hold = 0
23 for year in range(2019,2022):
24     cost_money += df_monthly[str(year)]['open'].sum()*100
25     hold += len(df_monthly[str(year)])*100
26     if year != 2022:
27         cost_money -= df_yearly[str(year)]['open'][0]*hold
28         hold = 0
29     
30 cost_money -= hold * price_last    
31 printf(-cost)

雙均線分析

均線指標:5天和10天短線操作的參照指標

均線指標:30天和60天中期操作的參照指標

均線指標:120天和240天長期操作的參照指標

金叉:短期均線上穿長期均線,買入訊號

死叉:短期均線下穿長期均線,賣出訊號

 1 import numpy as np
 2 import pandas as pd
 3 import matplotlib.plot as plt
 4 import tushare as ts
 5 '''
 6 看5日均線和30日均線
 7 假如從2019年1月1日開始,初始資金為100000元,金叉儘量買入,死叉全部賣出,則到今天位置,收益率如何?
 8 '''
 9 df = ts.get_k_data('600660',start='2019')   # 查詢福耀玻璃
10 df.to_csv('福耀玻璃.csv')
11 df = pd.read_csv('福耀玻璃.csv',index_col='date',parse_dates=['date'])[['open','close','high','low']]
12 13 # 求5日均線和30日均線
14 df['ma5']=df['open'].rolling(5).mean()
15 df['ma30'] = df['open'].rolling(30).mean()
16 df = df.dropna()    # 去有掉空資料的行
17 18 # 畫圖 
19 df[['close','ma5','ma30']].plot()
20 plt.show()
21 22 # 計算金叉日期和死叉日期
23 sr1 = df['ma5'] < df['ma30']
24 sr2 = df['ma5'] >= df['ma30']
25 # shift(1)向後移一位
26 #sr1:           TTTTTFFFFFTTTTT
27 #sr2.shift(1):   FFFFFTTTTTFFFFF
28 death_cross = df[sr1 & sr2.shift(1)].index
29 gloden_cross = df[~(sr1 | sr2.shift(1))].index
30 31 # 假設從2019年1月1日開始,初始資金為100000元,金叉儘量買入,死叉全部賣出,則到今天為止,求收益率?
32 sr1 = pd.Series(1,index=golden_cross)
33 sr2 = pd.Series(0,index=death_cross)
34 sr = sr1.append(sr2).sort_index()
35 money = 100000
36 hold = 0
37 38 for i in range(0,len(sr)):
39     p = df['open'][sr.index[i]]
40     if ar.iloc[i] == 1:
41         # 金叉買進
42         buy = (money // (100 * p))
43         hold += buy*100
44         money -= buy-100*p
45     else:
46         # 死叉賣出
47         money += hold * p
48         hold = 0
49 50 p = df['open'][-1]        
51 now_money = hold * p + money
52 intrest = now_money - first_money