Browse Source

Closed trades: filtration

master
Denis Tereshkin 9 years ago
parent
commit
3f0c2ee5b7
  1. 17
      forms.py
  2. 12
      templates/dashboard/closed_trades.html
  3. 23
      views.py

17
forms.py

@ -1,4 +1,13 @@
from django import forms 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): class NewTradeForm(forms.Form):
timestamp = forms.DateTimeField() timestamp = forms.DateTimeField()
@ -12,3 +21,11 @@ class NewTradeForm(forms.Form):
strategyId = forms.CharField(max_length=64) strategyId = forms.CharField(max_length=64)
signalId = 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)))

12
templates/dashboard/closed_trades.html

@ -4,6 +4,18 @@
{% load mathfilters %} {% load mathfilters %}
{% block content %} {% block content %}
<div class="panel panel-default">
<div class="panel-header">
<a href="#closed_trades_filter_form" role="button" data-toggle="collapse">Apply filter...</a>
</div>
<div class="panel-body panel-collapse collapse" id="closed_trades_filter_form">
<form action="{% url 'closed_trades_index' %}" method="GET">
{% csrf_token %}
{% bootstrap_form closed_trades_filter_form %}
{% bootstrap_button button_type='submit' content='Submit' %}
</form>
</div>
</div>
<table class="table table-condensed"> <table class="table table-condensed">
<tr> <tr>
<td></td> <td></td>

23
views.py

@ -7,7 +7,7 @@ from django.contrib import messages
from django.db import transaction from django.db import transaction
from .models import RobotInstance, Trade, ClosedTrade from .models import RobotInstance, Trade, ClosedTrade
from .forms import NewTradeForm from .forms import NewTradeForm, ClosedTradeFilterForm
import redis import redis
import json import json
import datetime import datetime
@ -160,10 +160,27 @@ def aggregate_unbalanced_trades():
def closed_trades_index(request): def closed_trades_index(request):
aggregate_unbalanced_trades() 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() closed_trades = ClosedTrade.objects.all()
form = ClosedTradeFilterForm()
aggregate_unbalanced_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
} }
return HttpResponse(template.render(context, request)) return HttpResponse(template.render(context, request))

Loading…
Cancel
Save