股票周期行情的计算

在上一博客https://blog.csdn.net/reset2021/article/details/119570278中讲述了股票行情的爬取,这篇文章主要讲述对行情数据的更新以及对读取mongodb数据库中的数据并计算周期(这个周期可以依据具体需求自己定义)行情

首先,存储股票代码

由于需要经常用到股票代码的信息,所以将上一博文中的提取股票代码的处理做了一下封装。

    code_id_list = []
    for page in range(230):
        Url = 'http://62.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112407939967130801426_1628420280168&pn=' + str(page + 1) +'&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&fid=f3&fs=m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152&_=1628420280169'
        html = requests.get(Url)
        html = html.text
    
        stock = re.findall(re.compile('\((.*)\)'),html)
        stock = stock[0]
        stock = eval(stock)
        data_stock = stock['data']
        total_stock = data_stock['total']
        diff_stock = data_stock['diff']
    
        for signal_stock in diff_stock:
            code_id = signal_stock['f12']

            dict = {'股票代码': code_id}
            #print(dict)

            code_id_list.append(dict)

    return code_id_list

在上述代码实现中,将获取到的股票代码与”股票代码“字符一起构成dict,然后将所有的股票代码一起组成一个list,下面使用mongodb的多条目插入法实现一起插入。

由于这个数据表是独立的,所以需要新建”code_list“数据表。

client = pymongo.MongoClient('localhost',27017) #创建连接
db_stock = client['stock_info'] #创建名为 "stock_info" 的数据库
sheet_stock = db_stock['code_list'] #在"stock_info"数据库中建表"code_list"

插入函数,一句搞定。

sheet_stock.insert_many(code_id_list)

完成后的数据表展示如下:

 2、行情数据更新

行情是每个交易日更新,所以要及时更新行情数据。

2.1、首先要查询数据库中的最新行情数据的日期

行情数据表是这样存储的,于是只要获取第一条数据,并提取其中的”日期“数据即可

 具体实现如下所示

    last_stock_info = sheet_stock.find_one()

    lastday = last_stock_info['日期']

2.2、将行情数据表的最新日期与今天的日期分别传入下面的”start_time “ 与 ”end_time “

        if (code_id[0] == '6' or code_id[0] == '9'):
            url = 'http://quotes.money.163.com/service/chddata.html?code=0' + code_id + \
                  '&start=' + start_time + '&end=' + end_time + '&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP'
            print(url)
        else:
            url ='http://quotes.money.163.com/service/chddata.html?code=1' + code_id + \
                  '&start=' + start_time + '&end=' + end_time + '&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP'
            print(url)

任何将获取的数据依据上述方法存入数据表中即可。

3、获取某股票的所有行情数据

查询数据库中股票代码为tag_label 的所有数据,并且按日期排序,最终存入list中。便于后续处理

    myquery = { tag_name: tag_label }
    mydoc = sheet_stock.find(myquery).sort("日期", 1)

    stock_info_list = []
    for query_info in mydoc:
        stock_info_list.append(query_info)

4、计算周期行情数据

首先对行情数据进行分组,以周期为一个单位,不满一个周期的存入最后一个周期中,得到周期的行情list

然后对每个周期数据进行处理计算,针对每一项值的特征进行特别处理

    stock_cycle_info = group_info[-1]
    stock_cycle_info['日期'] = group_info[-1]['日期']
    stock_cycle_info['股票代码'] = group_info[-1]['股票代码']
    stock_cycle_info['名称'] = group_info[-1]['名称']
    stock_cycle_info['收盘价'] = group_info[-1]['收盘价']
    stock_cycle_info['总市值'] = group_info[-1]['总市值']
    stock_cycle_info['流通市值'] = group_info[-1]['流通市值']
    stock_cycle_info['开盘价'] = group_info[0]['收盘价']
    stock_cycle_info['前收盘'] = group_info[0]['前收盘']


    high_price = group_info[0]['最高价'] 
    low_price = group_info[0]['最低价']
    change_amount = 0.0
    change_percent = 0.0
    turnover_rate = 0.0
    turnover = 0.0
    trading_volume = 0.0
    for stock_info in group_info:
        if stock_info['最高价'] > high_price:
            high_price = stock_info['最高价']
        if stock_info['最低价'] < low_price:
            low_price = stock_info['最低价']
        
        

        if stock_info['涨跌额'] == 'None':
            change_amount += 0.0
        else:
            change_amount += float(stock_info['涨跌额'])

        if stock_info['涨跌幅'] == 'None':
            change_percent += 0.0
        else:
            change_percent += float(stock_info['涨跌幅'])

        if stock_info['换手率'] == 'None':
            turnover_rate += 0.0
        else:
            turnover_rate += float(stock_info['换手率'])


        turnover += float(stock_info['成交量'])
        trading_volume += float(stock_info['成交金额'])

    stock_cycle_info['最高价'] = high_price
    stock_cycle_info['最低价'] = low_price
    stock_cycle_info['涨跌额'] = change_amount
    stock_cycle_info['涨跌幅'] = change_percent
    stock_cycle_info['换手率'] = turnover_rate
    stock_cycle_info['成交量'] = turnover
    stock_cycle_info['成交金额'] = trading_volume
    del stock_cycle_info['_id']

    return stock_cycle_info

5、周期数据存入数据库

最后将计算得到的周期数据存入相应的数据表中

    cycle_table_name = 'stock_cycle' +"_" + str(cycle_number)
    sheet_stock = mongodb_init('stock_info',cycle_table_name)
    code_id_list = get_stock_list()
    for code_id  in code_id_list:
        cycle_info = get_cycle_info(cycle_number,code_id)

        
        for group_info in cycle_info:
            stock_cycle_info = calculate_cycle_info(group_info)
            print(stock_cycle_info)
            sheet_stock.insert_one(stock_cycle_info)

最后的显示结果如下(5周期行情数据)


本文主要是实现周期行情数据的计算,还存在优化的空间,比如,批量插入,以及更新时日期中时间问题(行情结束前后更新的数据是存在差异的),后续将随着功能的调整 也会对前期代码进行调整,但是流程基本上是不变的。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

reset2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值