#python #pandas #dataframe #datetime
Вопрос:
Я пытаюсь создать скрипт, который вычисляет среднее изменение за две недели для данной акции, когда она достигнет рекордного уровня. Я написал сценарий, и он работает, за исключением того факта, что я не хочу включать, если акции достигнут очередного максимума в течение двух недель, потому что тогда это будет отличаться от того, что я хочу видеть. Это мой сценарий:
import pandas as pd
import numpy as np
import yfinance as yf
from datetime import datetime, timedelta
from matplotlib import pyplot as plt
import datetime as dt
from datetime import datetime, timedelta
end = dt.datetime.today()
start = dt.date(end.year-2, end.month, end.day)
ticker= yf.Ticker('AAPL')
df = ticker.history(interval = "1d", start = start, end = end)
df['TimeDate'] = df.index
df['Chng'] = round((df['Close'] - df['Close'].shift(1))/df['Close'].shift(1),4)*100
df['2wChng'] = round((df['Close'].shift(-14) - df['Close'])/df['Close'],4)*100
df['2weekslater'] = df['TimeDate'].shift(-14)
df = df[['TimeDate','Close','Chng','2wChng','2weekslater']]
currenthigh = 0
df2 = pd.DataFrame()
for index,row in df.iterrows():
if row['Close'] > currenthigh:
currenthigh = row['Close']
df2 = df2.append({"TimeDate":row['TimeDate'],"2weekChng":row['2wChng'],"currenthigh":currenthigh,"2weekslater":row['2weekslater']},ignore_index=True)
twoweekchangeavg = df2['2weekChng'].mean()
print(twoweekchangeavg)
df2 = df2.sort_values(['TimeDate'])
df2
Однако это не включает исключение всех максимумов за все время в течение двухнедельного периода после того, как он достиг своего первого максимума за все время. Для этого я пытаюсь выполнить следующее, но получаю ошибку:
import pandas as pd
import numpy as np
import yfinance as yf
from datetime import datetime, timedelta
from matplotlib import pyplot as plt
import datetime as dt
from datetime import datetime, timedelta
end = dt.datetime.today()
start = dt.date(end.year-2, end.month, end.day)
ticker= yf.Ticker('AAPL')
df = ticker.history(interval = "1d", start = start, end = end)
df['TimeDate'] = df.index
df['Chng'] = round((df['Close'] - df['Close'].shift(1))/df['Close'].shift(1),4)*100
df['2wChng'] = round((df['Close'].shift(-14) - df['Close'])/df['Close'],4)*100
df['2weekslater'] = df['TimeDate'].shift(-14)
df = df[['TimeDate','Close','Chng','2wChng','2weekslater']]
currenthigh = 0
df2 = pd.DataFrame()
for index,row in df.iterrows():
if row['Close'] > currenthigh and row['TimeDate'] - timedelta(14) >= row['TimeDate'].shift(1):
currenthigh = row['Close']
df2 = df2.append({"TimeDate":row['TimeDate'],"2weekChng":row['2wChng'],"currenthigh":currenthigh,"2weekslater":row['2weekslater']},ignore_index=True)
twoweekchangeavg = df2['2weekChng'].mean()
print(twoweekchangeavg)
df2 = df2.sort_values(['TimeDate'])
df2
Тем не менее, я получаю ошибку «Метка времени», объект не имеет атрибута «сдвиг». Я не уверен, как это сделать. Какая-нибудь помощь?
Спасибо,