Browse Source

Rudimentary performance tab

master
Denis Tereshkin 9 years ago
parent
commit
66ce659cd4
  1. 1
      templates/dashboard/base.html
  2. 62
      templates/dashboard/performance.html
  3. 1
      urls.py
  4. 53
      views.py

1
templates/dashboard/base.html

@ -18,6 +18,7 @@
<li><a href="{% url 'overview' %}">Overview</a></li> <li><a href="{% url 'overview' %}">Overview</a></li>
<li><a href="{% url 'trades_index' %}">Trades</a></li> <li><a href="{% url 'trades_index' %}">Trades</a></li>
<li><a href="{% url 'closed_trades_index' %}">Closed</a></li> <li><a href="{% url 'closed_trades_index' %}">Closed</a></li>
<li><a href="{% url 'performance' %}">Performance</a></li>
</ul> </ul>
<ul class="nav navbar-nav navbar-right"> <ul class="nav navbar-nav navbar-right">
{% if user.username %} {% if user.username %}

62
templates/dashboard/performance.html

@ -0,0 +1,62 @@
{% extends "dashboard/base.html" %}
{% load static %}
{% load bootstrap3 %}
{% load mathfilters %}
{% load humanize %}
{% block content %}
<script src="http://code.highcharts.com/highcharts.js"></script>
<div id="profits-container" style="width:100%; height:400px;">
</div>
<table class="table">
<tr>
<td>PnL</td>
<td> {{ results.total.pnl|floatformat:2 }}</td>
</tr>
<tr>
<td>Profit</td>
<td> {{ results.total.profit|floatformat:2 }}</td>
</tr>
<tr>
<td>Loss</td>
<td> {{ results.total.loss|floatformat:2 }}</td>
</tr>
<tr>
<td>PF</td>
<td> {{ results.total.pf|floatformat:2 }}</td>
</tr>
</table>
<script>
$(function () {
$('#profits-container').highcharts({
chart : {
type: 'column'
},
title: {
text: 'PnL'
},
xAxis: {
categories : [
{% for date in dates %}
'{{date}}',
{% endfor %}
]
},
series: [
{% for series_name, series in columns.items %}
{
name: '{{ series_name }}',
data: [
{% for value in series %}
{{value}},
{% endfor %}
]
},
{% endfor %}
]
});
});
</script>
{% endblock %}

1
urls.py

@ -14,4 +14,5 @@ urlpatterns = [
url(r'^delete_trade/(?P<trade_id>[^/]+)$', views.delete_trade, name='delete_trade'), url(r'^delete_trade/(?P<trade_id>[^/]+)$', views.delete_trade, name='delete_trade'),
url(r'^closed_trades/$', views.closed_trades_index, name='closed_trades_index'), 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'^rebalance_closed_trades/$', views.rebalance_closed_trades, name='rebalance_closed_trades'),
url(r'^performance/$', views.performance, name='performance')
] ]

53
views.py

@ -259,8 +259,7 @@ def closed_trades_index(request):
'closed_trades' : closed_trades, 'closed_trades' : closed_trades,
'closed_trades_filter_form' : form, 'closed_trades_filter_form' : form,
'cumulative_profits' : cum_profits, 'cumulative_profits' : cum_profits,
'user' : request.user 'user' : request.user }
}
return HttpResponse(template.render(context, request)) return HttpResponse(template.render(context, request))
@transaction.atomic @transaction.atomic
@ -272,3 +271,53 @@ def do_rebalance():
def rebalance_closed_trades(request): def rebalance_closed_trades(request):
do_rebalance() do_rebalance()
return HttpResponseRedirect(reverse('closed_trades_index')) 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))

Loading…
Cancel
Save