python - 将刻度数据转换为 OHLCV 烛台数据

标签 python python-3.x pandas pandas-groupby candlestick-chart

我的主要程序从服务器收集报价数据并将这些数据存储在文本文件中。数据框中的示例数据如下所示:

SYMBOL_N    PRICE   DATE        TIME        VOLUME
35324399    92.31   02/11/18    12:45:26    108856
35324399    92.32   02/11/18    12:45:26    108865
35324399    92.32   02/11/18    12:46:27    108896
35324399    92.38   02/11/18    12:46:28    108932
35324399    92.45   02/11/18    12:47:28    108988
35324399    92.48   02/11/18    12:47:30    109132
35324399    92.52   02/11/18    12:47:52    109256
35324399    92.57   02/11/18    12:48:31    109288
...
...
35324400    76.62   02/11/18    12:45:22    104569
35324400    76.66   02/11/18    12:46:33    104582
35324400    76.68   02/11/18    12:47:06    104602
35324400    76.68   02/11/18    12:47:12    104645
35324400    76.71   02/11/18    12:47:28    104724
35324400    76.74   02/11/18    12:48:29    104944
35324400    76.77   02/11/18    12:48:36    105074
35324400    76.79   02/11/18    12:48:42    106988

数据框中有多个标记。 我想将这些数据转换为指定时间范围内的 OHLCV 烛台,例如(1 分钟、3 分钟、5 分钟)。同样,OHLCV 烛台中的成交量应该是上述时间范围内最大成交量(前一根蜡烛 - 当前蜡烛)的差值。

请帮忙。

最佳答案

这可以通过 resample 来完成.

我首先按照您要求的方式计算了交易量,但我认为您实际上需要当前蜡烛的最大值与前一根蜡烛的最大值之间的差值。这是代码:

timeframe = '1min'

tick_data['DATETIME'] = pd.to_datetime(tick_data['DATE'] + ' ' + tick_data['TIME'])
tick_data.set_index('DATETIME', inplace=True)

ohlcv_data = pd.DataFrame(columns=[
    'SYMBOL_N',
    'open',
    'high',
    'low',
    'close',
    'volume'])

for symbol in tick_data['SYMBOL_N'].unique():
    ohlcv_symbol =  tick_data.loc[tick_data['SYMBOL_N'] == symbol, 'PRICE'].resample(timeframe).ohlc()
    ohlcv_symbol['SYMBOL_N'] = symbol
    ohlcv_symbol['volume'] = (tick_data.loc[tick_data['SYMBOL_N'] == symbol, 'VOLUME'].resample(timeframe).max() - tick_data.loc[tick_data['SYMBOL_N'] == symbol, 'VOLUME'].resample(timeframe).max().shift(1))
    ohlcv_data = ohlcv_data.append(ohlcv_symbol, sort=False)

print(ohlcv_data)

这是结果:

                     SYMBOL_N   open   high    low  close  volume
2018-02-11 12:45:00  35324399  92.31  92.32  92.31  92.32     NaN
2018-02-11 12:46:00  35324399  92.32  92.38  92.32  92.38    67.0
2018-02-11 12:47:00  35324399  92.45  92.52  92.45  92.52   324.0
2018-02-11 12:48:00  35324399  92.57  92.57  92.57  92.57    32.0
2018-02-11 12:45:00  35324400  76.62  76.62  76.62  76.62     NaN
2018-02-11 12:46:00  35324400  76.66  76.66  76.66  76.66    13.0
2018-02-11 12:47:00  35324400  76.68  76.71  76.68  76.71   142.0
2018-02-11 12:48:00  35324400  76.74  76.79  76.74  76.79  2264.0

关于python - 将刻度数据转换为 OHLCV 烛台数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53201721/

相关文章:

python-3.x - 在 Beautiful Soup 中找不到 lxml

python - 使用 python => 使用 RESTful API 数据从 JSON 到 pandas DataFrame

python - 标记数据框的行

python - 检查系列中的值是否出现在 df 列中的任何位置,且始终计算为 True

python - SqlAlchemy + Celery 与 Scoped Session 错误

python - Celery 任务/ worker 分配逻辑

python - Pandas 模式匹配添加文本

python - 如何插入字段中带有字符[']的表(pymssql)

python - 检查并删除 DataFrame 的一系列行中的重复邻居值

python - 使用 pandas GroupBy 聚合时设置 MultiIndex