Browse Source

Equity plots

master
Denis Tereshkin 9 years ago
parent
commit
e813d4f7d3
  1. 40
      templates/dashboard/closed_trades.html
  2. 26
      views.py

40
templates/dashboard/closed_trades.html

@ -4,6 +4,7 @@
{% load mathfilters %} {% load mathfilters %}
{% block content %} {% block content %}
<script src="http://code.highcharts.com/highcharts.js"></script>
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-header"> <div class="panel-header">
<a href="#closed_trades_filter_form" role="button" data-toggle="collapse">Apply filter...</a> <a href="#closed_trades_filter_form" role="button" data-toggle="collapse">Apply filter...</a>
@ -17,6 +18,8 @@
</form> </form>
</div> </div>
</div> </div>
<div id="equity-container" style="width:100%; height:400px;">
</div>
<table class="table table-condensed"> <table class="table table-condensed">
<tr> <tr>
<td></td> <td></td>
@ -39,5 +42,42 @@
</tr> </tr>
{% endfor %} {% endfor %}
</table> </table>
<script>
$(function () {
$('#equity-container').highcharts({
chart : {
type: 'spline'
},
title: {
text: 'PnL'
},
xAxis: {
type: 'datetime',
dateTimeLabelFormats : {
month: '%e. %b',
year: '%b'
}
},
yAxis: {
title: {
text: 'PnL'
}
},
series: [
{% for series_name, series in cumulative_profits.items %}
{
name: '{{ series_name }}',
data: [
{% for element in series.elements %}
[Date.UTC({{ element.year }}, {{ element.month }}, {{ element.day }}, {{ element.hour }}, {{ element.minute}}, {{ element.second }}), {{ element.value }}]
,
{% endfor %}
]
},
{% endfor %}
]
});
});
</script>
{% endblock %} {% endblock %}

26
views.py

@ -158,6 +158,25 @@ def aggregate_unbalanced_trades():
tr.balanced = True tr.balanced = True
tr.save() tr.save()
def make_cumulative_profits(closed_trades):
result = {}
for trade in closed_trades:
try:
result[trade.account]['value'] += trade.profit
except KeyError:
result[trade.account] = { 'name' : trade.account,
'value' : trade.profit,
'elements' : [] }
element = {'year' : trade.exitTime.year,
'month' : trade.exitTime.month,
'day' : trade.exitTime.day,
'hour' : trade.exitTime.hour,
'minute' : trade.exitTime.minute,
'second' : trade.exitTime.second,
'value' : result[trade.account]['value']}
result[trade.account]['elements'].append(element)
return result
def closed_trades_index(request): def closed_trades_index(request):
aggregate_unbalanced_trades() aggregate_unbalanced_trades()
@ -178,12 +197,15 @@ def closed_trades_index(request):
closed_trades = ClosedTrade.objects.all() closed_trades = ClosedTrade.objects.all()
form = ClosedTradeFilterForm() form = ClosedTradeFilterForm()
closed_trades = closed_trades.order_by('-entryTime') closed_trades = closed_trades.order_by('-exitTime')
cum_profits = make_cumulative_profits(closed_trades)
template = loader.get_template('dashboard/closed_trades.html') template = loader.get_template('dashboard/closed_trades.html')
context = { context = {
'closed_trades' : closed_trades, 'closed_trades' : closed_trades,
'closed_trades_filter_form' : form 'closed_trades_filter_form' : form,
'cumulative_profits' : cum_profits
} }
return HttpResponse(template.render(context, request)) return HttpResponse(template.render(context, request))

Loading…
Cancel
Save