Bonjour , 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))
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.
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
Mais comment puis exécuté deux fois la même fonction sans que les variables se mélange ?
Les variables se mélangent pas
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.
Dacc, super merci c'est pas la première fois que tu m'aide donc je te remercie doublement
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.
Etudiant à 42 Lyon ! :)
Etudiant à 42 Lyon ! :)
Blond, bouclé, toujours le sourire aux lèvres...
Etudiant à 42 Lyon ! :)
Blond, bouclé, toujours le sourire aux lèvres...
Etudiant à 42 Lyon ! :)