Python+Flask實現股價查詢系統。Python繪製股票k線走勢
一、實現效果圖
開啟預設顯示半年線,可以通過視覺化型別選擇視覺化k線圖、高低點等。
二、實現思路
此web應用程式主要使用了以下Python第三方庫:
Plotly – 資料視覺化庫(Plotly資料視覺化方法)
Pandas – 資料處理及分析庫
Tushare – 財經資料介面庫
Flask – Web應用框架
1、獲取資料
整個的思路比較簡單,股票資料的獲取主要通過 ***Tushare***獲取。
如下是獲取000001.SZ整年的資料的方法。
import tushare as ts
ts.set_token('b94ecd1e37a3628890e89b90e0259b6db72b0ae0b17dadd2c28c5c4c')
pro = ts.pro_api()
df = pro.daily(ts_code='000001.sz', start_date='20200101', end_date='202001230')
df.head()
這裡有一個小問題。資料中沒有股票程式碼對應的公司名稱。所以在此之前需要呼叫ts中的其他方法獲取股票程式碼對應的相關資訊。我將名稱與公司資訊獲取之後儲存在了本地,方便後續使用。呼叫方法和返回資料如下。
2、視覺化資料
這裡視覺化主要用的是plotly,通過plotly繪製的圖形有著更好的互動效果。可以通過ploytly的時間序列選擇器滑鼠拖動選擇想要檢視的具體內容。將每種不同的圖形封裝成繪圖類的對應方法即可。
from datetime import datetime
import tushare as ts
import pandas as pd
import plotly as py
import plotly.graph_objs as go
pyplt = py.offline.plot
#讀取股票程式碼與名稱字典
ts.set_token('b94ecd1e37a3628890e89b90e0259b6db72b0ae0b17dadd2c28c5c4c')
pro = ts.pro_api()
df=pd.read_csv("stock_code.csv")
# df = pro.daily(ts_code='000001.sz', start_date='20190701', end_date='20190930')#直接儲存
class Chart_Plot:
def __init__(self,start_date,end_date,stock1="000001",stock2="000002"):
#處理引數格式,符合tushare呼叫規範
self.start_date=start_date.replace("-","")
self.end_date=end_date.replace("-","")
#獲取指定股票程式碼的名稱
temp=df.loc[df.ts_code.str.contains(stock1)]
self.stock1_code=temp["ts_code"].values[0]
self.stock1=pro.daily(ts_code=self.stock1_code, start_date=start_date, end_date=end_date)
self.name1=temp['name'].values[0]
#獲取要對比的股票程式碼的名稱
temp = df.loc[df.ts_code.str.contains(stock2)]
self.stock2_code = temp["ts_code"].values[0]
self.stock2=pro.daily(ts_code=self.stock2_code, start_date=start_date, end_date=end_date)
self.name2=temp['name'].values[0]
def candle_stick(self,period="day"):#日K線圖
#預設獲取日k,如果period不為日k,則獲取對應值
if period=="周k":
self.stock1=pro.weekly(ts_code=self.stock1_code,start_date=self.start_date,end_date=self.end_date)
elif period=="月k":
self.stock1 = pro.monthly(ts_code=self.stock1_code, start_date=self.start_date, end_date=self.end_date)
strdate =self.stock1['trade_date'].tolist()
#日期字串轉時間序列
date=[]
for i in strdate:
X = datetime.strptime(i, '%Y%m%d')
date.append(X)
candle_trace = go.Candlestick(x = date,
open = self.stock1.open,
high = self.stock1.high,
low = self.stock1.low,
close = self.stock1.close,
increasing=dict(line=dict(color= '#ff0000')),
decreasing=dict(line=dict(color= '#00ff00')),
name = self.stock1['ts_code'].values[0])
candle_data = [candle_trace]
candle_layout = {'title': self.stock1['ts_code'][0],'yaxis': {'title': '價格'}}
candle_fig = dict(data=candle_data, layout=candle_layout)
div = pyplt(candle_fig, output_type='div', include_plotlyjs=False, auto_open=False, show_link=False)
return div
def twoline_graph(self): #半年線圖
#self.stock1['close']取出來的值都是帶有索引值的兩列的矩陣,具體看excl表格
#tolist函式則將他們變為列表,除去索引值
close = self.stock1['close'].tolist()
strdate = self.stock1['trade_date'].tolist()
date=[]
for i in strdate:
X = datetime.strptime(i, '%Y%m%d')
date.append(X)
# 畫圖語句:go.Scatter
trace = [go.Scatter(
x=date,
y=close
)]
#print (trace)
#[Scatter({'x': [2019-09-30 00:00:00, 2019-09-27 00:00:00.....
layout = dict(
title=self.stock1['ts_code'].values[0]+":"+self.name1,
xaxis=dict(title='日期'),
yaxis=dict(title='價格')
)
#print (layout)
#{'title': 'ETF50', 'xaxis': {'title': '日期'}, 'yaxis': {'title': '價格'}}
fig = dict(data=trace, layout=layout)
#print (fig)
div = pyplt(fig, output_type='div', include_plotlyjs=False, auto_open=False, show_link=False)
#print (div)
return div
def high_low(self):
high = self.stock1['high'].tolist()
low = self.stock1['low'].tolist()
strdate = self.stock1['trade_date'].tolist()
date = []
for i in strdate:
X = datetime.strptime(i, '%Y%m%d')
date.append(X)
# 畫圖語句:go.Scatter
trace = [go.Scatter(
x=date,
y=high
),
go.Scatter(
x=date,
y=low
)
]
# print (trace)
# [Scatter({'x': [2019-09-30 00:00:00, 2019-09-27 00:00:00.....
layout = dict(
title=self.stock1['ts_code'].values[0]+":"+self.name1,
xaxis=dict(title='日期'),
yaxis=dict(title='價格')
)
# print (layout)
# {'title': 'ETF50', 'xaxis': {'title': '日期'}, 'yaxis': {'title': '價格'}}
fig = dict(data=trace, layout=layout)
# print (fig)
div = pyplt(fig, output_type='div', include_plotlyjs=False, auto_open=False, show_link=False)
return div
在呼叫此方法後將返回結果傳遞給前端的圖形展示區域即可。
三、原始碼獲取
關注以下公眾號回覆"0050"即可get√
在這裡插入圖片描述
相關文章
- ios股票K線圖的繪製iOS
- iOS股票K線圖、分時圖繪製iOS
- HSStockChart:用 Swift 繪製股票分時圖、K 線圖Swift
- 深度學習量化交易---0.1.股票K線圖繪製深度學習
- C#繪製股票K線圖和量化交易買賣點C#
- 用Java寫股票查詢系統Java
- WPS股票價格查詢EXCEL表格Excel
- 美股收盤走勢分化 蘋果股價累計下跌了15%蘋果
- amCharts繪製帶趨勢線折線圖
- 用Python繪製專業的K線圖【含原始碼】Python原始碼
- Flutter 股票 分時線、K線Flutter
- 【HFSS】HFSS繪製梯形走線的5種方法
- https如何使用python+flask來實現HTTPPythonFlask
- 05月15日短線爆漲股與盤後分析走勢
- python實現查詢糾錯Python
- Android開發之基於MPAndroidChart實現股票K線圖(一)Android
- 使用python matplotlib實現動圖繪製Python
- 使用html5實現的繪製直線效果HTML
- 用 python 製作全國身份證號驗證及查詢系統Python
- 等值線圖的Python繪製方法Python
- [Python實戰]Python製作天氣查詢軟體Python
- 燈光系統圖繪製
- python爬取股票最新資料並用excel繪製樹狀圖PythonExcel
- 基於LinkedBlockingQueue實現股票交易系統BloC
- Python量化交易系統實戰--獲取股票資料Python
- A股週期性行業的股票&A股壟斷(稀缺資源)的股票行業
- in子查詢與表連線是否等價?
- 【雲圖】如何製作全國KTV查詢系統?
- 05月14日三支短線爆漲股與盤後分析走勢
- 用python+flask自己製作api(教程附原始碼)PythonFlaskAPI原始碼
- OpenGL實現Hermite演算法繪製三次曲線MIT演算法
- python爬取基金股票最新資料,並用excel繪製樹狀圖PythonExcel
- canvas 繪製線條Canvas
- SVG 繪製直線SVG
- canvas繪製直線Canvas
- 用Python的random模組繪製折線圖Pythonrandom
- 採購詢比價系統
- 在UnityUI中繪製線狀統計圖UnityUI