我想将存储在熊猫数据框中的报价数据合并为开盘高低收盘格式,但与时间无关,但每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)
那么,有没有任何功能可以显示不带有日期的烛台图表,因为通过汇总刻度数据将没有时间关系吗?
答案 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)