I wanted to print out datas until list_3 is ended. But, no matter how I tried, I only got last result of list_3. Here's my code:
import FinanceDataReader as fdr
import numpy as np
from numpy import NaN
import pandas as pd
import openpyxl
....
pd.options.display.float_format = '{:.5f}'.format
file_list = os.listdir('/home/sejahui/projects/stock_data_excel')
list_1 = []
list_2 = []
list_3 =[ 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 ]
for i in range(10):
os.chdir('/home/sejahui/projects/stock_data_excel')
odd = file_list[i]
td = pd.read_excel('/home/sejahui/projects/stock_data_excel/' str(odd))
td['Date'] = pd.to_datetime(td['Date'], format = '%Y-%m-%d' )
for r in range(12):
target_year = list_3[r]
data = td.query('Date.dt.year == @target_year')
'''
td['Year'] = td['Date'].dt.year
data = td.groupby(['Year'])
'''
def calMACD(data, short=5, long=25, signal=9):
data.sort_index()
data['MVA_25']=data['Close'].ewm(span=long, adjust=False).mean()
data['MVA_5']=data['Close'].ewm(span=short, adjust=False).mean()
data['MACD']=data['Close'].ewm(span=short, adjust=False).mean() - data['Close'].ewm(span=long, adjust=False).mean()
data['Signal']=data['MACD'].ewm(span=signal, adjust=False).mean( )
#data['Buy_sign']=(data['MACD']-data['Signal']) >=600
data['Buy_sign']=np.where(data['MACD']-data['Signal'] >=451, 'Buy' , 'Sell' )
#data['Target_1']=(data['Close']-data['Close'].shift(1))/data['Close'].shift(1)*100
#data['Target_1']=np.where(data['Buy_sign']=='Buy', (data['Change']) 1,1)
#data['Target_2']=np.where(data['Buy_sign']=='Sell', (data['Change']) 1,1)
#data['Real_world']= 1000000*data['Target_1']
#data['Real_world_2']= 1000000*data['Target_2']
#data['Condition'] = np.where(data['Real_world']<1000000, data['Real_world']-data['Real_world'].shift(-2),1)
##data['Condition_2'] = np.where(data['Real_world']<1000000, data['Target_1'].shift(-2),1)
#data['Moneyflow'] =
#plt.plot(data['Date'], data['Real_world'])
#data[data.Buy_sign !='Sell']
return data
print(calMACD(data), odd)
I tried to get results with for loop in for loop, but, second for loop only gives the last result of for loop. What changes should I make to get all the results of second for loop?
※note: the second for loop indentation might looks uncorrect, but, it works perfectly fine without any error.
CodePudding user response:
Problem is with not having td.query('Date.dt.year == @target_year') in for loop scope, move the query part in for loop scope to get all the target_year processed.
for r in range(12):
target_year = list_3[r]
data = td.query('Date.dt.year == @target_year')
Also, you can optimized it to
for target_year in list_3:
data = td.query('Date.dt.year == @target_year')
