import random from LectureDonne import get_closing_price_at_date nbCouche0 = (30*41) nbCouche1 = nbCouche2 = nbCouche3 = nbCouche4 = 40 weight1=[] weight2=[] weight3=[] weight4=[] couche1=[] couche2=[] couche3=[] couche4=[] PortefeuilleInit = 20000 liste_fichiers = [] """ qui genere un tableau de 30 nombre random (-1,1) appeler generatePoids """ def generatePoids(): poids = [random.uniform(-1, 1) for _ in range(30)] return poids """ un tableau de nb*30 nombre random de (0, nbinf) appel genereateCouche """ def generateCouche(nb, nbinf): couche = [random.uniform(0, nbinf) for _ in range(nb*30)] return couche """ fonction qui s'appel lireValeur(date) est qui pour chaque ligne d'un fichier vient lire avec la fonction get_closing_price_at_date(stock_symbole,date) avec stock_symbole dans la ligne du fichier de cette maniere(nom:stock_symbole) renvoie un tableau de toute les valeur lue """ """ def lireValeur(date): tableau_valeurs = [] with open("valeur.txt", "r") as fichier: for ligne in fichier: nom, stock_symbole = ligne.strip().split(":") valeur = get_closing_price_at_date(stock_symbole, date) tableau_valeurs.append(valeur) return tableau_valeurs """ """ fonction qui s'appel lirefichier qui pour une date donne vient lire dans tout les fichier de la liste fichier, les 30 valeurs précedent la date: les fichier sont ecrit date : valeurs et qui pondere les valeurs de -1 a 1 en fonction de la premiere valeurs et renvoie aussi un tableau avec les valeurs de la date de tout les fichier """ def lirefichier(date): valeurs_ponderees = [] valeurs_date = [] for fichier in liste_fichiers: with open(fichier, 'r') as file: lignes = file.readlines() for ligne in lignes: if ligne.startswith(date): index_date = lignes.index(ligne) valeurs_precedentes = [float(val) for val in lignes[index_date-30:index_date]] if valeurs_precedentes: premiere_valeur = valeurs_precedentes[0] valeurs_ponderees.append([(val - premiere_valeur) / premiere_valeur for val in valeurs_precedentes]) valeurs_date.append(float(ligne.split(":")[1])) break return valeurs_ponderees, valeurs_date def processingCouche(nbcouche,coucheinf,poids,couche): res = [] for i in nbcouche : r = 0 for y in range(0,30): r+ = coucheinf[couche[i*30+y]]*poids[y] res.append(r) def processing(val): R1=processingCouche(nbCouche1,val,weight1,couche1) R2=processingCouche(nbCouche2,R1,weight2,couche2) R3=processingCouche(nbCouche3,R2,weight3,couche3) return processingCouche(nbCouche4,R3,weight4,couche4) """ fonction Evaluation en parametre un nombre (res), un nombre (valeur), un nombre (action), un nombre (portefeuille) si res >0.90 & portefeuille > 2003.9 => retourn action += 2000/valeur et Portefeuille -2003.9 si res <0.90 et > 0.75 & portefeuille > 1003.9 => retourn action += 1000/valeur et Portefeuille -1003.9 si res >0.5 et < 0.75 & portefeuille > 503.9 => retourn action += 500/valeur et Portefeuille -503.9 Inferieur a -0.5 retourn portefeuille += action*valeur -3.9 et action = 0 """ def evaluation(res, valeur, action, portefeuille): if res > 0.90 and portefeuille > 2003.9: action += 2000 / valeur portefeuille -= 2003.9 elif res < 0.90 and res > 0.75 and portefeuille > 1003.9: action += 1000 / valeur portefeuille -= 1003.9 elif res > 0.5 and res < 0.75 and portefeuille > 503.9: action += 500 / valeur portefeuille -= 503.9 elif res < -0.5: portefeuille += action * valeur - 3.9 action = 0 return action, portefeuille def verification(valeurs_date, Action, portefeuille): for i in range(len(Action)): portefeuille += Action[i] * valeurs_date[i] pourc = portefeuille/PortefeuilleInit print("Total : ",portefeuille) println(" soit" ,pourc) return pourc """ Fonction enregistre qui enregistre dans un fichier dont le nom est composé de la varible nbtour - la variable pourcent: les tableau (nouvelle ligne a chaque tableau) weight1,weight2,weight3,weight4,couche1,couche2,couche3,couche4 """ def enregistre(nbtour, pourcent): nom_fichier = str(nbtour) + "-" + str(pourcent) + ".txt" with open(nom_fichier, 'w') as fichier: fichier.write("weight1: " + str(weight1) + "\n") fichier.write("weight2: " + str(weight2) + "\n") fichier.write("weight3: " + str(weight3) + "\n") fichier.write("weight4: " + str(weight4) + "\n") fichier.write("couche1: " + str(couche1) + "\n") fichier.write("couche2: " + str(couche2) + "\n") fichier.write("couche3: " + str(couche3) + "\n") fichier.write("couche4: " + str(couche4) + "\n") nbtour=0 while(1): Portfeuille = PortefeuilleInit pourc = 0 Action = [0] * 40 weight1 = generatePoids() weight2 = generatePoids() weight3 = generatePoids() weight4 = generatePoids() if 1 : print("================Weight==============================="+ "\n") print(weight1) print(weight2) print(weight3) print(weight4) print("================================================"+ "\n") couche1 = generateCouche(nbCouche1,nbCouche0) couche2 = generateCouche(nbCouche2,nbCouche1) couche3 = generateCouche(nbCouche3,nbCouche2) couche4 = generateCouche(nbCouche4,nbCouche3) if 1: print("================Couche==============================="+ "\n") print(couche1) print(couche2) print(couche3) print(couche4) print("================================================"+ "\n") print("tour: ",nbtour) nbtour+=1 with open("date.txt", "r") as file: #le date.txt est modifier pour commencer 30 jours apres dates = file.readlines() for date in dates: if 1: print("================date==============================="+ "\n") print(date) print("================================================"+ "\n") date = date.strip() valeurs_ponderees, valeurs_date = lirefichier(date) print("================valeurs_ponderees==============================="+ "\n") print(valeurs_ponderees) print("================================================"+ "\n") print("================valeurs_date==============================="+ "\n") print(valeurs_date) print("================================================"+ "\n") res = processing(valeurs_ponderees) for i in range(0,40) Action[i],Portefeuille=Evaluation(res[i], valeurs_date[i], Action[i], Portfeuille) pourc = verification(valeurs_date,Action,portfeuille) if pourc < 0.99: break if pourc > 1: enregistre(nbtour,pourc)