diff --git a/forms.py b/forms.py index 659ba3f..0524bc1 100644 --- a/forms.py +++ b/forms.py @@ -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() diff --git a/templates/dashboard/unbalanced_trades.html b/templates/dashboard/unbalanced_trades.html new file mode 100644 index 0000000..ff082e1 --- /dev/null +++ b/templates/dashboard/unbalanced_trades.html @@ -0,0 +1,45 @@ +{% extends "dashboard/base.html" %} +{% load static %} +{% load bootstrap3 %} +{% load mathfilters %} +{% load humanize %} + +{% block content %} + + + + + + + + + + + + + + +{% for trade in trades %} + + + + + + + + + + + + + +{% endfor %} +
TimeAccountSecurityOperationPriceQuantityVolumeCommissionStrategy IDSignal ID
{{ trade.timestamp }}{{ trade.account }}{{ trade.security }}{% if trade.quantity > 0 %} Buy {% else %} Sell {% endif %}{{ trade.price|floatformat:4}}{{ trade.quantity|abs }}{{ trade.volume|stringformat:".3f"}} {{ trade.volumeCurrency }}{{ trade.commission|floatformat:3 }}{{ trade.strategyId }}{{ trade.signalId }}
+ +{% endblock %} diff --git a/views.py b/views.py index 43bd9fa..5dfc28a 100644 --- a/views.py +++ b/views.py @@ -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,35 +218,39 @@ def aggregate_unbalanced_trades(): balance_entry = { 'balance' : 0} print('ts:', trade.timestamp) - if balance_entry['balance'] == 0: - print('new entry: ', balance_key) - balance_entry['balance'] = trade.quantity - direction = '' - if trade.quantity > 0: - direction='long' + 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 + direction = '' + if trade.quantity > 0: + direction='long' + else: + 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_volume + balance_entry['trade_ids'] = [trade.pk] + balance_entry['commissions'] = trade.commission else: - 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['trade_ids'] = [trade.pk] - balance_entry['commissions'] = trade.commission + print('update entry: ', balance_key) + balance_entry['balance'] += trade.quantity + balance_entry['trade'].profit += -trade.price * 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 + + print('updated: ', balance_entry['balance']) + if balance_entry['balance'] == 0: + balance_entry['trade'].profit *= balance_entry['ks'] + balance_entry['trade'].profit -= balance_entry['commissions'] + balance_entry['trade'].exitTime = trade.timestamp + balanced_trades.append((balance_entry['trade'], balance_entry['trade_ids'])) + balances[balance_key] = balance_entry 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'] /= 2 - balance_entry['trade_ids'].append(trade.pk) - balance_entry['commissions'] += trade.commission - - print('updated: ', balance_entry['balance']) - if balance_entry['balance'] == 0: - balance_entry['trade'].profit *= balance_entry['ks'] - balance_entry['trade'].profit -= balance_entry['commissions'] - balance_entry['trade'].exitTime = trade.timestamp - balanced_trades.append((balance_entry['trade'], balance_entry['trade_ids'])) - balances[balance_key] = balance_entry + print('Trade zero volume: ', trade.security, trade.strategyId, trade.price, trade.quantity) for trade, trade_ids in balanced_trades: trade.save()