#python #matplotlib #plot #finance #stock
#питон #matplotlib #сюжет #финансы #склад
Вопрос:
Я получаю эту ошибку, пытаясь построить диаграмму. Я пытаюсь построить диаграмму, используя предоставленные значения. Я использую yahoo finance и хочу построить линию сопротивления с помощью python.
for index in range(len(pivots)): print(str(pivots[index]) ": " str(dates[index])) plt.plot_date([dates[index],dates[index] timeD, pivots[index],pivots[index]], linestyle="-", linewidth=2, marker="none")
это весь код
import pandas import yfinance as yf import datetime as dt import pandas as pd from pandas_datareader import data as pdr import matplotlib.pyplot as plt yf.pdr_override() start= dt.datetime(2019,1,1) now= dt.datetime.now() stock = input("Enter the stock symbol: ") while stock !="quit": df=pdr.get_data_yahoo(stock, start, now) df["Low"].plot(Label="low") pivots=[] dates=[] counter=0 lastPivot=0 Range=[0,0,0,0,0,0,0,0,0,0] dateRange=[0,0,0,0,0,0,0,0,0,0] for i in df.index: currentMin=min(Range, default=0) value=round(df["Low"][i],2) Range=Range[1:9] Range.append(value) dateRange=dateRange[1:9] dateRange.append(i) if currentMin==min(Range, default=0): counter-=1 else: counter=0 if counter==-5: lastPivot=currentMin dateloc=Range.index(lastPivot) lastDate=dateRange[dateloc] pivots.append(lastPivot) dates.append(lastDate) print() # print(str(pivots)) # print(str(dates)) timeD=dt.timedelta(days=30) for index in range(len(pivots)): print(str(pivots[index]) ": " str(dates[index])) plt.plot_date([dates[index],dates[index] timeD, pivots[index],pivots[index]], linestyle="-", linewidth=2, marker="none") plt.show() stock= input ("Enter the stock symbol : ")
Ошибка, которую я получаю, заключается в следующем
Обратная связь (последний последний вызов): Файл «Low.py», строка 57, в
plt.plot_date([dates[index],dates[index] timeD, TypeError: unsupported operand type(s) for : 'int' and 'datetime.timedelta'
Спасибо
Ответ №1:
Проблема в том, что это выражение в plt.plot_date
:
dates[index] timeD
Если вы напечатаете даты, вы получите этот вывод:
[0, Timestamp('2019-02-08 00:00:00'), Timestamp('2019-03-08 00:00:00'), ... ... ... Timestamp('2021-09-20 00:00:00'), Timestamp('2021-10-04 00:00:00')]
Как вы можете видеть, список содержит значения Int и метки времени. Поэтому, когда вы добавляете timeD
ведьму в timedelta, эта операция является незаконной.
Я не понимаю, как вы строите dates
, но вам нужно изучить логику в этом разделе и проверить, почему вы получаете значения Int и метки времени.