我正在根据库存数据设置数量概要文件系列。我已经实现了this github repo中的市场概况代码以及到data is here和example here的链接。一些数据示例在这里:
Timestamp Close High Low Open Volume
2017-09-27 06:30:00 927.74 927.74 927.74 927.74 14929
2017-09-27 07:00:00 933.0 935.53 928.47 928.745 136776
2017-09-27 07:30:00 932.365 934.0 930.065 932.98 73146
2017-09-27 08:00:00 932.39 933.14 930.3 932.45 56624
2017-09-27 08:30:00 934.8675 935.62 931.1495 932.15 74960
2017-09-27 09:00:00 934.325 935.96 933.6 935.2308 62358
2017-09-27 09:30:00 935.48 935.7 933.56 934.36 45043
2017-09-27 10:00:00 935.5 935.56 933.71 935.385 32434
2017-09-27 10:30:00 935.96 936.86 935.21 935.5 58203
作者在此处通过将函数应用于索引的行切片来获取输出,并通过应用以下代码来应用主要函数:
mp = MarketProfile(df, tick_size=1)
mp_slice = mp[df.index.max() - pd.Timedelta(13, 'H'):df.index.max()]
此函数从整个数据帧中获取索引的一部分,并将其功能应用于该部分,然后作者通过以下代码获得最终结果:
mp_slice.as_dict()
我想要做的是建立索引rolling(w)
并将该函数应用到索引大熊猫中的整个数据框中,并从开始日期开始在数据框中创建新列。即df['poc_price']
,df['value_area'], df[initail_balane']
等。 (所有这些都包含在as_dict()函数输出中)。
我尝试了许多代码,但是尽管没有任何东西能得到我想要的最终输出。我最少的代码是:
def make_marketprofile(df, window=50, mode='vol', tick_size=1):
for i in range (0, df.shape[0] - window - 1):
try:
mpt = MarketProfile(df[i:i+window], mode=mode, tick_size=0.5)
mpt_slice = mpt[df[i:i+window].index.min() :
df[i:i+window].index.max()].as_dict()
except KeyError:
print('error: {}'.format(df_1['Date'][i+window]))
# for key, value in mpt_slice():
df.iloc[i+window] = mpt_slice #value
try:
df.drop(['Date'], axis = 1, inplace = True)
except AttributeError:
pass
for column in df:
df[column][1:] = pd.to_numeric(df[column][1:])
df = df.iloc[window:]
df.fillna(method = 'ffill', inplace = True)
return df
但是它抛出值错误:
ValueError: Must have equal len keys and value when setting with an iterable
所以我的问题基本上有两个部分:
1- To make a rolling and resample function to apply the market profile function over the dataframe
2- the function makes the outputs in a python dictionary and i want to make new columns as per the dictionary objects.