Python获取股票历史数据并分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Python获取股票历史数据并简单分析

最近股市又跌的厉害,又有人鼓吹股灾了。纵观最近2年的A股几乎每隔一段实际就一次大调整,然后每次的调整都亏一大把。心想有没有办法可以预测这种调整,经过几度分析,发现一个简单的规律,就是每次有大调整时,跌幅大于3%的股票就会出现很多。于是想是不是可以以跌幅大于3%的比例作为一种参考呢。于是就开始验证这种预警是否可靠。

要验证这种猜想需要大量的数据,基本需要每只股票的每天交易数据。下面就要想办法获取这些历史数据。数据包含:股票编码、交易日、开盘价、最高价、收盘价、最低价、价格涨幅、涨幅、5日、10日、20日均线

5日、10日、20日平均成交量

一共获取3198只股票最近三年的成交数据,一共190万条数据。

下面看看每日的上证指数、股票涨幅超过3%的比率(up3)、以及股票跌幅超过3%的比率三者之间的关系图如下:

再看看每日的上证指数涨幅、股票涨幅超过3%的比率(up3)、以及股票跌幅超过3%的比率三者之间的关系图如下:

如上有几个简单规律

1、当跌幅超过3%的股票占比超过10%时,意味股市的调整开始了。所以大家要小心

2、上证上涨时,涨幅超过3%的股票占比变化不明显,说明上涨起来慢,不让你发现。跌起来快不让你逃跑。

3、当跌幅超过3%的股票占比超过20%时,一定要先出来,意味着后面还有调整

获取股票历史数据以及分析源码如下:

#以下为股票数据获取的源码

import sqlite3

import pandas as pd

import datetime

import math

import tushare as ts

dbname='stocks'

if 'stocks' not in dir():

stocks=ts.get_stock_basics()

def getTag(x):

tag=math.floor(x)

if tag>=8 :

return 8

elif tag<=-8:

return -8

else:

return tag

def tableCheck():

curs= conn.cursor()

sql="SELECT name num FROM sqlite_master WHERE type='table' AND name='stocks'"

curs.execute(sql)

isexists=curs.fetchall()

if len(isexists)>0:

curs.close()

else:

sql="""CREATE TABLE stocks (

date TEXT,

open REAL,

high REAL,

close REAL,

low REAL,

volume REAL,

price_change REAL,

p_change REAL,

ma5 REAL,

ma10 REAL,

ma20 REAL,

v_ma5 REAL,

v_ma10 REAL,

v_ma20 REAL,

code TEXT,

tag REAL

)"""

curs.execute(sql)

curs.close()

def getLastDate():

curs= conn.cursor()

sql="SELECT code,date(ifnull(max(date),'2000-01-01'),'start of day','1 day') maxdate FROM stocks group by code"

curs.execute(sql)

dates=curs.fetchall()

if len(dates)>0:

return dict(dates)

else:

return {'1000':'2000-01-01'}

if __name__=='__main__':

yes_time = datetime.datetime.now() + datetime.timedelta(days=-1) enddate=yes_time.strftime("%Y-%m-%d")

conn = sqlite3.connect("E:/myprog/TestData.db") #

tableCheck()

mapdate=getLastDate()

i=1

total=len(stocks)

stlist=list(stocks.index)

stlist.append('sh')

stlist.append('sz')

for code in stlist:

print("正在获取第",i,"个,共:",total,"-----",code)

if code in mapdate.keys():

startdate=mapdate[code]

else:

startdate='2001-01-01'

i=i+1

if enddate>startdate:

d=ts.get_hist_data(code,startdate,enddate)

if len(d)>0:

d['code']=code

d['tag']=d['p_change'].apply(getTag)

d.to_sql(dbname,conn,flavor='sqlite',if_exists='append')

conn.close()

#data=pd.read_sql('select * from stocks',conn)

#以下为数据分析源码

import tushare as ts

import sqlite3

import pandas as pd

import datetime

if __name__=='__main__':

yes_time = datetime.datetime.now() + datetime.timedelta(days=-1) enddate=yes_time.strftime("%Y-%m-%d")

conn = sqlite3.connect("E:/myprog/TestData.db") #

#data=pd.read_sql('select * from stocks',conn)

st=data.groupby(['date','tag'])['code'].count()#.reset_index()

m=st.unstack().fillna(0)

p=m.copy()

for i in range(p.shape[1]):

相关文档
最新文档