Browse Source

View unbalanced trades

master
Denis Tereshkin 6 years ago
parent
commit
e44db9975b
  1. 1
      forms.py
  2. 45
      templates/dashboard/unbalanced_trades.html
  3. 11
      views.py

1
forms.py

@ -37,3 +37,4 @@ class ClosedTradeFilterForm(forms.Form): @@ -37,3 +37,4 @@ class ClosedTradeFilterForm(forms.Form):
self.fields['strategies'] = forms.MultipleChoiceField(choices=zip(sorted(list(all_strategies)), sorted(list(all_strategies))), required=False)
self.fields['startdate'] = forms.DateField(initial=(now - datetime.timedelta(weeks=4)))
self.fields['enddate'] = forms.DateField(initial=now)
self.fields['unbalanced_only'] = forms.BooleanField()

45
templates/dashboard/unbalanced_trades.html

@ -0,0 +1,45 @@ @@ -0,0 +1,45 @@
{% extends "dashboard/base.html" %}
{% load static %}
{% load bootstrap3 %}
{% load mathfilters %}
{% load humanize %}
{% block content %}
<table class="table table-condensed">
<tr>
<td>Time</td>
<td>Account</td>
<td>Security</td>
<td>Operation</td>
<td>Price</td>
<td>Quantity</td>
<td>Volume</td>
<td>Commission</td>
<td>Strategy ID</td>
<td>Signal ID</td>
<td></td>
</tr>
{% for trade in trades %}
<tr>
<td>{{ trade.timestamp }}</td>
<td>{{ trade.account }}</td>
<td>{{ trade.security }}</td>
<td>{% if trade.quantity > 0 %} Buy {% else %} Sell {% endif %}</td>
<td>{{ trade.price|floatformat:4}}</td>
<td>{{ trade.quantity|abs }}</td>
<td>{{ trade.volume|stringformat:".3f"}} {{ trade.volumeCurrency }}</td>
<td>{{ trade.commission|floatformat:3 }}</td>
<td>{{ trade.strategyId }}</td>
<td>{{ trade.signalId }}</td>
<td><button type="button" class="btn btn-danger" onclick="if(window.confirm('Confirm deletion')) { document.location.href = '{% url 'delete_trade' trade_id=trade.pk %}'}; return false;">Delete</button></td>
</tr>
{% endfor %}
</table>
<nav aria-label="Page navigation">
<ul class="pagination">
{% for p in page_range %}
<li{% if p == page_num %} class="active"{% endif %}><a href="{% url 'trades_index'%}?page={{p}}">{{ p }}</a></li>
{% endfor %}
</ul>
</nav>
{% endblock %}

11
views.py

@ -144,6 +144,9 @@ def trades_index(request): @@ -144,6 +144,9 @@ def trades_index(request):
if d['enddate'] is not None:
trades = trades.filter(timestamp__lte=d['enddate'])
if d['unbalanced_only'] is not None:
trades = trades.filter(balanced=False)
else:
now = datetime.date.today()
form_filter = ClosedTradeFilterForm()
@ -215,6 +218,8 @@ def aggregate_unbalanced_trades(): @@ -215,6 +218,8 @@ def aggregate_unbalanced_trades():
balance_entry = { 'balance' : 0}
print('ts:', trade.timestamp)
trade_volume = (trade.price * abs(trade.quantity))
if trade_volume != 0:
if balance_entry['balance'] == 0:
print('new entry: ', balance_key)
balance_entry['balance'] = trade.quantity
@ -225,14 +230,14 @@ def aggregate_unbalanced_trades(): @@ -225,14 +230,14 @@ def aggregate_unbalanced_trades():
direction='short'
balance_entry['trade'] = ClosedTrade(account=trade.account, security=trade.security, entryTime=trade.timestamp, profitCurrency=trade.volumeCurrency,
profit=(-trade.price * trade.quantity), strategyId=trade.strategyId, direction=direction)
balance_entry['ks'] = trade.volume / (trade.price * abs(trade.quantity))
balance_entry['ks'] = trade.volume / trade_volume
balance_entry['trade_ids'] = [trade.pk]
balance_entry['commissions'] = trade.commission
else:
print('update entry: ', balance_key)
balance_entry['balance'] += trade.quantity
balance_entry['trade'].profit += -trade.price * trade.quantity
balance_entry['ks'] += trade.volume / (trade.price * abs(trade.quantity))
balance_entry['ks'] += trade.volume / trade_volume
balance_entry['ks'] /= 2
balance_entry['trade_ids'].append(trade.pk)
balance_entry['commissions'] += trade.commission
@ -244,6 +249,8 @@ def aggregate_unbalanced_trades(): @@ -244,6 +249,8 @@ def aggregate_unbalanced_trades():
balance_entry['trade'].exitTime = trade.timestamp
balanced_trades.append((balance_entry['trade'], balance_entry['trade_ids']))
balances[balance_key] = balance_entry
else:
print('Trade zero volume: ', trade.security, trade.strategyId, trade.price, trade.quantity)
for trade, trade_ids in balanced_trades:
trade.save()

Loading…
Cancel
Save