① 如何選取過去每個月股票的市值 python
類似,可以修改一下
股票漲跌幅數據是量化投資學習的基本數據資料之一,下面以python代碼編程為工具,獲得所需要的歷史數據。主要步驟有:
(1) #按照市值從小到大的順序活得N支股票的代碼;
(2) #分別對這一百隻股票進行100支股票操作;
(3) #獲取從2016.05.01到2016.11.17的漲跌幅數據;
(4) #選取記錄大於40個的數據,去除次新股;
(5) #將文件名名為「股票代碼.csv」。
具體代碼如下:
# -*- coding: utf-8 -*-
"""
Created on Thu Nov 17 23:04:33 2016
獲取股票的歷史漲跌幅,並分別存為csv格式
@author: yehxqq151376026
"""
import numpy as np
import pandas as pd
#按照市值從小到大的順序活得100支股票的代碼
df = get_fundamentals(
query(fundamentals.eod_derivative_indicator.market_cap)
.order_by(fundamentals.eod_derivative_indicator.market_cap.asc())
.limit(100),'2016-11-17', '1y'
)
#分別對這一百隻股票進行100支股票操作
#獲取從2016.05.01到2016.11.17的漲跌幅數據
#選取記錄大於40個的數據,去除次新股
#將文件名名為「股票代碼.csv」
for stock in range(100):
priceChangeRate = get_price_change_rate(df['market_cap'].columns[stock], '20160501', '20161117')
if priceChangeRate is None:
openDays = 0
else:
openDays = len(priceChangeRate)
if openDays > 40:
tempPrice = priceChangeRate[39:(openDays - 1)]
for rate in range(len(tempPrice)):
tempPrice[rate] = "%.3f" %tempPrice[rate]
fileName = ''
fileName = fileName.join(df['market_cap'].columns[i].split('.')) + '.csv'
fileName
tempPrice.to_csv(fileName)
② 如何編程從免費股票軟體中提取實時數據
自己寫程序的話,一種方法是從已提供的信息源,例如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 = {'http': 'http://', 'ftp': 'ftp://'}
PAGE_DOMAIN = {'sina': 'sina.com.cn', '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'))
③ tushare的介面怎麼樣使用
一、安裝TuShare
方式1:pip install tushare
方式2:訪問https://pypi.python.org/pypi/tushare/下載安裝
方式3:將源代碼下載到本地python setup.py install
二、升級TuShare
1、先查看本地與線上的版本版本號:
pip search tushare
2、升級TuShare:
pip install tushare --upgrade
確認安裝成功
import tushare as ts
print ts.__version__
import tushare as ts
df = ts.get_hist_data(『600848』)
ts.get_hist_data(『600848』,ktype='W『) #獲取周k線數據
ts.get_hist_data('600848』,ktype='M『) #獲取月k線數據
ts.get_hist_data('600848』,ktype='5『) #獲取5分鍾k線數據
ts.get_hist_data('600848』,ktype='15『) #獲取15分鍾k線數據
ts.get_hist_data('600848』,ktype='30『) #獲取30分鍾k線數據
ts.get_hist_data('600848』,ktype='60『) #獲取60分鍾k線數據
ts.get_hist_data('sh』)#獲取上證指數k線數據,其它參數與個股一致,下同
ts.get_hist_data(『sz』)#獲取深圳成指k線數據 ts.get_hist_data(『hs300』)#獲取滬深300指數k線數據
ts.get_hist_data(『sz50』)#獲取上證50指數k線數據
ts.get_hist_data(『zxb』)#獲取中小板指數k線數據
ts.get_hist_data(『cyb』)#獲取創業板指數k線數據
Python財經數據介麵包TuShare的使用
獲取歷史分筆數據
df = ts.get_tick_data(『000756','2015-03-27』)
df.head(10)
Python財經數據介麵包TuShare的使用
獲取實時分筆數據
df = ts.get_realtime_quotes(『000581』)
print df[['code','name','price','bid','ask','volume','amount','time']]
返回值說明:
0:name,股票名字
1:open,今日開盤價
2:pre_close,昨日收盤價
3:price,當前價格
4:high,今日最高價
5:low,今日最低價
6:bid,競買價,即「買一」報價
7:ask,競賣價,即「賣一」報價
8:volumn,成交量 maybe you need do volumn/100
9:amount,成交金額(元 CNY)
10:b1_v,委買一(筆數 bid volume)
11:b1_p,委買一(價格 bid price)
12:b2_v,「買二」
13:b2_p,「買二」
14:b3_v,「買三」
15:b3_p,「買三」
16:b4_v,「買四」
17:b4_p,「買四」
18:b5_v,「買五」
19:b5_p,「買五」
20:a1_v,委賣一(筆數 ask volume)
21:a1_p,委賣一(價格 ask price)
…
30:date,日期
31:time,時間
④ 怎樣用python提取不同股票csv里特定時間段的數據
用pandas庫,
import pandas as pd
data = pd.read_csv('train.csv')
train_data = data.values[0:TRAIN_NUM,1:]
train_label = data.values[0:TRAIN_NUM,0]
study.163.com/course/courseMain.htm?courseId=1000035
機器學習正好講了這個手寫識別的例子!
⑤ 怎麼用python panda 算股票市場收益率
1.收集數據,開盤價,收盤價,交易量
2.用pandas處理數據,處理缺失值
3.用股票收益率的公式帶入
說白了,pandas只是個好用的工具,方法都是一樣的,只是效率問題
有多少人工,就有多少智能
⑥ 如何在yahoo-finance這個Python包中獲取上證的交易數據
yahoo-finance是美股的,國內有另外一個庫,叫tushare
使用前提
安裝Python
安裝pandas
lxml也是必須的,正常情況下安裝了Anaconda後無須單獨安裝,如果沒有可執行:pip install lxml
⑦ 怎樣用python提取不同股票csv里特定時間段的數據
用pandas庫,
import pandas as pd
data = pd.read_csv('train.csv')
train_data = data.values[0:TRAIN_NUM,1:]
train_label = data.values[0:TRAIN_NUM,0]
study.163.com/course/courseMain.htm?courseId=1000035
機器學習正好講了這個手寫識別的例子!
⑧ 如何編程從免費股票軟體中提取實時數據
自己寫程序的話,一種方法是從已提供的信息源,例如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 = {'http': 'http://', 'ftp': 'ftp://'}
PAGE_DOMAIN = {'sina': 'sina.com.cn', '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'))
⑨ PYthon遍歷語句求指導,如何通過python下載某時期所有股票日線信息然後存文件
你可以去官網看看怎麼去做,
⑩ 如何從tushare中調取十大股東數據
0. 簡介
TuShare是一個免費、開源的Python財經數據介麵包。主要實現對股票等金融數據從數據採集、清洗加工 到 數據存儲的過程,能夠為金融分析人員提供快速、整潔、和多樣的便於分析的數據,為他們在數據獲取方面極大地減輕工作量,使他們更加專注於策略和模型的研究與實現上。考慮到Python pandas包在金融量化分析中體現出的優勢,TuShare返回的絕大部分的數據格式都是pandas DataFrame類型。
1. 歷史行情
獲取個股歷史交易數據(包括均線數據),可以通過參數設置獲取日k線、周k線、月k線,以及5分鍾、15分鍾、30分鍾和60分鍾k線數據。本介面只能獲取近3年的日線數據,適合搭配均線數據進行選股和分析。
參數說明:
code:股票代碼,即6位數字代碼,或者指數代碼(sh=上證指數 sz=深圳成指 hs300=滬深300指數 sz50=上證50 zxb=中小板 cyb=創業板)
start:開始日期,格式YYYY-MM-DD
end:結束日期,格式YYYY-MM-DD
ktype:數據類型,D=日k線 W=周 M=月 5=5分鍾 15=15分鍾 30=30分鍾 60=60分鍾,默認為D
retry_count:當網路異常後重試次數,默認為3
pause:重試時停頓秒數,默認為0
返回值說明:
date:日期
open:開盤價
high:最高價
close:收盤價
low:最低價
volume:成交量
price_change:價格變動
p_change:漲跌幅
ma5:5日均價
ma10:10日均價
ma20:20日均價
v_ma5:5日均量
v_ma10:10日均量
v_ma20:20日均量
turnover:換手率[註:指數無此項]
(1) #獲取全部日k線數據(查看前11行)