| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- from Model.Donnee import *
- from Model.profil import profile
- class CL_Achat:
- @profile
- def __init__(self, Parametre):
- self.portefeuille = [0] * Parametre.NBAction
- self.cash = Parametre.PortefeuilleDemarage
- self.fee = 0
- self.ValueTotalVeille = Parametre.PortefeuilleDemarage
- self.nbAchat = 0
- self.nbVente = 0
- self.PerteMax = 0
- self.GainMaxJour = 0
- self.JourGagnant = 0
- self.JourPerdant = 0
- @profile
- def achat(self, valeurs,Parametre,date,Donnee): #TODO Optimisé pour voir si on achet plus ou moins il y a d'autres stratégie d'achat a voir
- indices_tries = sorted(range(len(valeurs)), key=lambda i: valeurs[i], reverse=True)
- for i,p in zip(indices_tries[:Parametre.NBachat],Parametre.poidsAchat):
- if self.cash*p > 1000:
- self.achatAction(i,self.cash*p , date, Donnee)
-
- def achatAction(self,action, montant, date, Donnee):
- prix_total = montant + self.fee
- nb = montant / Donnee.ValeurDate(Donnee.listeAction[action], date)
- self.nbAchat += 1
- self.cash -= prix_total
- self.portefeuille[action] += nb
- @profile
- def vendsTout(self, action, date, Donnee):
- if (self.portefeuille[action] > 0):
- self.nbVente += 1
- prix_total = self.portefeuille[action] * Donnee.ValeurDate(Donnee.listeAction[action], date) - self.fee
- self.portefeuille[action] = 0
- self.cash += prix_total
- @profile
- def getCash(self):
- return self.cash
- @profile
- def getValueTotal(self, Date, Donnee):
- r = self.cash
- for a in range(len(self.portefeuille)):
- if (self.portefeuille[a] > 0):
- r += Donnee.ValeurDate(Donnee.listeAction[a], Date) * self.portefeuille[a]
-
- return r
- @profile
- def MarquetGlobal(self, resultat, listeJours, Parametre, Donnee):
- resultat_np = resultat
-
- PerteCourante = 0
-
- for NJour, date in enumerate(listeJours):
- valeurs = resultat_np[NJour]
-
- # Conditions vectorisées
- mask_vente = valeurs < Parametre.ValVente #On vend tous ce qui est inférieur a 0
- indices_vente = np.where(mask_vente)[0]
- for i in indices_vente:
- self.vendsTout(i, date, Donnee)
-
- self.achat(valeurs,Parametre,date,Donnee)
- ValeurJour = self.getValueTotal(date, Donnee)
-
- if (ValeurJour > self.ValueTotalVeille):
- PerteCourante = 0
- self.JourGagnant += 1
- gain = self.ValueTotalVeille - ValeurJour
- if (self.GainMaxJour < gain):
- self.GainMaxJour = gain
- elif (ValeurJour < self.ValueTotalVeille):
- self.JourPerdant += 1
- PerteCourante -= self.ValueTotalVeille - ValeurJour
- if (self.PerteMax > PerteCourante):
- self.PerteMax = PerteCourante
- self.ValueTotalVeille = ValeurJour
-
|