汇总滴答数据以打开高价低价关闭与时间无关的

时间:2018-09-11 05:00:05

标签: python python-3.x pandas

我想将存储在熊猫数据框中的报价数据合并为开盘高低收盘格式,但与时间无关,但每100个报价进行汇总。之后,我想使用matlibplot在烛台图中显示它们。

我已经使用一个具有两个值的TIMESTAMP和PRICE熊猫数据集解决了与时间相关的聚合问题。 TIMESTAMP已经具有大熊猫日期格式,因此我可以使用:

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

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

之后是可视化,因此对于绘图,我必须将日期格式更改为mdates。 Candlestick_ohlc函数要求使用日期格式:

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)

那么,有没有任何功能可以显示不带有日期的烛台图表,因为通过汇总刻度数据将没有时间关系吗?

1 个答案:

答案 0 :(得分:0)

由于这个问题似乎没有内置功能,所以我自己写了一个。给定的数据框需要在“ 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具有功能Candlestick2_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)