Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème multithreading

Sujet résolu
    15 août 2017 à 14:33:09

    Bonjour :p , je suis entrain de crée un bot traiding :) mais a l'heure actuelle il ne peut effectuer qu'un seul trade a la fois :/ mais j'aimerais qu'il puisse en faire a x a la fois  exemple : thread 1 : check si prix en baisse ect; pendant ce temps, thread 2 prend le relais et regarde si prix en baisse ect.

    J'ai essayer d'utilisais le module _thread mais je 'y arrive pas dutout x)

    Code ci-contre, une classe main depuis laquelle il faudrait instancier la fonction trade() de "Algorithme.py" :

    Main :

    import Historique
    import Compte
    import Algorithme
    import Cour
    import time
    import _thread
    
    while True :
        
        Historique.Update()
        time.sleep(2)
        Algorithme.Trade()
        time.sleep(2)
        Compte.Update()
        time.sleep(56)

    Algorithme :

    import Cour
    import Compte
    import time
    
    print("Algorithme : ")
            
    def Trade() :
        global tradeEnCour
        global valeurBuy
        global montant
        global moyenne
        
        read = open("Historique.txt", 'r')
        read = read.readlines()
        historique = read[0]
        historique = historique.split(',')
        del historique[-1]
        
        tot = 0
        for i in historique :
            tot = float(tot) + float(i)
        moyenne = tot / len(historique)
        
        if tradeEnCour :
            print("dois-je vendre")
            
            '''
            ZONE D'ALGO DE VENTE  ==========================================================
            '''
            
            if moyenne > valeurBuy :
                #Dans le cas ou l'achat s'est fait en dessous de la moyenne :
                if Cour.coursActuel() >= ((0.35*float(valeurBuy)) + (0.65 * float(moyenne))):
                    sellOrder(valeurBuy ,Cour.coursActuel(), montant)
            else :
                #Dans le cas ou l'achat s'est fait au dessus de la moyenne :
                if Cour.coursActuel() >= float(valeurBuy) + 0.50 :
                    sellOrder(valeurBuy, Cour.coursActuel(), montant)                 
                    
                    
            '''
            ================================================================================
            '''
                    
        else:
            print("dois-je acheter : " + str(historique[0]) + " > " + str(historique[1]) )
            if float(historique[0]) > float(historique[1]) :
                print("historique[0] > historique[1]")
                if historique[1] < historique[2] :
                    print("historique[1] < historique[2]")
                    if historique[2] < historique[3] :
                        print("historique[2] < historique[3]")
                        if historique[3] < historique[4] :
                            print("historique[3] < historique[4]")
                            write = open("Log.log", 'a')
                            write = write.write(time.strftime('%H:%M:%S %d/%m/%y',time.localtime()) + "Stop (a H-2)" + "\n")
                            if float(historique[0]) - float(historique[1]) <= 0.33*(float(historique[4]) - float(historique[1])) :
                                if (float(historique[4]) - float(historique[1])) > 0.50 :
                                    print("ok")
                                    createOrder(Cour.coursActuel(), montant)
                                    write = open("Log.log", 'a')
                                    write = write.write(time.strftime('%H:%M:%S %d/%m/%y',time.localtime()) + " Achete : " + str(montant) + " a : " + str(Cour.coursActuel()) + "\n")                          
                        
    
    def createOrder(priceO, mo) :
        print("Algorithme - CreateOrder()")
        print("J'achete")
        global valeurBuy
        global tradeEnCour
        tradeEnCour = True
        valeurBuy = priceO
        Compte.subAmount(mo)
        
    def sellOrder(priceO, priceF, m) :
        print("Algorithme - SellOrder()")
        print("Before sell : " + str(Compte.getAmount()))
        Compte.setAmount((m / priceO) * priceF)
        print("After sell : " + str(Compte.getAmount()))
        write = open("Log.log", 'a')
        write = write.write(time.strftime('%H:%M:%S %d/%m/%y',time.localtime()) + " Vendu : " + str(((m / priceO) * priceF))  + " a : " + str(Cour.coursActuel()) + "\n")
    
    # Init
    tradeEnCour = False
    montant = 50
    valeurBuy = 0
    moyenne = 0

    Voila tout (le code est sans le eu de truc que j'ai fais pck ya rien qui marchai x))

    Merci beaucoup d'avance :) :) :):ange:

    -
    Edité par sevguil29 15 août 2017 à 14:51:31

    • Partager sur Facebook
    • Partager sur Twitter

    Etudiant à 42 Lyon ! :)

      16 août 2017 à 21:59:48

      UP :p svp :p :ange:
      • Partager sur Facebook
      • Partager sur Twitter

      Etudiant à 42 Lyon ! :)

        17 août 2017 à 2:30:09

        Tu n'as pas forcément besoin de threads pour faire ça.

        Si tu veux vraiment les utiliser, prend plutôt le module threading, et suis un petit cours sur l'utilisation du module avant d'attaquer direct sur un "vrai" programme.

        Mais bon ça me semble pas utile, dans ta boucle principale, ton programme passe son temps à dormir, donc pas besoin de threads pour qu'il travaille plus, il suffit de le faire dormir moins.

        • Partager sur Facebook
        • Partager sur Twitter

        Blond, bouclé, toujours le sourire aux lèvres...

          17 août 2017 à 21:14:43

          Bonsoir, merci pour votre réponse :p

          Mais comment puis exécuté deux fois la même fonction sans que les variables se mélange ?

          Exemple je lance une première fois le Trade() et la variable du cours a l'ouverture = 215 admettons,

          Si je relance Trade() elle va clear les variables et mettre les nouvelles non ? du coup bah ce que je voulais faire c'était de le dupliquer via le multi threading.. sinon je sais pas comment faire xD

          • Partager sur Facebook
          • Partager sur Twitter

          Etudiant à 42 Lyon ! :)

            18 août 2017 à 4:31:06

            sevguil29 a écrit:

            Mais comment puis exécuté deux fois la même fonction sans que les variables se mélange ?

            Les variables se mélangent pas :lol:

            sevguil29 a écrit:

            Exemple je lance une première fois le Trade() et la variable du cours a l'ouverture = 215 admettons,

            Si je relance Trade() elle va clear les variables et mettre les nouvelles non ?

            Faut adapter le code. Tu auras plusieurs historiques si tu suis plusieurs valeurs, donc faudra calculer une moyenne par valeur, et calculer le signal d'achat/vente sur chaque valeur.

            Actuellement ton code est mal foutu,mais si tu vires les globales et que tu ajoutes juste un paramètre à tes fonctions, ce sera assez facile.

            • Partager sur Facebook
            • Partager sur Twitter

            Blond, bouclé, toujours le sourire aux lèvres...

              19 août 2017 à 23:34:02

              Dacc, super merci c'est pas la première fois que tu m'aide donc je te remercie doublement :p

              • Partager sur Facebook
              • Partager sur Twitter

              Etudiant à 42 Lyon ! :)

              Problème multithreading

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown