
[英]When i split a list in a for loop to make it readable, it loses all but the last line when i try to use it outside of the loop
[英]I'd like to make it loop again only when all the datas in list fully looped
我在做股票数据计算器。 我的意图是一次把所有的数据都放在每年的列表中并进行计算。 但是,我的代码每年都会对每个数据进行计算。 我怎样才能为我的原始意图修复它? 我的语言是 python,版本是 3.8.10 64bit。
这是我的代码:
.....Python modules
enter 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 ]
wb = openpyxl.Workbook()
sheet = wb.active
b2 = sheet['B2']
b2.value = 'Name'
#wb['b2'] = 'Name'
c2 = sheet['C2']
c2.value = 'Results'
file_list = os.listdir('/home/sejahui/projects/stock_data_excel')
for i in range(0, 781):
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(0,3):
target_year = list_3[r]
data = td.query('Date.dt.year == @target_year').copy()
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)
Adjusted = calMACD(data)
Adjusted.drop(['Change'], axis=1, inplace = True)
Filtered = Adjusted[Adjusted.Buy_sign!='Sell'].copy()
#print(Filtered)
#Filtered = (Adjusted.Buy_sign =='Buy') #(Adjusted.Condition = 1.0)
#Master = Adjusted.loc[Adjusted,['Date','Buy_sign','Target_1','Real_world',]]
#print(Adjusted)
def backtester(Filtered):
Filtered['Change'] = ((Filtered['Close'] - Filtered['Close'].shift(1)) / Filtered['Close'].shift(1))+1
#data['Target_1']=np.where(data['Buy_sign']=='Buy', (data['Change'])+1,1)
Filtered['Real_world'] = 1000000*Filtered['Change']
#Filtered['Condition'] = np.where(Filtered['Real_world']<1000000, Filtered['Real_world'].shift(-2)-Filtered['Real_world'],1)
Filtered['Condition'] = np.where(Filtered['Real_world']<1000000, Filtered['Change'].shift(-2),1)
#Filtered['Target_1'] = np.where(Filtered['Buy_sign']=='Buy', (Filtered['Change'])+1,1)
#Filtered['Condition'] = np.where(Filtered['Real_world']<1000000, Filtered['Real_world'].shift(-2)-Filtered['Real_world'],1)
return Filtered
s = backtester(Filtered)
e = s[s.Condition!=1.00000]
x = e.dropna()
y = x['Condition']
list_2.append(odd)
try:
geometric_mean(y)*1000000*12
except StatisticsError as e:
a = ('Sell is empty')
list_1.append(a)
else:
d = (geometric_mean(y)*1000000*12)
print(d,odd)
list_1.append(d)
#write_ws.append(list_1)
#write_wb.save('/home/sejahui/results.xlsx')
print(list_1)
for i in range(0,790):
sheet['C'+str(3+i)] = list_1[i]
sheet['B'+str(3+i)] = list_2[i]
wb.save('/home/sejahui/result(2)/results.'+str(target_year)+'.xlsx')
#re = pd.read_excel('/home/sejahui/results(2)/results.xlsx')
#print(re)
2 提示:你的 def 函数不应该在 for 循环中,每次都声明它是没有意义的。 像这样做:
def calMACD(data, short=5, long=25, signal=9):
...
...
def backtester(Filtered):
...
...
for r in range(0,3):
...
...
看起来你没有缩进你的第一个 for 循环的内容。 尝试这个:
for i in range(0, 781):
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' )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.