【问题标题】:Python. Why I cannot get a candlestick?Python。为什么我拿不到烛台?
【发布时间】:2019-03-01 06:56:39
【问题描述】:

我在用 Python 编写代码时遇到了麻烦。任务是使用金融报价数据绘制烛台柱。首先,我创建了四个新列,从“买入”“卖出”到“开盘”、“高”、“低”、“收盘”(因为烛台需要这样的列)。 好的,现在我解决了一些问题,现在我遇到了新问题。下面的句子是我不明白的许多错误之一:

ValueError: Cannot convert -1 to a date. This often happens if non-datetime 
values are passed to an axis that expects datetime objects.

当我尝试打印特别是 Date_Time 时,我得到了这个:

Date_Time
2016-05-02 00:00:00   NaN
2016-05-02 00:10:00   NaN
2016-05-02 00:20:00   NaN
2016-05-02 00:30:00   NaN
2016-05-02 00:40:00   NaN
Freq: 10T, Name: Date_Time, dtype: float64

我不知道我是怎么来到 NaN 的。

这是我的代码:

import pandas as pd
import matplotlib.pyplot as plt
import datetime as dt
from mpl_finance import candlestick_ohlc
import matplotlib.dates as dates
data_pd = pd.read_csv('EURUSD-2016-05.csv', names=['Symbol', 'Date_Time', 'Bid', 'Ask'])
data_pd.head()
format = '%Y%m%d %H:%M:%S'
data_pd['Date_Time'] = pd.to_datetime(data_pd['Date_Time'], format = format)
data_pd = data_pd.set_index(data_pd['Date_Time'])
data_pd = data_pd.drop(columns=['Symbol'])

data_ask = data_pd['Ask'].resample('10Min').ohlc()

data_ask = data_ask.reindex(columns= ['Date_Time', 'open', 'high', 'low', 'close'])

ohlc = data_ask[['Date_Time','open','high','low','close']]
f1, ax = plt.subplots(figsize = (10,5))

ax.xaxis.set_major_formatter(dates.DateFormatter('%Y-%m-%d %H:%M:%S'))
candlestick_ohlc(ax, ohlc.values, width=.6, colorup='green', colordown='red')

plt.show()

我的数据如下:

EUR/USD,20160502 00:00:00.033,1.14607,1.14613
EUR/USD,20160502 00:00:00.149,1.14607,1.14613
EUR/USD,20160502 00:00:00.237,1.14607,1.1461
EUR/USD,20160502 00:00:00.332,1.14605,1.1461

这是您可以获取我的数据的链接:

https://pepperstone.com/uk/client-resources/historical-tick-data

如果能提供任何帮助,我将不胜感激。请善待,因为我是 Python 新手。

【问题讨论】:

  • 您尝试使用pd.read_csv('EURUSD-2016-05.csv', names=['Symbol', 'Bid', 'Ask'], index_col='Date_Time', parse_dates=True) 参考pandas.read_csv 了解更多详情。
  • data_pd = data_pd.reindex(columns= ['Data_Time', 'open', 'high', 'low', 'close']) - 这行写的是'Data_Time' 而不是'Date_Time'
  • 另外,您已经删除了Date_Time 列,然后再次引用它。
  • 好的,谢谢。但这无济于事:/
  • @GiedrėJuodzevičiūtė 您能否更新您遇到的错误?

标签: python pandas date format


【解决方案1】:

当您对data_pd['Ask'] 重新采样时,

data_ask = data_pd['Ask'].resample('10Min').ohlc()

你得到这些列:['open', 'high', 'low', 'close'] 并且(重新采样的)时间成为索引。

因此,当您重新索引时,

data_ask.reindex(columns=['Date_Time', 'open', 'high', 'low', 'close'])

由于Date_Time 列不存在,因此重新索引操作会返回一列缺失值。

可能有帮助的是:

data_ask.reset_index()

如果您需要,这会将索引重新转换为列。


编辑:根据上面的解释,这样计算ohlc 应该可以工作:

data_ask = data_pd['Ask'].resample('10Min').ohlc()
ohlc = data_ask.reset_index()

【讨论】:

  • @lanS 你能告诉我我的代码应该是什么样子吗?至少那几行重要的,因为恐怕我不能正确理解你的建议。例如,我不明白是否需要删除这一行: data_ask.reindex(columns=['Date_Time', 'open', 'high', 'low', 'close'] 或者我必须离开它并添加下面的代码data_ask.reset_index()?
  • 我会尝试解释这个问题:在我重新采样 data_pd['Ask'] 之后,我得到了 Date_Time 作为索引和 'Open'、'High'、'Low'、'关闭'是列。当我的代码到达 ohlc =..... 行时,我收到一个错误,指出我的 Date_Time 不在索引中!
  • 所以我所做的是重新索引所有内容,然后得到 NaN 值!
  • @GiedrėJuodzevičiūtė 你能再检查一下吗?
猜你喜欢
  • 1970-01-01
  • 2020-06-15
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
  • 1970-01-01
相关资源
最近更新 更多