| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- 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)
-
|