Я пытаюсь рассчитать статистику по сделкам в моей модели. Эта статистика в основном получена с использованием функций внутри моей торговой модели. Я перечислил все статистические данные, которые до сих пор работали, и сейчас я застрял в вычислении среднего значения "выигрыша" и процентов.
Спасибо за помощь SOF сообществу!
views.py
class StatsView(LoginRequiredMixin, TemplateView):
template_name = 'dashboard/stats.html'
def get_context_data(self, *args, **kwargs):
trade = Trade.objects.filter(user=self.request.user, status='cl')
context = super(StatsView, self).get_context_data(*args, **kwargs)
#ALL WORKING STATS
context['all_trades'] = Trade.objects.filter(user=self.request.user).count()
context['gross_profit'] = sum([t.get_profit_loss_value() for t in trade])
context['net_profit'] = sum([t.get_profit_loss_value_fees() for t in trade])
context['win_trades_profit'] = sum(t.get_profit_loss_value_fees() for t in trade if t.get_trade_result() == 'win')
context['loss_trades_profit'] = sum(t.get_profit_loss_value_fees() for t in trade if t.get_trade_result() == 'loss')
context['win_trades_count'] = sum(t.get_trade_result() == 'win' for t in trade)
#context['win_trades_count'] = [t.get_trade_result() for t in trade].count('win') ALSO WORKS
context['loss_trades_count'] = sum(t.get_trade_result() == 'loss' for t in trade)
context['scratch_trades_count'] = sum(t.get_trade_result() == 'scratch' for t in trade)
context['total_fees'] = sum([t.get_fees() for t in trade])
#NOT WORKING YET
#Calculate Avg Profit For All Winning Trades
#Result: Avg(Value(<generator object StatsView.get_context_data.<locals>.<genexpr> at 0x000002C98818F3C8>))
#context['avg_win'] = Avg(t.get_profit_loss_value_fees() for t in trade if t.get_trade_result() == 'win')
models.py
class Trade(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True)
status = models.CharField(max_length=2, choices=STATUS_CHOICES, default='cl')
...
# profit_loss_value_fees = profit_loss_value - fees
def get_profit_loss_value_fees(self):
result = self.get_profit_loss_value() - self.get_fees()
return result
class Entry(models.Model):
trade = models.ForeignKey(Trade, on_delete=models.CASCADE)
price/fee/amount/entry_type/etc...
Little дополнительный бонусный вопрос, на случай, если у кого-то есть какие-то идеи, так как я тоже застрял в этой части.
Мне нужно начать фильтровать статистику после этого. Как вы, ребята, порекомендовали бы включить в эту статистику очень динамичную c систему фильтрации? Все с того времени, к какому портфелю относятся сделки.
Ответьте на исходную задачу. Это было очень просто ..
context['avg_win'] = mean(t.get_profit_loss_value_fees() for t in trade if t.get_trade_result() == 'win')
Все равно оценил бы идеи по фильтрации!