當前位置:編程學習大全網 - 編程語言 - 如何編程從免費股票軟件中提取實時數據

如何編程從免費股票軟件中提取實時數據

自己寫程序的話,壹種方法是從已提供的信息源,例如webservice獲取數據。還有種辦法就是去連接提供即時信息的網頁硬解析。

代碼舉例如下:

Created on Thu Jul 23 09:17:27 2015

@author: jet

"""

DAY_PRICE_COLS = ['date', 'open', 'high', 'close', 'low', 'volume',

'chg', '%chg', 'ma5', 'ma10', 'ma20',

'vma5', 'vma10', 'vma20', 'turnover']

DAY_PRICE_URL = '%sapi.finance.%s/%s/?code=%s&type=last'

INDEX_KEY = ['SH', 'SZ', 'HS300', 'SZ50', 'GEB', 'SMEB']

INDEX_LIST = {'SH': 'sh000001', 'SZ': 'sz399001', 'HS300': 'sz399300',

'SZ50': 'sh000016', 'GEB': 'sz399006', 'SMEB': 'sz399005'}

INDEX_DAY_PRICE_COLS= ['date', 'open', 'high', 'close', 'low', 'volume',

'chg', '%chg', 'ma5', 'ma10', 'ma20',

'vma5', 'vma10', 'vma20']

K_TYPE_KEY = ['D', 'W', 'M']

K_TYPE_MIN_KEY = ['5', '15', '30', '60']

K_TYPE = {'D': 'akdaily', 'W': 'akweekly', 'M': 'akmonthly'}

MIN_PRICE_URL = '%sapi.finance.%s/akmin?scode=%s&type=%s'

PAGE_TYPE = {'', 'ifeng': 'ifeng.com'}

URL_ERROR_MSG = '獲取失敗,請檢查網絡狀態,或者API端口URL已經不匹配!'

get_hist_data.py

# -*- coding: utf-8 -*-

"""

Created on Thu Jul 23 09:15:40 2015

@author: jet

"""

import const as ct

import pandas as pd

import json

from urllib2 import urlopen,Request

def get_hist_data(code = None, start = None, end = None, ktype = 'D'):

"""

功能:

獲取個股歷史交易數據

--------

輸入:

--------

code:string

股票代碼 比如:601989

start:string

開始日期 格式:YYYY-MM-DD 為空時取到API所提供的最早日期數據

end:string

結束日期 格式:YYYY-MM-DD 為空時取到最近壹個交易日數據

ktype:string(default=D, 函數內部自動統壹為大寫)

數據類型 D=日K線,W=周K線,M=月K線,5=5分鐘,15=15分鐘

30=30分鐘,60=60分鐘

輸出:

--------

DataFrame

date 日期

open 開盤價

high 最高價

close 收盤價

low 最低價

chg 漲跌額

p_chg 漲跌幅

ma5 5日均價

ma10 10日均價

ma20 20日均價

vma5 5日均量

vma10 10日均量

vma20 20日均量

turnover換手率(指數無此項)

"""

code = code_to_APIcode(code.upper())

ktype = ktype.upper()

url = ''

url = get_url(ktype, code)

print(url)

js = json.loads(ping_API(url))

cols = []

if len(js['record'][0]) == 14:

cols = ct.INDEX_DAY_PRICE_COLS

else:

cols = ct.DAY_PRICE_COLS

df = pd.DataFrame(js['record'], columns=cols)

if ktype in ct.K_TYPE_KEY:

df = df.applymap(lambda x:x.replace(u',', u''))

for col in cols[1:]:

df[col]=df[col].astype(float)

if start is not None:

df = df [df.date >= start]

if end is not None:

df = df[df.date <= end]

df = df.set_index('date')

return df

def code_to_APIcode(code):

"""

功能:

驗證輸入的股票代碼是否正確,若正確則返回API對應使用的股票代碼

"""

print(code)

if code in ct.INDEX_KEY:

return ct.INDEX_LIST[code]

else:

if len(code) != 6:

raise IOError('code input error!')

else:

return 'sh%s'%code if code[:1] in ['5', '6'] else 'sz%s'%code

def get_url(ktype, code):

"""

功能:

驗證輸入的K線類型是否正確,若正確則返回url

"""

if ktype in ct.K_TYPE_KEY:

url = ct.DAY_PRICE_URL % (ct.PAGE_TYPE['http'], ct.PAGE_DOMAIN['ifeng'],

ct.K_TYPE[ktype], code)

return url

elif ktype in ct.K_TYPE_MIN_KEY:

url = ct.MIN_PRICE_URL % (ct.PAGE_TYPE['http'], ct.PAGE_DOMAIN['ifeng'],

code, ktype)

return url

else:

raise IOError('ktype input error!')

def ping_API(url):

"""

功能:

向API發送數據請求,若鏈接正常返回數據

"""

text = ''

try:

req = Request(url)

text = urlopen(req,timeout=10).read()

if len(text) < 15:

raise IOError('no data!')

except Exception as e:

print(e)

else:

return text

#測試入口

print(get_hist_data('601989','2015-07-11','2015-07-22'))

  • 上一篇:數據結構編程題求解
  • 下一篇:從入門編程到編寫自己的軟件
  • copyright 2024編程學習大全網