Bourse.py 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. import random
  2. from LectureDonne import get_closing_price_at_date
  3. nbCouche0 = (30*41)
  4. nbCouche1 =
  5. nbCouche2 =
  6. nbCouche3 =
  7. nbCouche4 = 40
  8. weight1=[]
  9. weight2=[]
  10. weight3=[]
  11. weight4=[]
  12. couche1=[]
  13. couche2=[]
  14. couche3=[]
  15. couche4=[]
  16. PortefeuilleInit = 20000
  17. liste_fichiers = []
  18. """
  19. qui genere un tableau de 30 nombre random (-1,1) appeler generatePoids
  20. """
  21. def generatePoids():
  22. poids = [random.uniform(-1, 1) for _ in range(30)]
  23. return poids
  24. """
  25. un tableau de nb*30 nombre random de (0, nbinf) appel genereateCouche
  26. """
  27. def generateCouche(nb, nbinf):
  28. couche = [random.uniform(0, nbinf) for _ in range(nb*30)]
  29. return couche
  30. """
  31. 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)
  32. renvoie un tableau de toute les valeur lue
  33. """
  34. """
  35. def lireValeur(date):
  36. tableau_valeurs = []
  37. with open("valeur.txt", "r") as fichier:
  38. for ligne in fichier:
  39. nom, stock_symbole = ligne.strip().split(":")
  40. valeur = get_closing_price_at_date(stock_symbole, date)
  41. tableau_valeurs.append(valeur)
  42. return tableau_valeurs
  43. """
  44. """
  45. 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
  46. et qui pondere les valeurs de -1 a 1 en fonction de la premiere valeurs
  47. et renvoie aussi un tableau avec les valeurs de la date de tout les fichier
  48. """
  49. def lirefichier(date):
  50. valeurs_ponderees = []
  51. valeurs_date = []
  52. for fichier in liste_fichiers:
  53. with open(fichier, 'r') as file:
  54. lignes = file.readlines()
  55. for ligne in lignes:
  56. if ligne.startswith(date):
  57. index_date = lignes.index(ligne)
  58. valeurs_precedentes = [float(val) for val in lignes[index_date-30:index_date]]
  59. if valeurs_precedentes:
  60. premiere_valeur = valeurs_precedentes[0]
  61. valeurs_ponderees.append([(val - premiere_valeur) / premiere_valeur for val in valeurs_precedentes])
  62. valeurs_date.append(float(ligne.split(":")[1]))
  63. break
  64. return valeurs_ponderees, valeurs_date
  65. def processingCouche(nbcouche,coucheinf,poids,couche):
  66. res = []
  67. for i in nbcouche :
  68. r = 0
  69. for y in range(0,30):
  70. r+ = coucheinf[couche[i*30+y]]*poids[y]
  71. res.append(r)
  72. def processing(val):
  73. R1=processingCouche(nbCouche1,val,weight1,couche1)
  74. R2=processingCouche(nbCouche2,R1,weight2,couche2)
  75. R3=processingCouche(nbCouche3,R2,weight3,couche3)
  76. return processingCouche(nbCouche4,R3,weight4,couche4)
  77. """
  78. fonction Evaluation en parametre un nombre (res), un nombre (valeur), un nombre (action), un nombre (portefeuille)
  79. si res >0.90 & portefeuille > 2003.9 => retourn action += 2000/valeur et Portefeuille -2003.9
  80. si res <0.90 et > 0.75 & portefeuille > 1003.9 => retourn action += 1000/valeur et Portefeuille -1003.9
  81. si res >0.5 et < 0.75 & portefeuille > 503.9 => retourn action += 500/valeur et Portefeuille -503.9
  82. Inferieur a -0.5 retourn portefeuille += action*valeur -3.9 et action = 0
  83. """
  84. def evaluation(res, valeur, action, portefeuille):
  85. if res > 0.90 and portefeuille > 2003.9:
  86. action += 2000 / valeur
  87. portefeuille -= 2003.9
  88. elif res < 0.90 and res > 0.75 and portefeuille > 1003.9:
  89. action += 1000 / valeur
  90. portefeuille -= 1003.9
  91. elif res > 0.5 and res < 0.75 and portefeuille > 503.9:
  92. action += 500 / valeur
  93. portefeuille -= 503.9
  94. elif res < -0.5:
  95. portefeuille += action * valeur - 3.9
  96. action = 0
  97. return action, portefeuille
  98. def verification(valeurs_date, Action, portefeuille):
  99. for i in range(len(Action)):
  100. portefeuille += Action[i] * valeurs_date[i]
  101. pourc = portefeuille/PortefeuilleInit
  102. print("Total : ",portefeuille)
  103. println(" soit" ,pourc)
  104. return pourc
  105. """
  106. Fonction enregistre qui enregistre dans un fichier dont le nom est composé de la varible nbtour - la variable pourcent:
  107. les tableau (nouvelle ligne a chaque tableau) weight1,weight2,weight3,weight4,couche1,couche2,couche3,couche4
  108. """
  109. def enregistre(nbtour, pourcent):
  110. nom_fichier = str(nbtour) + "-" + str(pourcent) + ".txt"
  111. with open(nom_fichier, 'w') as fichier:
  112. fichier.write("weight1: " + str(weight1) + "\n")
  113. fichier.write("weight2: " + str(weight2) + "\n")
  114. fichier.write("weight3: " + str(weight3) + "\n")
  115. fichier.write("weight4: " + str(weight4) + "\n")
  116. fichier.write("couche1: " + str(couche1) + "\n")
  117. fichier.write("couche2: " + str(couche2) + "\n")
  118. fichier.write("couche3: " + str(couche3) + "\n")
  119. fichier.write("couche4: " + str(couche4) + "\n")
  120. nbtour=0
  121. while(1):
  122. Portfeuille = PortefeuilleInit
  123. pourc = 0
  124. Action = [0] * 40
  125. weight1 = generatePoids()
  126. weight2 = generatePoids()
  127. weight3 = generatePoids()
  128. weight4 = generatePoids()
  129. if 1 :
  130. print("================Weight==============================="+ "\n")
  131. print(weight1)
  132. print(weight2)
  133. print(weight3)
  134. print(weight4)
  135. print("================================================"+ "\n")
  136. couche1 = generateCouche(nbCouche1,nbCouche0)
  137. couche2 = generateCouche(nbCouche2,nbCouche1)
  138. couche3 = generateCouche(nbCouche3,nbCouche2)
  139. couche4 = generateCouche(nbCouche4,nbCouche3)
  140. if 1:
  141. print("================Couche==============================="+ "\n")
  142. print(couche1)
  143. print(couche2)
  144. print(couche3)
  145. print(couche4)
  146. print("================================================"+ "\n")
  147. print("tour: ",nbtour)
  148. nbtour+=1
  149. with open("date.txt", "r") as file: #le date.txt est modifier pour commencer 30 jours apres
  150. dates = file.readlines()
  151. for date in dates:
  152. if 1:
  153. print("================date==============================="+ "\n")
  154. print(date)
  155. print("================================================"+ "\n")
  156. date = date.strip()
  157. valeurs_ponderees, valeurs_date = lirefichier(date)
  158. print("================valeurs_ponderees==============================="+ "\n")
  159. print(valeurs_ponderees)
  160. print("================================================"+ "\n")
  161. print("================valeurs_date==============================="+ "\n")
  162. print(valeurs_date)
  163. print("================================================"+ "\n")
  164. res = processing(valeurs_ponderees)
  165. for i in range(0,40)
  166. Action[i],Portefeuille=Evaluation(res[i], valeurs_date[i], Action[i], Portfeuille)
  167. pourc = verification(valeurs_date,Action,portfeuille)
  168. if pourc < 0.99:
  169. break
  170. if pourc > 1:
  171. enregistre(nbtour,pourc)