我正在研究一种交易策略,在这种策略中,需要为每一个滴答计算一个bollinger带指示符。格式,日期投标价格-索价。
我的目标是为每个bollinger波段(低、中、高)填充一个列,为dataframe中的每一个滴答(行)填充一列,这样我就可以对我的策略进行进一步的测试。
根据我的研究,计算bollinger带的步骤如下:
标准window
。
bollinger波段指示器使用20分钟回溯(20x1分钟蜡烛)窗口。
我的问题是:如何计算回溯期间的指示值。我是计算了报价的平均值,还是需要事先将报价数据重新整理成OHLC 1分钟蜡烛数据?
这是我到目前为止的代码,没有重采样。
#Parse ticks
df_t = pd.read_csv(r'EURUSD-2020_10_12-2020_10_12 tick.csv',parse_dates=True)
df_t.rename(columns={'time':'date'}, inplace=True)
df_t['date'] = pd.to_datetime(df_t['date'], format='%Y-%m-%d %H:%M:%S.%f')
df_t.sort_values(by=['date'], inplace=True)
#Create new columns for band values
df_t.insert(0, "upper_band", 0.0, True)
df_t.insert(0, "mid_band", 0.0, True)
df_t.insert(0, "lower_band", 0.0, True)
#Start iteration from the length of the indicator (start offset)
df_t = df_t [ (df_t['date'] >= df_t.iloc[0]['date'] + pd.Timedelta(20, unit='m')) ]
#Parse ticks
for i, row in df_t.iterrows():
#Filter date range
end_date = df_t.iloc[i]['date']
start_date = end_date + pd.Timedelta(-20, unit='m')
print('Start date = ' + str(start_date))
print('End date = ' + str(end_date))
mask = (df_t['date'] > start_date) & (df_t['date'] <= end_date)
ticks_in_lookback_period = df_t[ mask ]['bid']
mean = ticks_in_lookback_period.mean()
std = ticks_in_lookback_period.std()
df_t['upper_band'][i] = mean + std
df_t['mid_band'][i] = mean
df_t['lower_band'][i] = mean - std
发布于 2020-11-19 04:45:56
您可以使用现有的库。这里有一个:https://pypi.org/project/pandas-ta/
发布于 2020-12-17 10:45:00
你也可以利用熊猫的直接能力。例如,如果您只想计算bollinger波段,可以尝试如下:
df["mid_band"] = df.bid.rolling(20).mean()
df["upper"],df["lower"] = df.mid_band+df.mid_band.rolling(20).std(),df.mid_band-df.mid_band.rolling(20).std()
如果你用的是100万支蜡烛,那么我建议你把蜡烛重装到1分钟,或者下载1分钟的蜡烛。如果使用其他聚合类型,则创建OHLC蜡烛并运行上面的代码。
您可能需要尝试和探索的其他东西是现有的库,比如TA或@Jonathan提到的库。
顺便说一下,要在您的end_date
循环中获得iterrows
参数,为什么不使用row.date
https://stackoverflow.com/questions/64530426
复制相似问题