diff --git a/forms.py b/forms.py index 02443a1..6b37f29 100644 --- a/forms.py +++ b/forms.py @@ -1,4 +1,13 @@ from django import forms +from .models import ClosedTrade + +def get_all_accounts_and_strategies(): + all_accounts = set() + all_strategies = set() + for trade in ClosedTrade.objects.all(): + all_accounts.add(trade.account) + all_strategies.add(trade.strategyId) + return (all_accounts, all_strategies) class NewTradeForm(forms.Form): timestamp = forms.DateTimeField() @@ -12,3 +21,11 @@ class NewTradeForm(forms.Form): strategyId = forms.CharField(max_length=64) signalId = forms.CharField(max_length=64) +class ClosedTradeFilterForm(forms.Form): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + all_accounts, all_strategies = get_all_accounts_and_strategies() + self.fields['accounts'] = forms.MultipleChoiceField(choices=zip(list(all_accounts), list(all_accounts))) + self.fields['strategies'] = forms.MultipleChoiceField(choices=zip(list(all_strategies), list(all_strategies))) + diff --git a/templates/dashboard/closed_trades.html b/templates/dashboard/closed_trades.html index 4d91306..a472a97 100644 --- a/templates/dashboard/closed_trades.html +++ b/templates/dashboard/closed_trades.html @@ -4,6 +4,18 @@ {% load mathfilters %} {% block content %} +
| diff --git a/views.py b/views.py index e0107ab..a385571 100644 --- a/views.py +++ b/views.py @@ -7,7 +7,7 @@ from django.contrib import messages from django.db import transaction from .models import RobotInstance, Trade, ClosedTrade -from .forms import NewTradeForm +from .forms import NewTradeForm, ClosedTradeFilterForm import redis import json import datetime @@ -160,10 +160,27 @@ def aggregate_unbalanced_trades(): def closed_trades_index(request): + form = ClosedTradeFilterForm(request.GET) + if form.is_valid(): + d = form.cleaned_data + if len(d['accounts']) == 0: + if len(d['strategies']) == 0: + closed_trades = ClosedTrade.objects.all() + else: + closed_trades = ClosedTrade.objects.filter(strategyId__in=list(d['strategies'])) + else: + if len(d['strategies']) == 0: + closed_trades = ClosedTrade.objects.filter(account__in=list(d['accounts'])) + else: + closed_trades = ClosedTrade.objects.filter(account__in=list(d['accounts']), strategyId__in=list(d['strategies'])) + else: + closed_trades = ClosedTrade.objects.all() + form = ClosedTradeFilterForm() + aggregate_unbalanced_trades() - closed_trades = ClosedTrade.objects.all() template = loader.get_template('dashboard/closed_trades.html') context = { - 'closed_trades' : closed_trades + 'closed_trades' : closed_trades, + 'closed_trades_filter_form' : form } return HttpResponse(template.render(context, request)) |