【问题标题】:aggregate tick data to open high low close non time related聚合分时数据以开高低收非时间相关
【发布时间】:2018-09-11 22:35:28
【问题描述】:

我想将存储在 pandas 数据框中的分时数据合并为开高低收盘格式,但与时间无关,而是每 100 个分时汇总一次。之后,我想使用 matlibplot 在烛台图表中显示它们。

我已经使用具有两个值的 pandas 数据集解决了与时间相关的聚合问题:TIMESTAMP 和 PRICE。 TIMESTAMP 已经具有 pandas 日期格式,所以我使用它:

df["TIMESTAMP"]= pd.to_datetime(df["TIMESTAMP"])
df = df.set_index(['TIMESTAMP'])
data_ohlc =  df['PRICE'].resample('15Min').ohlc()

是否有任何函数可以重新采样 ohlc 格式的数据集,而不是使用时间范围,而是使用滴答计数?

之后是可视化,所以为了绘图,我必须将日期格式更改为 mdates。 candlestick_ohlc 函数需要 mdate 格式:

data_ohlc["TIMESTAMP"] = data_ohlc["TIMESTAMP"].apply(mdates.date2num)
from mpl_finance import candlestick_ohlc
candlestick_ohlc(ax1,data_ohlc.values,width=0.005, colorup='g', colordown='r',alpha=0.75)

那么是否有任何功能可以显示没有 mdates 的烛台图表,因为通过聚合分时数据将没有时间关系?

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    由于这个问题似乎没有内置函数,我自己写了一个。给定的数据框需要在“PRICE”列中具有实际值:

    def get_pd_ohlc(mydf, interval):
    
        ## use a copy, so that the new column doesn't effect the original dataset
        mydf = mydf.copy()
    
        ## Add a new column to name tick interval
        interval = [(1+int(x/interval)) for x in range(mydf["PRICE"].count())]
        mydf["interval"] = interval
    
        ##Step 1: Group 
        grouped = mydf.groupby('interval')
    
        ##Step 2: Calculate different aggregations 
        myopen = grouped['PRICE'].first()
        myhigh = grouped['PRICE'].max()
        mylow = grouped['PRICE'].min()
        myclose = grouped['PRICE'].last()
    
        ##Step 3: Generate Dataframe:
        pd_ohlc = pd.DataFrame({'OPEN':myopen,'HIGH':myhigh,'LOW':mylow,'CLOSE':myclose})
    
        return(pd_ohlc)
    
    pd_100 = get_pd_ohlc(df,100)
    print (pd_100.head())
    

    我还找到了显示 ist 的解决方案。模块 mpl_finance 有一个功能 candstick2_ohlc,它不需要任何日期时间信息。这是代码:

    #Making plot
    import matplotlib.pyplot as plt
    from mpl_finance import candlestick2_ohlc
    
    fig = plt.figure()
    plt.rcParams['figure.figsize'] = (16,8)
    ax1 = plt.subplot2grid((6,1), (0,0), rowspan=12, colspan=1)
    
    #Making candlestick plot
    candlestick2_ohlc(ax1, pd_ohlc['OPEN'], pd_ohlc['HIGH'],
                      pd_ohlc['LOW'], pd_ohlc['CLOSE'], width=0.5,
                      colorup='#008000', colordown='#FF0000', alpha=1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2015-02-08
      • 2021-12-20
      • 1970-01-01
      • 2013-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多