alexaxbreadbytes commited on
Commit
d331fd4
·
verified ·
1 Parent(s): dfb28f9

visual updates + drawdown

Browse files
Files changed (1) hide show
  1. app.py +36 -19
app.py CHANGED
@@ -294,7 +294,21 @@ def get_sd_df(sd_df, sd, bot_selections, dca1, dca2, dca3, dca4, dca5, dca6, fee
294
  sd_df['Net P/L Per Trade (-)'] = (sd_df['Return Per Trade (-)']-1)*sd_df['Balance used in Trade (-)']
295
  sd_df['Cumulative P/L (-)'] = sd_df['Net P/L Per Trade (-)'].cumsum()
296
  return sd_df
297
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
298
  def runapp() -> None:
299
  bot_selections = "Pure Bread"
300
  otimeheader = 'Exit Date'
@@ -392,7 +406,7 @@ def runapp() -> None:
392
  df['Net P/L Per Trade'] = (df['Return Per Trade']-1)*df['Balance used in Trade']
393
  df['Cumulative P/L'] = df['Net P/L Per Trade'].cumsum()
394
 
395
-
396
  cum_pl = df.loc[df.dropna().index[-1],'Cumulative P/L'] + principal_balance
397
 
398
  effective_return = 100*((cum_pl - principal_balance)/principal_balance)
@@ -488,8 +502,8 @@ def runapp() -> None:
488
  else:
489
  with st.container():
490
  for row in totals.itertuples():
491
- col1, col2, col3, col4= st.columns(4)
492
- c1, c2, c3, c4 = st.columns(4)
493
  with col1:
494
  st.metric(
495
  "Total Trades",
@@ -497,8 +511,9 @@ def runapp() -> None:
497
  )
498
  with c1:
499
  st.metric(
500
- "Profit Factor",
501
- f"{row._5:.2f}",
 
502
  )
503
  with col2:
504
  st.metric(
@@ -507,9 +522,9 @@ def runapp() -> None:
507
  )
508
  with c2:
509
  st.metric(
510
- "Cumulative P/L",
511
- f"${row._6:.2f}",
512
- f"{row._7:.2f} %",
513
  )
514
  with col3:
515
  st.metric(
@@ -517,14 +532,9 @@ def runapp() -> None:
517
  f"{row.Losses:.0f}",
518
  )
519
  with c3:
520
- st.metric(
521
- "Rolling 7 Days",
522
- "",#f"{(1+get_rolling_stats(df,otimeheader, 30))*principal_balance:.2f}",
523
- f"{get_rolling_stats(df,lev, otimeheader, 7):.2f}%",
524
- )
525
  st.metric(
526
  "Rolling 30 Days",
527
- "",#f"{(1+get_rolling_stats(df,otimeheader, 30))*principal_balance:.2f}",
528
  f"{get_rolling_stats(df,lev, otimeheader, 30):.2f}%",
529
  )
530
 
@@ -536,13 +546,20 @@ def runapp() -> None:
536
  with c4:
537
  st.metric(
538
  "Rolling 90 Days",
539
- "",#f"{(1+get_rolling_stats(df,otimeheader, 30))*principal_balance:.2f}",
540
  f"{get_rolling_stats(df,lev, otimeheader, 90):.2f}%",
541
  )
 
 
 
 
 
 
 
542
  st.metric(
543
- "Rolling 180 Days",
544
- "",#f"{(1+get_rolling_stats(df,otimeheader, 30))*principal_balance:.2f}",
545
- f"{get_rolling_stats(df,lev, otimeheader, 180):.2f}%",
546
  )
547
 
548
  if bot_selections == "Pumpernickel":
 
294
  sd_df['Net P/L Per Trade (-)'] = (sd_df['Return Per Trade (-)']-1)*sd_df['Balance used in Trade (-)']
295
  sd_df['Cumulative P/L (-)'] = sd_df['Net P/L Per Trade (-)'].cumsum()
296
  return sd_df
297
+
298
+ def get_account_drawdown(trades):
299
+ trades = trades.dropna()
300
+ max_draw = 0.0
301
+ beg = 0
302
+ fin = 0
303
+ for candidate in trades.index[:-1]:
304
+ future = trades[candidate+1:]
305
+ delta = future - trades[candidate]
306
+ if max_draw > delta.min():
307
+ max_draw = min(max_draw, delta.min())
308
+ beg = candidate
309
+ fin = delta.argmin()
310
+ return max_draw, (beg, fin)
311
+
312
  def runapp() -> None:
313
  bot_selections = "Pure Bread"
314
  otimeheader = 'Exit Date'
 
406
  df['Net P/L Per Trade'] = (df['Return Per Trade']-1)*df['Balance used in Trade']
407
  df['Cumulative P/L'] = df['Net P/L Per Trade'].cumsum()
408
 
409
+ max_draw, (beg, fin) = get_account_drawdown(df['Cumulative P/L'])
410
  cum_pl = df.loc[df.dropna().index[-1],'Cumulative P/L'] + principal_balance
411
 
412
  effective_return = 100*((cum_pl - principal_balance)/principal_balance)
 
502
  else:
503
  with st.container():
504
  for row in totals.itertuples():
505
+ c1, c2, c3, c4, c5 = st.columns(5)
506
+ col1, col2, col3, col4, col5 = st.columns(5)
507
  with col1:
508
  st.metric(
509
  "Total Trades",
 
511
  )
512
  with c1:
513
  st.metric(
514
+ "Cumulative P/L",
515
+ f"${row._6:.2f}",
516
+ f"{row._7:.2f} %",
517
  )
518
  with col2:
519
  st.metric(
 
522
  )
523
  with c2:
524
  st.metric(
525
+ "Rolling 7 Days",
526
+ "",#f"{(1+get_rolling_stats(df,lev, otimeheader, 7)/100)*principal_balance:.2f}",
527
+ f"{get_rolling_stats(df,lev, otimeheader, 7):.2f}%",
528
  )
529
  with col3:
530
  st.metric(
 
532
  f"{row.Losses:.0f}",
533
  )
534
  with c3:
 
 
 
 
 
535
  st.metric(
536
  "Rolling 30 Days",
537
+ "",#f"{(1+get_rolling_stats(df,lev, otimeheader, 30)/100)*principal_balance:.2f}",
538
  f"{get_rolling_stats(df,lev, otimeheader, 30):.2f}%",
539
  )
540
 
 
546
  with c4:
547
  st.metric(
548
  "Rolling 90 Days",
549
+ "",#f"{(1+get_rolling_stats(df,lev, otimeheader, 90)/100)*principal_balance:.2f}",
550
  f"{get_rolling_stats(df,lev, otimeheader, 90):.2f}%",
551
  )
552
+
553
+ with col5:
554
+ st.metric(
555
+ "Profit Factor",
556
+ f"{row._5:.2f}",
557
+ )
558
+ with c5:
559
  st.metric(
560
+ "Max Account Drawdown",
561
+ "",#f"{np.round(100*max_draw/principal_balance,2)/100*principal_balance:.2f}",
562
+ f"{np.round(100*max_draw/principal_balance,2)}%",
563
  )
564
 
565
  if bot_selections == "Pumpernickel":