python - mpl_finance 无法将 -100000 转换为日期
问题描述
我正在尝试使用 mpl_finance 制作一个简单的烛台 ohlc 图表。在他们的网站上,它说烛台_ohlc 方法的引号参数中的第一个元素是日期。它说它们必须以浮点日期格式格式化。但是,当我使用 date2num 时,它给了我一个错误,上面写着“无法将 -100000 转换为日期。如果将非日期时间值传递给需要日期时间对象的轴,通常会发生这种情况。” 当我使用没有 date2num 方法的原始列表时,它给了我一个错误,指向一行代码 - xy=(t-OFFFSET, lower) 和一条消息 -"unsupported operand type(s) for -:'datetime. date' 和 'float'。似乎它想让我使用浮点数而不是 datetime.date 但这与先前的错误相矛盾。这是我的代码。任何帮助将不胜感激。
import requests
import json
import pprint
import matplotlib.pyplot as plt
from mpl_finance import candlestick_ohlc
import matplotlib.dates as mdates
from datetime import datetime, date, time
url = "https://www.alphavantage.co/query"
function = "TIME_SERIES_DAILY"
symbol = "MSFT"
api_key = "K2H0JNUZBWYKW02L"
data = { "function": function,
"symbol": symbol,
"apikey": api_key }
page = requests.get(url, params = data)
thedata = page.json()
days = []
dailyopen = []
dailyclose = []
dailyhigh = []
dailylow = []
dailyvol = []
delimitedyear = []
delimitedday = []
delimitedmonth = []
thedatakeys = list(thedata['Time Series (Daily)'].keys())
thedatakeys.sort()
for day in thedatakeys:
days.append(day)
dailyopen.append(float(thedata['Time Series (Daily)'][day]
['1. open']))
dailyhigh.append(float(thedata['Time Series (Daily)'][day]
['2. high']))
dailylow.append(float(thedata['Time Series (Daily)'][day]
['3. low']))
dailyclose.append(float(thedata['Time Series (Daily)']
[day]['4. close']))
dailyvol.append(float(thedata['Time Series (Daily)'][day]
['5. volume']))
counter = 0
for day in days:
delimitedyear.append(days[counter][0:4])
delimitedmonth.append(days[counter][5:7])
delimitedday.append(days[counter][8:10])
counter = counter + 1
d = []
for newcounter in range(len(delimitedyear)):
d.append(date(int(delimitedyear[newcounter]),
int(delimitedmonth[newcounter]),
int(delimitedday[newcounter])))
formatteddates = mdates.date2num(d)
ohlc = [formatteddates, dailyopen, dailyhigh, dailylow,
dailyclose]
print(formatteddates)
fl, ax = plt.subplots(figsize = (10,5))
candlestick_ohlc(ax, ohlc, width=.6, colorup='green',
colordown='red')
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))
ax.grid(False)
plt.show()
解决方案
输入的格式candlestick_ohlc
需要是(datetime, open, high, ...)
元组列表或相应的 numpy 数组。
在这里,您提供了一个列表[[datetime1, datetime2, ...], [open1, open2, ...], ...]
。
要转换为所需的格式,您可以例如使用
ohlc = list(zip(formatteddates, dailyopen, dailyhigh, dailylow, dailyclose))
推荐阅读
- php - 如何使用 .env.production 运行 php artisan serve?
- python - 如何在 Heroku 中使用 tesseract 和 ocr?
- java - 已清除配置文件更新上的 Keycloak 用户属性 - 如何保留并且只能由管理员编辑
- python - 我正在使用的 API 返回一个数据框 - 如何使用列表返回多个 DF,然后合并它们?
- html - 背景图片在某些移动设备上不显示
- python - 从 .txt 文件创建熊猫数据框,每行数据
- amazon-emr - 以编程方式生成“实例”定义以在 StepFunctions 中创建 EMR 集群
- maven - 如何让`mvn package`知道它已经构建了目标
- java - Crystal Report 错误 - 使用 Java 与 Oracle 连接
- linux - 如何使用 scapy 生成长度递增的数据包