def process_before_iteration(self): """ ============================================================= Effectuer des operations avant de parcourir les marchés - Verification si on est dans une Session de Trading - Récupérez les positions ouvertes sur les marchés - Recuperer les evenements economique ============================================================= """ # Recuperation de la configuration pour iteration self.used_stgy = Configuration.from_filepath().get_active_strategy() self.params = Configuration.from_filepath().get_param_strategy( self.used_stgy) # Initialiser le Broker à partir de la classe Factory # La Factory permet de créer le Broker à partir du fichier de configuration # self.broker = BrokerFactory(self.config).make() # Initialiser la Stratégie à partir de la classe Factory # La Factory permet de créer la Strategie à partir du fichier de configuration LOGGER.info("Initialisation de la Strategie : {}".format( self.used_stgy)) self.strategy = StgyFactory(self.used_stgy).make() # Reinitialisation des positions + events self.positions = None self.orders = None self.events = None
def __init__(self): """ Initialisation de l'objet """ # Enregistrement des variables utiles self._type = Configuration.from_filepath().get_type_account() self._accId = Configuration.from_filepath().get_credentials()[self._type.lower()]['account_id'] self._mdp = Configuration.from_filepath().get_credentials()[self._type.lower()]['password'] # Initialisation des variables necessaires self._broker = None self._mdl = None self._orders = None pass
def updateParam(): if request.method == 'POST': # Recuperation + traitement des données du formulaire data = Utils.parseForm(dict(request.form)) # Initialisation de la Config config = Configuration.from_filepath() # Modification de la config if 'time_zone' in data: config.set_time_zone(data['time_zone']) if 'hour_start' in data: config.set_hour_start(data['hour_start']) if 'hour_end' in data: config.set_hour_end(data['hour_end']) if 'filepathCredentials' in data: config.set_filepathCredentials(data['filepathCredentials']) if 'use_demo_account' in data: config.set_use_demo_account(True if data['use_demo_account'] == 'true' else False) if 'spin_interval' in data: config.set_spin_interval(data['spin_interval']) # Envoi du message return Render.jsonTemplate(_OPERATION, 'Enregistrement de la Configuration', categorie="SUCCESS") else: abort(400)
def __init__(self, account='DEMO'): """ Initialisation de l'objet """ # Enregistrement des variables utiles self._type = 'DEMO' if Configuration.from_filepath( ).get_use_demo_account() is True else 'REEL' self._accId = Configuration.from_filepath().get_credentials()[ self._type.lower()]['account_id'] self._mdp = Configuration.from_filepath().get_credentials()[ self._type.lower()]['password'] # Initialisation des variables necessaires self._broker = None self._mdl = None self._markets = None pass
def __init__(self, name="NOM"): """ Initialisation Objet """ # Recuperation de la Configuration self.config = Configuration.from_filepath() # Definition des Parametres self.name = name self.__prices = None
def __init__(self): """ ==================================================================== Initialisation Objet ==================================================================== """ # Constructeur du Model self._name = "DEV" super().__init__(name=self._name) # BBANDS self._BB_PERIOD = Configuration.from_filepath().get_param_strategy( self._name)["bb_period"] self._BB_DEVIATION = Configuration.from_filepath().get_param_strategy( self._name)["bb_deviation"] # RSI self._RSI_PERIOD = Configuration.from_filepath().get_param_strategy( self._name)["rsi_period"] self._RSI_LIMIT_OVER_BUY = Configuration.from_filepath( ).get_param_strategy(self._name)["rsi_limit_over_buy"] self._RSI_LIMIT_OVER_SELL = Configuration.from_filepath( ).get_param_strategy(self._name)["rsi_limit_over_sell"]
def is_in_session_trading(self): """ ============================================================= Verification que nous sommes dans la periode de Trading defini en Configuraton Renvoie Vrai si on y est, Faux dans le cas contraire ============================================================= """ # [DEBUG] - Activation pour dev du weekend # return True # Verification jour ouvrables if datetime.datetime.today().weekday() > 4: return False # Recuperation des parametres de Session de Trading hour_start = Configuration.from_filepath().get_hour_start() hour_end = Configuration.from_filepath().get_hour_end() # Initialisation du moment tz = pytz.timezone(Configuration.from_filepath().get_time_zone()) now_time = datetime.datetime.now(tz=tz) nowStr = str(now_time.strftime('%H:%M')) # Periode de trading defini en configuration if hour_end < hour_start: return nowStr >= hour_start or nowStr <= hour_end return hour_start <= nowStr <= hour_end
def getParam(): """Parse un fichier de log dans un DataFrame""" if request.method == 'POST': # Recuperation des infos data = Configuration.from_filepath().json() # Cryptage des id # df["id"] = df.apply(lambda x: Crypt.encode(cfg._APP_SECRET_KEY, x['id']), axis=1) # Retour du message return Render.jsonTemplate(_OPERATION, 'Parametres', categorie="SUCCESS", data=data) else: abort(400)
def getInfo(): """Retourne les informations necessaires au frontend""" info = {} # Utilisateur info["user"] = { 'is_logged_in': Session.getValue("is_logged_in"), 'displayName': Session.getValue("displayName"), 'role': Session.getValue("role"), 'username': Session.getValue("username") } # Application info["app"] = { 'version': cfg._APP_VERSION, 'name': cfg._APP_NAME, 'auteur': cfg._APP_AUTEUR, 'environ': cfg._ENVIRONNEMENT } # Javascript info["js"] = { 'timeout': str(cfg._JS_TIMEOUT_LOADER), 'csrfToken': Session.generateCsrfToken(), 'root': cfg._ENV[cfg._ENVIRONNEMENT]["JS_ROOT_DEV"], 'timeZone': Configuration.from_filepath().get_time_zone() } # System info["system"] = { 'main': SysInfo().getSystem(), 'python': SysInfo().getPython(), } # Compte info["compte"] = { # Courante 'WorkOnCompte': Configuration.from_filepath().get_type_account() } return info
def __init__(self, prices): """ ==================================================================== Initialisation Objet ==================================================================== """ # Recuperation de la Configuration self.config = Configuration.from_filepath() # Copie des données self.data = prices.copy(deep=True) # Variables du Graphiques self.tools = "xpan,xwheel_zoom,ywheel_zoom, box_zoom,reset,save" self._plots = [] # Parametrage Generaux self.format_date = '%a %d %b %Y\n%H:%M' self.INCREASING_COLOR = '#009900' self.DECREASING_COLOR = 'red' self.BUY_SIG_COLOR = '#33FF33' self.SELL_SIG_COLOR = '#FF3333' self.DATE_FMT = '%d %b %Y' self.DATETIME_FMT = '%a %d %b %Y, %H:%M:%S'
#!/usr/bin/env python # encoding: utf-8 from lib.configuration import Configuration from lib.strategie.factory import StgyFactory ###################################################################################################### # DEV ###################################################################################################### if __name__ == '__main__': # Recuperation de la Configuration config = Configuration.from_filepath() # Recuperation de la Configuration # print(config.get_active_strategy()) # print(config.get_param_strategy(name=config.get_active_strategy())) # print(config.get_values_strategy()) # Creation de la Strategie stgyObj = StgyFactory("DEV").make() print(stgyObj.name) # Recuperation des prix stgyObj.run(symbol='EURUSD', ut='H1') # Affichage des prix print(stgyObj.prices)
def wait_for(self): """ ============================================================= Attendez la durée spécifiée en fonctions des parametres de Sessions de Trading : - Si on DANS : spin_interval - Si on HORS : Determination du temps d'attente restant avant le debut de la prochaine Sessions ============================================================= """ # Recuperation en config des valeurs utiles spin_interval = Configuration.from_filepath().get_spin_interval( ).lower() # Determination du Nombre de Secondes pour le spin_interval seconds_per_unit = { "s": 1, "m": 60, "h": 3600, "d": 86400, "w": 604800 } spin_interval_secs = int( spin_interval[:-1]) * seconds_per_unit[spin_interval[-1]] if self.is_in_session_trading() is True: secs = spin_interval_secs else: from_time = datetime.datetime.now() # Determination de la date de prochaine ouverture today_opening = datetime.datetime.strptime( from_time.strftime('%Y-%m-%d') + " " + Configuration.from_filepath().get_hour_start(), '%Y-%m-%d %H:%M') # Si on a depassé Minuit if from_time < today_opening and from_time.weekday() < 5: nextMarketOpening = today_opening else: # Si on est lundi, on ajoute 1 jour if from_time.weekday() == 0: nextMarketOpening = today_opening + datetime.timedelta( days=1) # -- Si on est mardi, on ajoute 1 jour if from_time.weekday() == 1: nextMarketOpening = today_opening + datetime.timedelta( days=1) # -- Si on est mercredi, on ajoute 1 jour if from_time.weekday() == 2: nextMarketOpening = today_opening + datetime.timedelta( days=1) # -- Si on est jeudi, on ajoute 1 jour if from_time.weekday() == 3: nextMarketOpening = today_opening + datetime.timedelta( days=1) # -- Si on est vendredi, on ajoute 3 jours if from_time.weekday() == 4: nextMarketOpening = today_opening + datetime.timedelta( days=3) # -- Si on est samedi, on ajoute 2 jours if from_time.weekday() == 5: nextMarketOpening = today_opening + datetime.timedelta( days=2) # -- Si on est dimanche, on ajoute 1 jour if from_time.weekday() == 6: nextMarketOpening = today_opening + datetime.timedelta( days=1) # Affichage en LOG LOGGER.info("Prochaine Session de Trading : " + nextMarketOpening.strftime('%a %d %b %Y %H:%M:%S')) LOGGER.debug("Date à comparer : " + from_time.strftime('%a %d %b %Y %H:%M:%S')) # Calcul du nombre de secondes à attendre secs = (nextMarketOpening - from_time).total_seconds() # Formatage du Nombre de Secondes mins, seconds = divmod(secs, 60) hours, mins = divmod(mins, 60) days, hours = divmod(hours, 24) # Formatage de la chaine de caractere fmt_str = "" if days > 0: fmt_str += "{} jrs ".format(int(days)) if hours > 0: fmt_str += "{} hrs ".format(int(hours)) if mins > 0: fmt_str += "{} mins ".format(int(mins)) if seconds > 0: fmt_str += "{} secs ".format(int(seconds)) # Renvoi du nombre de Secondes LOGGER.info("Patientez {} ...".format(fmt_str.strip())) return secs