繁体   English   中英

我想让它仅在列表中的所有数据完全循环时再次循环

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM