亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

使用Python畫股票的K線圖的方法步驟

系統 1799 0

導言

本文簡單介紹了如何從網易財經獲取某支股票的價格數據,并根據價格數據畫出相應的日K線圖。有助于新手了解并使用Python的相關功能。包括列表、自定義函數、for循環、if函數以及如何使用matplotlib進行作圖等內容。

第一步:從網易財經獲取股票的價格數據

我一般是在網易財經查看某支股票的價格和成交數據,網易財經可以查到任意滬深的股票,我們使用招商銀行的數據作為參考。

1、構建爬蟲獲取股票價格數據

這里不對Python做介紹了,如果需要了解什么是Python,可以自行百度或者訪問Python官網.

加載需要的模塊

代碼如下:

            
import re,urllib2,time,csv,datetime
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.finance as mpf
import matplotlib.dates as mpd
          

其中urllib2是用來解析HTML內容的包,主要是從url獲取網頁內容;re是正則表達式包,本文會使用正則表達式來從抓取的網頁數據中獲取到有用的數據;time和datetime是時間相關的包,主要用來設定要抓取的時間以及其它相關時間的處理;csv包是用來生成csv數據(該數據會被用于R來畫K線圖),其余的幾個包會在使用時單獨介紹,你也可以在需要的時候在程序頭部補充import。

設定時間相關

代碼如下:

            
t = time.localtime() # 獲取當前的本地時間
year = range(t[0],1989,-1) # 設定年度范圍,從當前年度至滬市開市的年份倒序生成
season = range(4,0,-1)  # 生成季度的數據列表,從4季度到1季度倒序生成
          

為什么要這么設定時間呢?仔細的查看網易股票數據的url,是按照年度和季度來構成的,我們發現搜索數據也是用年度和季度來搜索的。

使用Python畫股票的K線圖的方法步驟_第1張圖片

招商銀行2017年1季度數據

其url構成如下:http://quotes.money.163.com/trade/lsjysj_600036.html?year=2017&season=1可見可拆為6個子字符串,分別是http://quotes.money.163.com/trade/lsjysj_、600036、.html?year=、2017、&season=、1。其中第2、4、6個子串可以參數化輸入獲取特定需求的數據。

定義獲取數據的函數

代碼如下:

            
def getData(url):
  request = urllib2.Request(url)
  response = urllib2.urlopen(request)
  content = response.read()

  pattern = re.compile('  ')
  ta = re.findall(pattern, str(content))
  pattern1 = re.compile("")
  pattern2 = re.compile("")
  pattern3 = re.compile(",")
  tab1 = re.sub(pattern1,"",str(ta))
  tab2 = re.sub(pattern2,"",str(tab1))
  tab = re.sub(pattern3, "", str(tab2))

  if len(tab) == 0:
    data = []
  else:
    pattern3 = re.compile('(.*?)')
    data = re.findall(pattern3, str(tab))

  for d in data:
    if d == '':
      data.remove('')

  return data


          

本段代碼定義個一個函數getDate(url),函數名為getData,參數為url。相當于從該url獲取股票的交易數據,顯然這個函數是定制的。

首先,我們用urllib2模塊的相關函數解析并獲取網頁的數據。第二步,使用re模塊的數據對抓取的網頁內容進行初步的處理,分為了三個過程

  1. 首先匹配"??? "之間的內容并返回,因為在這之間的內容包含了所有需要的數據,這是一個簡單的正則表達式,表示返回??? 兩個字符串之間的所有內容
  2. 匹配、并使用替換,因為這兩個字符串會影響后續的匹配數據,現行替換掉可以更方便的匹配到需要的數據
  3. 替換到千分位","號,因為Python和R并不會識別有千分位號的數據,所以我們要將數據轉換為非千分位的數據。
  4. tab是按照要求最后獲取的包含數據和文本的原始內容
  5. 用if函數來獲取除文本的數據,因為如果year和season超過了當前的界限,會返回空的tab,所以我們在這里進行判斷,如果少了這個判斷,會報出index error。這個if函數表示了如果tab為空,data也是個空的列表,如果tab不為空,那么根據pattern3返回需要的數據至data列表
  6. 用一個for循環來遍歷data列表,刪除空白的內容(其實這一步不需要,因為在if中已經剔除了空的內容。

所以定義了以上的函數后,就可以使用該函數返回特定url的數據。

獲取某支股票的數據

代碼如下:

            
def get_stock_price(code):
  url1 = "http://quotes.money.163.com/trade/lsjysj_"
  url2 = ".html?year="
  url3 = "&season="
  urllist = []
  for k in year:
    for v in season:
      urllist.append(url1+str(code)+url2+str(k)+url3+str(v))
  
  price = []
  for url in urllist:
    price.extend(getData(url))
  return price

          

自定義get_stock_price(code)函數,code是指股票代碼,使用該函數可以返回該股票所有的歷史數據(OHLC以及其它)思路很簡單:

  1. 根據code構建其股票數據的頁面的url列表
  2. 使用getData(url)函數和for循環,返回所有的歷史數據

最終返回的是price的數據列表

這樣,我們就可以使用該函數獲取某支股票的所有歷史數據:

            
# get all histrocial data include all price and others
price = get_stock_price(600036)
          

獲取招商銀行(600036)的所有歷史數據。

2、保存數據

保存為csv文件

代碼如下:

            
writer = csv.writer(file("stock.csv",'wb'))
writer.writerow(['Date','Open','High','Low','Close','Volume'])
pr = []
for i in range(0,len(price),11):
  pr.extend([[price[i],price[i+1],price[i+2],price[i+3],price[i+4],price[i+8]]])

for prl in pr:
  writer.writerow(prl)


          

我們使用csv模塊保存數據為csv文件,用于在R中讀取并作圖,我們查看在網易的數據展示可以發現,總共11個字段,所有我們在每11個切片中,返回時間、OHLC(開盤價、最高價、最低價、收盤價)和交易量的數據并保存為csv的文件格式。

處理保存數據到列表

代碼如下:

            
# get the number for date by date2num
def Date_no(strdate):
  t = time.strptime(strdate, "%Y-%m-%d")
  y,m,d = t[0:3]
  d = datetime.date(y, m, d)
  n = mpd.date2num(d)

  return n

# get the price data 
pr = []
for i in range(0,len(price),11):
  pr.extend([[
    Date_no(price[i])
    ,float(price[i+1])
    ,float(price[i+2])
    ,float(price[i+3])
    ,float(price[i+4])
    ,float(price[i+8])]]
    )


          

這個程序片段是用來處理和保存數據用于在pyhton中做出K線圖。

定義函數將字符串的時間處理為matplotlib中作圖使用的數值(直接獲取的數據中時間是字符串)
返回返回時間、OHLC(開盤價、最高價、最低價、收盤價)和交易量的數據并存儲在pr這個列表里

第二步:做出K線圖

在R中作圖

代碼如下:

            
library(quantmod)

rm(list = ls())
setwd("~/GitHub/index/")
price <- as.xts(read.zoo("stock.csv",header=TRUE,sep=",",colClasses = c("Date", rep("numeric",5))))

n <- nrow(price)
m <- nrow(price)-100

#pdf(file = "k.pdf")
chartSeries(price[c(m:n)],theme = chartTheme("white"),up.col = "red",dn.col = "green",name = "600036",time.scale = 0.5,line.type = "l",bar.type = "ohlc",major.ticks='auto', minor.ticks=TRUE)
#dev.off()


          

做出的圖片效果如下:

? 使用Python畫股票的K線圖的方法步驟_第2張圖片

R中可以使用quantmod包中的chartSeries函數畫出K線圖,具體的使用方法可以參考chartSeries參考文檔

在Python中使用matplotlib作圖

代碼如下:

            
quotes = pr[0:80]

print(quotes)

fig,ax = plt.subplots(figsize=(30,6))
fig.subplots_adjust(bottom=0.2)
mpf.candlestick_ohlc(ax,quotes,width=0.4,colorup='r',colordown='g')
plt.grid(False)
ax.xaxis_date()
ax.autoscale_view()
plt.setp(plt.gca().get_xticklabels(), rotation=30) 
plt.show()


          

K線效果圖如下:

使用Python畫股票的K線圖的方法步驟_第3張圖片

使用matplotlib的candlestick_ohlc的參考文檔,但是目前有一些問題,比如會將非交易日期也置放在x軸,會到至K線出現斷裂,等待下一步的解決方法吧。

相關的代碼已經同步到最大的同性交友網站我的Github上了,可以參考,其中stock.py是主要程序。

寫在最后:因為我有近5年沒使用過python了,所有代碼可能不太簡練。我也旨在解決問題,當然解決問題的方法千萬種,比如這個例子,最直接的辦法就是使用網易的下載所有(或者特定時間段)的數據為csv格式,然后用Excel畫K線也可以的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 特级毛片在线大全免费播放 | 久草久草在线视频 | 亚洲va在线va天堂va四虎 | 久久国产精品亚洲77777 | 欧美亚洲另类综合 | 四虎影院www| 国产精品久久久久久久久免费观看 | 久草国产精品 | 成人国产激情福利久久精品 | 亚洲成a人片在线观看精品 亚洲成a人一区二区三区 | 久久夜色tv网站 | 欧美美女xnxx | 国产一区二区三区在线免费 | 国产精品12p | 久久久久一区二区三区 | 婷婷国产天堂久久综合五月 | 中国一级特黄特级毛片 | 在线观看日韩欧美 | 波多野结衣一区在线 | 久久www免费人成看片入口 | 色图一区| 成人a毛片免费视频观看 | 综合久久99| 久久精品视频1 | 欧美123区 | 在线视频一区二区三区 | 天海翼一区二区三区高清视频 | 欧美成成人免费 | 波多野结衣中文无毒不卡 | 欧美日韩精品一区二区在线线 | 久久综合狠狠综合久久综合88 | 高清国产精品久久 | 在线欧美精品一区二区三区 | 亚洲国产免费 | 日韩精品亚洲人成在线观看 | 国产精品久久久久久影视 | 一级不卡毛片免费 | 咪咪爱在线视频 | 亚洲社区在线 | 国产美女一级视频 | 成人国产片免费 |