diff --git a/templates/dashboard/base.html b/templates/dashboard/base.html
index 63052b4..09bda05 100644
--- a/templates/dashboard/base.html
+++ b/templates/dashboard/base.html
@@ -18,6 +18,7 @@
Overview
Trades
Closed
+ Performance
{% if user.username %}
diff --git a/templates/dashboard/performance.html b/templates/dashboard/performance.html
new file mode 100644
index 0000000..d889563
--- /dev/null
+++ b/templates/dashboard/performance.html
@@ -0,0 +1,62 @@
+{% extends "dashboard/base.html" %}
+{% load static %}
+{% load bootstrap3 %}
+{% load mathfilters %}
+{% load humanize %}
+
+{% block content %}
+
+
+
+
+
+
+ | PnL |
+ {{ results.total.pnl|floatformat:2 }} |
+
+
+ | Profit |
+ {{ results.total.profit|floatformat:2 }} |
+
+
+ | Loss |
+ {{ results.total.loss|floatformat:2 }} |
+
+
+ | PF |
+ {{ results.total.pf|floatformat:2 }} |
+
+
+
+
+{% endblock %}
diff --git a/urls.py b/urls.py
index ad8021e..76f2df6 100644
--- a/urls.py
+++ b/urls.py
@@ -14,4 +14,5 @@ urlpatterns = [
url(r'^delete_trade/(?P[^/]+)$', views.delete_trade, name='delete_trade'),
url(r'^closed_trades/$', views.closed_trades_index, name='closed_trades_index'),
url(r'^rebalance_closed_trades/$', views.rebalance_closed_trades, name='rebalance_closed_trades'),
+ url(r'^performance/$', views.performance, name='performance')
]
diff --git a/views.py b/views.py
index d15be5b..2e00461 100644
--- a/views.py
+++ b/views.py
@@ -259,8 +259,7 @@ def closed_trades_index(request):
'closed_trades' : closed_trades,
'closed_trades_filter_form' : form,
'cumulative_profits' : cum_profits,
- 'user' : request.user
- }
+ 'user' : request.user }
return HttpResponse(template.render(context, request))
@transaction.atomic
@@ -272,3 +271,53 @@ def do_rebalance():
def rebalance_closed_trades(request):
do_rebalance()
return HttpResponseRedirect(reverse('closed_trades_index'))
+
+@login_required
+def performance(request):
+ aggregate_unbalanced_trades()
+ all_accounts = set()
+ for trade in ClosedTrade.objects.all():
+ if trade.account != 'demo':
+ all_accounts.add(trade.account)
+
+ closed_trades = ClosedTrade.objects.exclude(account='demo').order_by('exitTime')
+ dates = []
+ columns = {}
+ for account in all_accounts:
+ columns[account] = []
+ prev_day = None
+ for trade in closed_trades:
+ if prev_day != trade.exitTime.date():
+ prev_day = trade.exitTime.date()
+ dates.append(prev_day)
+ for account in all_accounts:
+ columns[account].append(0)
+ columns[trade.account][-1] += trade.profit
+
+ results = { 'total' : { 'pnl' : 0, 'profit' : 0, 'loss' : 0 } }
+
+ for account in all_accounts:
+ results[account] = { 'pnl' : 0, 'profit' : 0, 'loss' : 0 }
+
+ for trade in closed_trades:
+ if trade.account != 'demo':
+ results['total']['pnl'] += trade.profit
+ results[trade.account]['pnl'] += trade.profit
+
+ if trade.profit > 0:
+ results['total']['profit'] += trade.profit
+ results[trade.account]['profit'] += trade.profit
+ else:
+ results['total']['loss'] -= trade.profit
+ results[trade.account]['loss'] -= trade.profit
+
+ results['total']['pf'] = results['total']['profit'] / results['total']['loss']
+
+ template = loader.get_template('dashboard/performance.html')
+ context = {
+ 'user' : request.user,
+ 'dates' : dates,
+ 'columns' : columns,
+ 'results' : results
+ }
+ return HttpResponse(template.render(context, request))