示例#1
0
    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
示例#2
0
 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
示例#3
0
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
示例#5
0
 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
示例#6
0
 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"]
示例#7
0
 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
示例#8
0
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)
示例#9
0
    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
示例#10
0
    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'
示例#11
0
#!/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)
示例#12
0
    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