Ref = = = & gt圖沙雷
系統:Ubuntu 15.04 Python:2.7環境包:Anaconda,僅供娛樂。...
最近在學Python語言,就想學學怎麽炒股。所以在學習了壹些基礎知識之後,打算做壹些股票相關的演示練習。首先要解決的問題當然是數據收集。
我上網搜了壹下,看了壹些朋友的代碼片段,知道API請求數據的格式是這樣的:',' ifeng': 'ifeng.com'}
URL_ERROR_MSG = '獲取失敗,請檢查網絡狀態,或者API端口URL不匹配!'
獲取_歷史_數據. py
# -*-編碼:utf-8 -*-
"""
創建於2007年7月23日星期四09:15:40 2015
@作者:jet
"""
將常數作為聯系類型導入
進口熊貓作為pd
導入json
從urllib2導入urlopen,請求
def get_hist_data(code = None,start = None,end = None,ktype = 'D '):
"""
功能:
獲取個股歷史交易數據
-
輸入:
-
代碼:字符串
股票代碼,例如:601989。
開始:字符串
開始日期格式:當YYYY-MM-DD為空時,取API提供的最早日期數據。
結束:字符串
結束日期格式:當YYYY-MM-DD為空時,取最近壹個交易日的數據。
Ktype:string(默認=D,函數自動統壹為大寫)
數據類型D=日k線,W=周k線,M=月k線,5=5分鐘,15=15分鐘。
30=30分鐘,60=60分鐘?
輸出:
-
數據幀
日期日期
開盤價
最高價
收盤價格
最低價格
Chg漲跌?
P_chg漲跌
Ma5五天平均價格
Ma10 10日平均價格
Ma20 20天平均價格
VMA5的5天平均值
Vma10日平均
Vma20 20日平均
周轉率(該指數沒有這壹項)
"""?
code = code _ to _ API code(code . upper())
ktype = ktype.upper()
url =“”?
url = get_url(ktype,code)?
打印(url)
js = json.loads(ping_API(url))
cols = []
if len(js[' record '][0])= = 14:
cols = ct。指數_日_價格_列
否則:
cols = ct。日價格欄
df = pd。DataFrame(js['record'],columns=cols)
如果ct中的ktype。K_TYPE_KEY:
df = df . apply map(lambda x:x . replace(u ',',u ' '))
對於列中的列[1:]:
df[col]=df[col]。astype(浮點型)
如果開始不是無:
df = df[df . date & gt;=開始]
如果end不是None:
df = df[df . date & lt;=結束]
df = df.set_index('date ')
還df?
def code_to_APIcode(代碼):
"""
功能:
驗證輸入的股票代碼是否正確,如果正確,返回API使用的股票代碼。
"""
打印(代碼)
ct中的if代碼。INDEX_KEY:
返回ct。INDEX _ LIST[代碼]
否則:
if len(代碼)!= 6:
引發IOError('代碼輸入錯誤!')
否則:
如果代碼[:1]在['5 ',' 6'] else 'sz%s'%code中,則返回' sh%s'%code
def get_url(ktype,code):
"""
功能:
驗證輸入的k線類型是否正確,如果正確則返回url。
"""?
如果ct中的ktype。K_TYPE_KEY:
url = ct。日價格網址%。PAGE_TYPE['http'],ct。PAGE_DOMAIN['ifeng'],
ct。K_TYPE[ktype],代碼)
返回url
聯系類型中的elif ktype。K_TYPE_MIN_KEY:
url = ct。最低價格URL %。PAGE_TYPE['http'],ct。PAGE_DOMAIN['ifeng'],
代碼,ktype)
返回url
否則:
引發IOError('ktype輸入錯誤!')
定義ping_API(url):
"""
功能:
向API發送數據請求,如果鏈接正常則返回數據。
"""
text = ' '
嘗試:
req =請求(url)
text = urlopen(req,timeout=10)。read()?
if len(text)& lt;15:
引發IOError('無數據!')?
例外情況為e:
打印(e)
否則:
返回文本
#測試門戶
print(get _ hist _ data(' 601989 ',' 2015-07-11 ',' 2015-07-22 '))