首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何生成指标值,财务研究,量化交易,矢量化回溯

如何生成指标值,财务研究,量化交易,矢量化回溯
EN

Stack Overflow用户
提问于 2020-10-26 01:19:02
回答 2查看 324关注 0票数 1

我正在研究一种交易策略,在这种策略中,需要为每一个滴答计算一个bollinger带指示符。格式,日期投标价格-索价。

我的目标是为每个bollinger波段(低、中、高)填充一个列,为dataframe中的每一个滴答(行)填充一列,这样我就可以对我的策略进行进一步的测试。

根据我的研究,计算bollinger带的步骤如下:

标准window

  • Calculate带=平均+ STD,下带=平均- STD,中间带=平均

bollinger波段指示器使用20分钟回溯(20x1分钟蜡烛)窗口。

我的问题是:如何计算回溯期间的指示值。我是计算了报价的平均值,还是需要事先将报价数据重新整理成OHLC 1分钟蜡烛数据?

这是我到目前为止的代码,没有重采样。

代码语言:javascript
运行
复制
#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
EN

回答 2

Stack Overflow用户

发布于 2020-11-19 04:45:56

您可以使用现有的库。这里有一个:https://pypi.org/project/pandas-ta/

票数 0
EN

Stack Overflow用户

发布于 2020-12-17 10:45:00

你也可以利用熊猫的直接能力。例如,如果您只想计算bollinger波段,可以尝试如下:

代码语言:javascript
运行
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64530426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档