将历史实时股票数据获取到多次调用并按周范围获取

2024-06-16 19:17:08 发布

您现在位置:Python中文网/ 问答频道 /正文

由于我的代理的一些限制,要获取日内历史数据,单个rest调用中允许的最大日期范围是7天,任何违反此范围的请求都会返回一个错误。因此,我需要打破不同调用之间的时间间隔,以获取超出此允许日期范围的数据。到目前为止,我已经手动拆分它以获取数据并将其附加到一个数据帧中

def get_historical_data(scrip):
    data1 = historicData(scrip, "01/07/2019", "07/07/2019")
    data2 = historicData(scrip, "08/07/2019", "14/07/2019")
    data3 = historicData(scrip, "15/07/2019", "21/07/2019")
    data4 = historicData(scrip, "22/07/2019", "28/07/2019")
    data5 = historicData(scrip, "28/07/2019", "31/07/2019")
    data6 = historicData(scrip, "01/08/2019", "07/08/2019")
    data7 = historicData(scrip, "08/08/2019", "14/08/2019")
    data8 = historicData(scrip, "15/08/2019", "21/08/2019")
    data9 = historicData(scrip, "22/08/2019", "28/08/2019")
    data10 = historicData(scrip, "29/08/2019", "04/09/2019")
    data11 = historicData(scrip, "05/09/2019", "11/09/2019")
    data12 = historicData(scrip, "12/09/2019", "17/09/2019")
    data13 = historicData(scrip, "18/09/2019", "18/09/2019")

    data1 = data1.append(data2)
    data1 = data1.append(data3)
    data1 = data1.append(data4)
    data1 = data1.append(data5)
    data1 = data1.append(data6)
    data1 = data1.append(data7)
    data1 = data1.append(data9)
    data1 = data1.append(data10)
    data1 = data1.append(data11)
    data1 = data1.append(data12)
    data1 = data1.append(data13)

    data1 = data1.reset_index(drop=True)

    return data1

一个很好的方法是将日期范围拆分为一周的间隔,而不必手动执行,并在追加后返回完整的数据。如下所示:

def get_historical_data(scrip, start_date, end_date):

    #Some logic to split the start_date and end_date for one-week interval and fetch the data. 
    #After fetching the data, append into one df. 

    #return appended_data

Tags: the数据datagetdate间隔def手动
2条回答

您可以开始创建一个带有第一个日期的datetime,然后循环向其中添加timedelta(days=7),直到到达end_date

使用datetime,可以使用datetime.timedelta()进行偏移。以下函数应适用于您的目的

import datetime as dt
import pandas as pd

def get_historical_data(scrip, start_date, end_date):

    date = dt.datetime.strptime(start_date, '%Y-%m-%d')
    end = dt.datetime.strptime(end_date, '%Y-%m-%d')

    data = pd.DataFrame()

    while date < end:
        s = date
        e = date + dt.timedelta(days=7)
        if e > end:
            e = end
        date = e +  dt.timedelta(days=1)

        d = historicData(scrip, s, e)
        data.append(d)

    data.reset_index(drop=True)
    return data

相关问题 更多 >