请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

2-12 【第二章章节作业】:创建你的股票数据库


主要代码:

#!/usr/bin/env python
# encoding: utf-8

import data.stock as st
import time

# 初始化变量
# code='000001.XSHG'
start_date='2021-07-01'
oneday_time=24*60*60

# 本章小结:实时更新数据
# 将所有股票列表转换成数组,测试取5条
stock_list=st.get_stock_list()[:5]

def timer():
    # 获取当前日期
    now_date=time.strftime('%Y-%m-%d')
    # 获取当前时间戳
    now_strptime=int(time.time())
    # 计算今天收盘时间戳
    close_strptime = int(time.mktime(time.strptime(now_date+' 16:00:00', "%Y-%m-%d %H:%M:%S")))

    # 计算昨天时间戳
    yesterday_strptime = int(time.mktime(time.strptime(now_date, "%Y-%m-%d")))-oneday_time
    # 昨天时间戳转换为日期
    yesterday_date=time.strftime('%Y-%m-%d',time.localtime(yesterday_strptime))

    # 计算明天时间戳
    tomorrow_strptime = int(time.mktime(time.strptime(now_date, "%Y-%m-%d")))+oneday_time
    # 明天时间戳转换为日期
    tomorrow_date=time.strftime('%Y-%m-%d',time.localtime(tomorrow_strptime))

    # 获取现在到明天凌晨的秒数
    sleep_time=tomorrow_strptime-now_strptime
    # 获取现在到收盘的秒数
    close_time=close_strptime-now_strptime
    # 判断当前时间是否收盘
    # 当前时间:未收盘=>结束日期为昨天
    # 当前时间:已收盘=>结束日期为今天
    end_date=now_date
    if close_time>0:
        sleep_time=close_time
        # end_date=yesterday_strptime 这里是错的,应该和 now_date 格式保持一致为日期,而不是时间戳
        end_date=yesterday_date
    for code in stock_list:
        try:
            data=st.get_csv_data(code=code,type='price')
            # 获取最后一天的明天日期、并转换为时间戳
            last_tomorrow_date=time.mktime(time.strptime(data.date[data.date.size - 1],'%Y-%m-%d'))+oneday_time
            # 时间戳转换为日期
            tomorrow_date=time.strftime('%Y-%m-%d',time.localtime(last_tomorrow_date))
            data = st.get_single_price(
                code=code,
                time_freq='daily',
                start_date=tomorrow_date,
                end_date=end_date
            )
            st.export_data(
                data=data,
                filename=code,
                type='price',
                mode='a'
            )
        except Exception as err:
            print('当前股票不存在或追加失败,重新存储 csv!',err)
            # start_date='2021-06-29'
            # end_date='2021-06-30'
            data = st.get_single_price(
                code=code,
                time_freq='daily',
                start_date=start_date,
                end_date=end_date
            )
            st.export_data(
                data=data,
                filename=code,
                type='price'
            )
        # time.sleep(2)
    return sleep_time;

# 定时器
while True:
    sleep_time=timer()
    print('更新完毕!',sleep_time)
    time.sleep(sleep_time)

其它

def export_data(data,filename,type,mode='w'):
    """
    导出股票相关数据
    :param data: 
    :param filename: 
    :param type: 股票数据类型,可以是->price、finance
    :param mode: 默认w->只能写入,a->追加
    :return: 
    """
    file_root=data_root+type+'/'+filename+'.csv'
    data.index.names=['date']
    header=True
    if mode=='a':
        header=False
    data.to_csv(file_root,mode=mode,header=header)
    print('已经成功存储至:',file_root)

图片描述

正在回答

3回答

棒棒哒,祝学习愉快!

0 回复 有任何疑惑可以回复我~
  • 提问者 慕勒6259863 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2021-07-12 06:23:33
慕容3139001 2023-01-03 22:19:50

try那个模块写道:start_date=tomorrow_date,end_date=end_date

然而,tomorrow_date肯定大于end_date,所以应该是start_date=end_date,end_date=tomorrow_date

不是吗?

0 回复 有任何疑惑可以回复我~
大副大 2021-11-05 15:08:33

# 获取最后一天的明天日期、并转换为时间戳            last_tomorrow_date=time.mktime(time.strptime(data.date[data.date.size - 1],'%Y-%m-%d'))+oneday_time            

请问这是什么意思呢?

0 回复 有任何疑惑可以回复我~
  • 提问者 慕勒6259863 #1
    日期区间如:2021.6.1 00:00:00 - 2021.6.6 23.59.59,这样获取太累了,所以我就获取:2021.6.1 00:00:00 - 2021.6.7 00:00:00
    回复 有任何疑惑可以回复我~ 2021-11-08 05:09:26
  • 大副大 回复 提问者 慕勒6259863 #2
    谢谢回复,已经搞清楚了。
    我试了一下
    end_date=now_date
        if close_time>0:
            sleep_time=close_time
            end_date=yesterday_strptime
    
    第二个end_date=yesterday_date才对,否则获取不到数据
    回复 有任何疑惑可以回复我~ 2021-11-08 10:22:10
  • 提问者 慕勒6259863 回复 大副大 #3
    谢谢提醒,才发现这里应该是昨天日期,而不应该是昨天时间戳;应该和 now_date 格式一致为日期
    回复 有任何疑惑可以回复我~ 2021-11-08 21:50:59
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信