From 6caa2e39649b4d77de8e1b11bb7311d34ac06a52 Mon Sep 17 00:00:00 2001 From: Denis Tereshkin Date: Tue, 11 Jul 2017 11:02:56 +0700 Subject: [PATCH] ClosedTrades: date filter --- forms.py | 5 +++++ views.py | 33 ++++++++++++++++++++------------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/forms.py b/forms.py index 667a3b5..f2bc469 100644 --- a/forms.py +++ b/forms.py @@ -1,5 +1,6 @@ from django import forms from .models import ClosedTrade +import datetime def get_all_accounts_and_strategies(): all_accounts = set() @@ -29,6 +30,10 @@ class ClosedTradeFilterForm(forms.Form): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + now = datetime.date.today() + all_accounts, all_strategies = get_all_accounts_and_strategies() self.fields['accounts'] = forms.MultipleChoiceField(choices=zip(list(all_accounts), list(all_accounts)), required=False) self.fields['strategies'] = forms.MultipleChoiceField(choices=zip(list(all_strategies), list(all_strategies)), required=False) + self.fields['startdate'] = forms.DateField(initial=(now - datetime.timedelta(weeks=4))) + self.fields['enddate'] = forms.DateField(initial=now) diff --git a/views.py b/views.py index c9b4c3b..e319462 100644 --- a/views.py +++ b/views.py @@ -62,9 +62,15 @@ def overview(request): robot_states = [] index = 0 for robot in robot_instances: + try: + raw_state = r.get(robot.instanceId) + last_store = r.get(robot.instanceId + ":last_store") + except: + raw_state = b"{}" + last_store = None + entry = {} entry['positions'] = dict() - raw_state = r.get(robot.instanceId) if raw_state is not None: state = json.loads(str(raw_state, 'utf-8')) try: @@ -87,7 +93,6 @@ def overview(request): entry['pending_pos_counter'] = pending_pos_counter entry['state'] = json.dumps(state, sort_keys=True, indent=2, separators=(',', ': ')) - last_store = r.get(robot.instanceId + ":last_store") if last_store is not None: entry['last_store'] = datetime.datetime.utcfromtimestamp(float(str(last_store, 'utf-8')[:-1])) index += 1 @@ -250,18 +255,20 @@ 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() + if len(d['strategies']) > 0: + closed_trades = closed_trades.filter(strategyId__in=list(d['strategies'])) + if len(d['accounts']) > 0: + closed_trades = closed_trades.filter(account__in=list(d['accounts'])) + + if d['startdate'] is not None: + closed_trades = closed_trades.filter(exitTime__gte=d['startdate']) + if d['enddate'] is not None: + closed_trades = closed_trades.filter(exitTime__lte=d['enddate']) + + else: + now = datetime.date.today() + closed_trades = ClosedTrade.objects.all().filter(exitTime__gte=(now - datetime.timedelta(weeks=4))) form = ClosedTradeFilterForm() closed_trades = closed_trades.order_by('-entryTime')