Skip to content

Commit

Permalink
Update algo-tf5m.py
Browse files Browse the repository at this point in the history
  • Loading branch information
titouannwtt authored May 4, 2022
1 parent 4881643 commit 6312f6c
Showing 1 changed file with 164 additions and 118 deletions.
282 changes: 164 additions & 118 deletions 12-2021/algo-tf5m.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,6 @@
# VALEUR PAR DEFAUT
##########################

cfg = configparser.ConfigParser()
cfg.read('mois.cfg')
fichierEnregistrement="backtest.csv"

argumentList = sys.argv[1:]
try:
substring = ".csv"
Expand All @@ -24,7 +20,42 @@
print("Enregistrement des données dans : ", fichierEnregistrement)
print("Si des données étaient déjà présente dans le fichier, elles ont été supprimées\n")
classement = pd.DataFrame([])
classement.to_csv(fichierEnregistrement)
try :
classement = pd.read_csv(fichierEnregistrement)
except :
print(f"Le fichier {fichierEnregistrement} n'existe pas, nous allons le créer.")
classement = classement.append(pd.DataFrame({
'dates' : [0],
'finalBalance' : [0],
'perfVSUSD' : [0],
'holdPercentage' : [0],
'vsHoldPercentage' : [0],
'bestTrade' : [0],
'worstTrade' : [0],
'drawDown' : [0],
'taxes' : [0],
'totalTrades' : [0],
'totalGoodTrades' : [0],
'totalBadTrades' : [0],
'winRateRatio' : [0],
'tradesPerformance' : [0],
'averagePercentagePositivTrades' : [0],
'averagePercentageNegativTrades' : [0],
'startingBalance': [0],
'maxPositions': [0],
'parametrePVO2': [0],
'parametrePERF': [0],
'parametreTRIX_HISTO': [0],
'parametrePVO': [0],
'parametreBOL_BANDwindowdev': [0],
'parametreBOL_BANDwindow': [0],
'parametreMACD': [0],
'parametreEMA13D': [0],
'parametreEMA9D': [0],
'parametreEMA10': [0],
'parametreEMA50': [0],
'parametreEMA9D': [0],
'parametreEMA45': [0]}), ignore_index=True)
else:
print("Vous devez spécifier un fichier .csv\npython3 algorithme.py <nom-du-fichier.csv>")
exit()
Expand Down Expand Up @@ -159,130 +190,145 @@
parametreEMA45 = parametreEMA45default

bestFinalBalance = 0
elapsed = 0
measures = []
measures.append(40)

i=0

#================================================================================================================
# FONCTION QUI LANCE LE BACKTEST AVEC LES PARAMETRES D'ENTREES ET ENREGISTRE LE RESULTAT DANS UN FICHIER CSV
#================================================================================================================
def launch_backtest():

print(f"Lancement du backtest avec les paramètres : {dateAnnee} {dateMois} {dateJour} {startingBalance} {maxPositions} {parametrePVO2} {parametrePERF} {parametreTRIX_HISTO} {parametrePVO} {parametreBOL_BANDwindowdev} {parametreBOL_BANDwindow} {parametreMACD} {parametreEMA13D} {parametreEMA9D} {parametreEMA10} {parametreEMA50} {parametreEMA45}")
global i
global classement
global elapsed
global measures
i=i+1
pourcent=round(100*i/count,4)
print(f"Avancement total d'execution : {i}/{count} ({pourcent}%)")
cmd = (f"python3 -W ignore _backtest.py {dateAnnee} {dateMois} {dateJour} {startingBalance} {maxPositions} {parametrePVO2} {parametrePERF} {parametreTRIX_HISTO} {parametrePVO} {parametreBOL_BANDwindowdev} {parametreBOL_BANDwindow} {parametreMACD} {parametreEMA13D} {parametreEMA9D} {parametreEMA10} {parametreEMA50} {parametreEMA45}")
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
out, err = p.communicate()
result=out.decode('utf-8')
if result=='':
result=1000
dates=str("0")
finalBalance=float(0)
perfVSUSD=float(0)
holdPercentage=float(0)
vsHoldPercentage=float(0)
bestTrade=float(0)
worstTrade=float(0)
drawDown=float(0)
taxes=float(0)
totalTrades=float(0)
totalGoodTrades=float(0)
totalBadTrades=float(0)
winRateRatio=float(0)
tradesPerformance=float(0)
averagePercentagePositivTrades=float(0)
averagePercentageNegativTrades=float(0)
else:
separatedResult=result.split('\n')
y=1
for line in separatedResult:
if y==1 :
dates=str(line)
if y==2 :
finalBalance=float(line)
if y==3 :
perfVSUSD=float(line)
if y==4 :
holdPercentage=float(line)
if y==5 :
vsHoldPercentage=float(line)
if y==6 :
bestTrade=float(line)
if y==7 :
worstTrade=float(line)
if y==8 :
drawDown=float(line)
if y==9 :
taxes=float(line)
if y==10 :
totalTrades=float(line)
if y==11 :
totalGoodTrades=float(line)
if y==12 :
totalBadTrades=float(line)
if y==13 :
winRateRatio=float(line)
if y==14 :
tradesPerformance=float(line)
if y==15 :
averagePercentagePositivTrades=float(line)
if y==16 :
averagePercentageNegativTrades=float(line)
y=y+1
global classement
classement = classement.append(pd.DataFrame({
'dates' : [dates],
'finalBalance' : [finalBalance],
'perfVSUSD' : [perfVSUSD],
'holdPercentage' : [holdPercentage],
'vsHoldPercentage' : [vsHoldPercentage],
'bestTrade' : [bestTrade],
'worstTrade' : [worstTrade],
'drawDown' : [drawDown],
'taxes' : [taxes],
'totalTrades' : [totalTrades],
'totalGoodTrades' : [totalGoodTrades],
'totalBadTrades' : [totalBadTrades],
'winRateRatio' : [winRateRatio],
'tradesPerformance' : [tradesPerformance],
'averagePercentagePositivTrades' : [averagePercentagePositivTrades],
'averagePercentageNegativTrades' : [averagePercentageNegativTrades],
'startingBalance': [startingBalance],
'maxPositions': [maxPositions],
'parametrePVO2': [parametrePVO2],
'parametrePERF': [parametrePERF],
'parametreTRIX_HISTO': [parametreTRIX_HISTO],
'parametrePVO': [parametrePVO],
'parametreBOL_BANDwindowdev': [parametreBOL_BANDwindowdev],
'parametreBOL_BANDwindow': [parametreBOL_BANDwindow],
'parametreMACD': [parametreMACD],
'parametreEMA13D': [parametreEMA13D],
'parametreEMA9D': [parametreEMA9D],
'parametreEMA10': [parametreEMA10],
'parametreEMA50': [parametreEMA50],
'parametreEMA9D': [parametreEMA9D],
'parametreEMA45': [parametreEMA45]}), ignore_index=True)

classement.dates = classement.dates.astype(str)
classement.finalBalance = classement.finalBalance.astype(float)
classement.perfVSUSD = classement.perfVSUSD.astype(float)
classement.holdPercentage = classement.holdPercentage.astype(float)
classement.vsHoldPercentage = classement.vsHoldPercentage.astype(float)
classement.bestTrade = classement.bestTrade.astype(float)
classement.worstTrade = classement.worstTrade.astype(float)
classement.drawDown = classement.drawDown.astype(float)
classement.taxes = classement.taxes.astype(float)
classement.totalTrades = classement.totalTrades.astype(float)
classement.totalGoodTrades = classement.totalGoodTrades.astype(float)
classement.totalBadTrades = classement.totalBadTrades.astype(float)
classement.winRateRatio = classement.winRateRatio.astype(float)
classement.tradesPerformance = classement.tradesPerformance.astype(float)
classement.averagePercentagePositivTrades = classement.averagePercentagePositivTrades.astype(float)
classement.averagePercentageNegativTrades = classement.averagePercentageNegativTrades.astype(float)

moyenne=round(statistics.mean(measures),3)
start = time.time()
print(f"La dernière execution a durée : {elapsed} secondes")
print(f"Avancement total d'execution : {i}/{count} ({pourcent}%) (Temps restant estimé par rapport aux dernières executions : {((count-i)*moyenne)} secondes soit {(((count-i)*moyenne)/60)} minutes ou {round((count-i)*moyenne/60/60, 1)} heures ou {round((count-i)*elapsed/60/60/24, 1)} jours)")
if ((classement['maxPositions'] == maxPositions) & (classement['parametrePVO2'] == parametrePVO2) & (classement['parametrePERF'] == parametrePERF) & (classement['parametreTRIX_HISTO'] == parametreTRIX_HISTO) & (classement['parametrePVO'] == parametrePVO) & (classement['parametreBOL_BANDwindowdev'] == parametreBOL_BANDwindowdev) & (classement['parametreBOL_BANDwindow'] == parametreBOL_BANDwindow) & (classement['parametreMACD'] == parametreMACD) & (classement['parametreEMA13D'] == parametreEMA13D) & (classement['parametreEMA9D'] == parametreEMA9D) & (classement['parametreEMA10'] == parametreEMA10) & (classement['parametreEMA50'] == parametreEMA50) & (classement['parametreEMA45'] == parametreEMA45)).any() :
print(f"Données {dateAnnee} {dateMois} {dateJour} {startingBalance} {maxPositions} {parametrePVO2} {parametrePERF} {parametreTRIX_HISTO} {parametrePVO} {parametreBOL_BANDwindowdev} {parametreBOL_BANDwindow} {parametreMACD} {parametreEMA13D} {parametreEMA9D} {parametreEMA10} {parametreEMA50} {parametreEMA45} déjà présentes dans le classement")
else :
cmd = (f"python3 -W ignore _backtest-for-bear-only.py {dateAnnee} {dateMois} {dateJour} {startingBalance} {maxPositions} {parametrePVO2} {parametrePERF} {parametreTRIX_HISTO} {parametrePVO} {parametreBOL_BANDwindowdev} {parametreBOL_BANDwindow} {parametreMACD} {parametreEMA13D} {parametreEMA9D} {parametreEMA10} {parametreEMA50} {parametreEMA45}")
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
out, err = p.communicate()
end = time.time()
elapsed = end - start
measures.append(elapsed)
result=out.decode('utf-8')
if result=='':
result=1000
dates=str("0")
finalBalance=float(0)
perfVSUSD=float(0)
holdPercentage=float(0)
vsHoldPercentage=float(0)
bestTrade=float(0)
worstTrade=float(0)
drawDown=float(0)
taxes=float(0)
totalTrades=float(0)
totalGoodTrades=float(0)
totalBadTrades=float(0)
winRateRatio=float(0)
tradesPerformance=float(0)
averagePercentagePositivTrades=float(0)
averagePercentageNegativTrades=float(0)
else:
separatedResult=result.split('\n')
y=1
for line in separatedResult:
if y==1 :
dates=str(line)
if y==2 :
finalBalance=float(line)
if y==3 :
perfVSUSD=float(line)
if y==4 :
holdPercentage=float(line)
if y==5 :
vsHoldPercentage=float(line)
if y==6 :
bestTrade=float(line)
if y==7 :
worstTrade=float(line)
if y==8 :
drawDown=float(line)
if y==9 :
taxes=float(line)
if y==10 :
totalTrades=float(line)
if y==11 :
totalGoodTrades=float(line)
if y==12 :
totalBadTrades=float(line)
if y==13 :
winRateRatio=float(line)
if y==14 :
tradesPerformance=float(line)
if y==15 :
averagePercentagePositivTrades=float(line)
if y==16 :
averagePercentageNegativTrades=float(line)
y=y+1
classement = classement.append(pd.DataFrame({
'dates' : [dates],
'finalBalance' : [finalBalance],
'perfVSUSD' : [perfVSUSD],
'holdPercentage' : [holdPercentage],
'vsHoldPercentage' : [vsHoldPercentage],
'bestTrade' : [bestTrade],
'worstTrade' : [worstTrade],
'drawDown' : [drawDown],
'taxes' : [taxes],
'totalTrades' : [totalTrades],
'totalGoodTrades' : [totalGoodTrades],
'totalBadTrades' : [totalBadTrades],
'winRateRatio' : [winRateRatio],
'tradesPerformance' : [tradesPerformance],
'averagePercentagePositivTrades' : [averagePercentagePositivTrades],
'averagePercentageNegativTrades' : [averagePercentageNegativTrades],
'startingBalance': [startingBalance],
'maxPositions': [maxPositions],
'parametrePVO2': [parametrePVO2],
'parametrePERF': [parametrePERF],
'parametreTRIX_HISTO': [parametreTRIX_HISTO],
'parametrePVO': [parametrePVO],
'parametreBOL_BANDwindowdev': [parametreBOL_BANDwindowdev],
'parametreBOL_BANDwindow': [parametreBOL_BANDwindow],
'parametreMACD': [parametreMACD],
'parametreEMA13D': [parametreEMA13D],
'parametreEMA9D': [parametreEMA9D],
'parametreEMA10': [parametreEMA10],
'parametreEMA50': [parametreEMA50],
'parametreEMA9D': [parametreEMA9D],
'parametreEMA45': [parametreEMA45]}), ignore_index=True)

classement.dates = classement.dates.astype(str)
classement.finalBalance = classement.finalBalance.astype(float)
classement.perfVSUSD = classement.perfVSUSD.astype(float)
classement.holdPercentage = classement.holdPercentage.astype(float)
classement.vsHoldPercentage = classement.vsHoldPercentage.astype(float)
classement.bestTrade = classement.bestTrade.astype(float)
classement.worstTrade = classement.worstTrade.astype(float)
classement.drawDown = classement.drawDown.astype(float)
classement.taxes = classement.taxes.astype(float)
classement.totalTrades = classement.totalTrades.astype(float)
classement.totalGoodTrades = classement.totalGoodTrades.astype(float)
classement.totalBadTrades = classement.totalBadTrades.astype(float)
classement.winRateRatio = classement.winRateRatio.astype(float)
classement.tradesPerformance = classement.tradesPerformance.astype(float)
classement.averagePercentagePositivTrades = classement.averagePercentagePositivTrades.astype(float)
classement.averagePercentageNegativTrades = classement.averagePercentageNegativTrades.astype(float)


classement.to_csv(fichierEnregistrement)
classement.to_csv(fichierEnregistrement)
return True

#========================================================================
Expand Down Expand Up @@ -431,4 +477,4 @@ def launch_backtest():

print(classement.head())
classement.to_csv(fichierEnregistrement)
telegram_send.send(messages=[f"Votre algorithme d'études en timeframe 5 minutes a enregistré toutes les données dans {fichierEnregistrement} pour le mois de {str(cfg['DATE']['mois'])} {str(cfg['DATE']['date'])}"])
telegram_send.send(messages=[f"Votre algorithme d'études en timeframe 5 minutes a enregistré toutes les données dans {fichierEnregistrement} "])

0 comments on commit 6312f6c

Please sign in to comment.