Python获取股票历史数据

      闲了的时候还是要学一点金融知识,先不说金融懂多少,但是通过金融的目的来编程其实也还行。总之美好的一天不要浑浑噩噩的度过。我觉得都是值得回忆的美好岁月。我们都知道股票市场有很多交易数据,有人亏损有人盈利。但是赚的人肯定是赚了很久了。赔的人也许会一直亏,但也可能厚积薄发。作为一只初来乍到的程序员,咋没有那种科班背景,所以很多时候唯一能派上用场的的好好学习。那么最基础的肯定需要知道基本知识吧,因为我本人是一只目的和好奇心驱动的猿,所以让我系统的学习某个专业会让我很难接受,主要是学过之后不一定能够形成系统的认知能力。可能效果总比我这样凭感觉的好的多的多。后期再看情况,先不扯这些话题。今天的目标就是记录一下我是如何获取股票数据的。没错我用的是开源的组件,没有写爬虫。因为股票数据是有专业的组织开放的api,里边比较好的是tushare和baostack。然后之前使用tushare还好,还是自从他们升级之后就需要积分了,然后发现自己的积分不够。所以我采用了baostack,但是baostack的问题是“数据不全”。其实也不是数据不全,而是获取全部股票信息的时候返回的数据总是隔三差五。让我对此产生了怀疑。纠结之下发现tushare能够获取全部股票列表,然后我把之前baostack中没有返回的股票代码作为参数调baostack其实也是能返回数据的。那么就是baostack的rs=bs.query_stock_basic()接口的问题?反正已经呵呵哒了,所以我最终采用的策略是使用tushare获取上证和深证的股票,然后调用baostack获取股票的历史交易数据并保存到文件中。

import sys
import tushare as ts
import pandas as pd


df_stock_list_all = ts.get_stock_basics()
df_stock_list_all.reset_index(level=0, inplace=True)
df_stock_list_all_sort_code = df_stock_list_all.sort_values('code')
#上证股票都是600开头的
df_stock_sh = df_stock_list_all_sort_code[df_stock_list_all_sort_code['code']>'600000']
#深证股票最后的股票代码是300838,002中小板,300是创业板,000是主板
df_stock_sz = df_stock_list_all_sort_code[df_stock_list_all_sort_code['code']<'300859']
sys.path.append("libs")
result=[]
for i in range(0, len(df_stock_sh)):
    data = []
    data.append("sh." + df_stock_sh.iloc[i]['code'])
    data.append(df_stock_sh.iloc[i]['name'])
    # 时间处理的原因是baostack需要是YYY-MM-dd的格式
    tian=str(df_stock_sh.iloc[i]['timeToMarket'])
    timeTemp=tian[:4] + "-" + tian[4:6] + "-" + tian[6:8]
    data.append(timeTemp)
    #为了兼容之前使用的baostack的数据,这里表示退市时间
    data.append("")
    #下边两个参数也是兼容之前老代码 
    data.append(1)
    data.append(1)
    result.append(data)
for j in range(0, len(df_stock_sz)):
    data = []
    data.append("sz." + df_stock_sz.iloc[j]['code'])
    data.append(df_stock_sz.iloc[j]['name'])
    tian= str(df_stock_sz.iloc[j]['timeToMarket'])
    timeTemp=tian[:4] + "-" + tian[4:6] + "-" + tian[6:8]
    data.append(timeTemp)
    data.append("")
    data.append(1)
    data.append(1)
    result.append(data)


result = pd.DataFrame(result)
result.rename(columns = {"0": "code","1":"name"})
#header=0表示FrameDate数据中不要表头
result.to_csv("../data/basic_tushare.csv",header=0)

很快就获取了数据,数据效果还不错。后期再向mysql存储。

获取到股票列表之后就是逐个去获取股票的每日交易信息了。这块我用的是baostack,主要还是之前使用的baostack做了一点探索,而且他们免费。所以顺势而为。

import baostock as bs
import pandas as pd
import csv
#读取刚才拉到的股票数据
baseStockFile="../data/basic_tushare.csv"
csvFile=open(baseStockFile,"r",encoding="UTF-8")
reader=csv.reader(csvFile)


def baoStackReq(code,start):
    lg=bs.login()
    print(lg)
    data=bs.query_history_k_data(code,"date,code,open,high,low,close,preclose,"
                                             "volume,amount,adjustflag,turn,tradestatus,pctChg,peTTM,"
                                      "pbMRQ,psTTM,pcfNcfTTM,isST",start_date=start)
    targetData=[]
    while (data.error_code=="0")&data.next():
        targetData.append(data.get_row_data())
    result=pd.DataFrame(targetData,columns=data.fields)
    #这里还是不要打印了因为数据量比较大,会比较耗时间
    print(result)
    #用code作为股票交易数据的存储文件名称
    code=code.replace(".","")
    result.to_csv("../data/"+code+".csv")


for item in reader:
    print(item)
    line=item[0]
    code=item[1]
    start=item[3]
    #排除未上市的股票
    if len(start)<10:
        continue
    baoStackReq(code,start)

通过上述代码,我们就可以拉取股票了。拉取的效果。

因为数据量比较大,所以拉取的过程比较长,大概需要1个小时多。

除此之外,考虑到我们每次获取的数据肯定不是全部获取,我们肯定是获取我们没有的交易数据,那么如何添加到这只股票的cvs文件之后呐。我们可以使用result.to_csv("../data/"+code+".csv",mode="a")这里的mode="a"表示以追加的方式写入文件。

后边有时间的话,会逐步写相关的文章。主要是实现数据的自动维护和k线预测。同时希望在此过程中提升自己的python编程能力。

  • 6
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您的问题是关于使用ARIMA模型对五粮液股票数据进行识别的。我可以告诉您,ARIMA模型是一种常用的时间序列分析方法,可以用于预测金融市场的趋势和波动。在使用ARIMA模型时,需要对时间序列进行平稳性检验、确定模型的阶数、拟合模型、诊断模型等步骤。 具体地,您可以按照以下步骤进行: 1. 对五粮液股票数据进行平稳性检验,包括ADF检验、KPSS检验等方法,确保数据可以使用ARIMA模型进行分析。 2. 确定ARIMA模型的阶数,即ARIMA(p,d,q)中的p、d、q值。其中,p表示自回归阶数,d表示差分阶数,q表示移动平均阶数。可以使用自相关函数(ACF)和偏自相关函数(PACF)绘制ACF和PACF图形,根据图形的截尾规则来确定p、q值,d值可以通过差分或ADF检验得到。 3. 拟合ARIMA模型,即使用确定的p、d、q值对数据进行模型拟合。可以使用Python中的statsmodels库来拟合模型。 4. 诊断ARIMA模型,即对拟合后的模型进行诊断,检查残差是否满足白噪声假设,是否存在自相关性或异方差性等问题。可以使用残差分析、Ljung-Box检验等方法进行诊断。 5. 使用ARIMA模型进行预测,即利用已拟合好的模型对未来的数据进行预测。可以使用Python中的forecast方法进行预测。 请注意,ARIMA模型并不是万能的,它对于某些特定的时间序列数据可能并不适用。在应用ARIMA模型时,需要根据具体的数据和情况进行判断和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值