簡體   English   中英

mpl_finance 無法將 -100000 轉換為日期

[英]mpl_finance cannot convert -100000 to a date

我正在嘗試使用 mpl_finance 制作一個簡單的燭台 ohlc 圖表。 在他們的網站上,它說燭台_ohlc 方法的引號參數中的第一個元素是日期。 它說它們必須以浮動日期格式進行格式化。 但是,當我使用 date2num 時,它給我一個錯誤,提示“無法將 -100000 轉換為日期。如果將非日期時間值傳遞給需要日期時間對象的軸,通常會發生這種情況。” 當我使用沒有 date2num 方法的原始列表時,它給了我一個錯誤,指向一行代碼 - xy=(t-OFFFSET,lower) 和一條消息 -“不支持的操作數類型 -:'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, ...)(datetime, open, high, ...)元組列表或相應的 numpy 數組。
在這里,您提供了[[datetime1, datetime2, ...], [open1, open2, ...], ...]

要轉換為所需的格式,您可以例如使用

ohlc = list(zip(formatteddates, dailyopen, dailyhigh, dailylow, dailyclose))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM