Модели Джанго для данных временных рядов - PullRequest
0 голосов
/ 03 июля 2018

Мои друзья и я создаем приложение, которое покупает и продает акции, и мы хотим сохранить исторические цены каждой акции, которые у нас есть, к концу дня. 3 наиболее важных поля: символ тикера и цена и дата .

Например:

01/01/2018 - Bought Stock A, record price of Stock A at end of day(EOD)
01/02/2018 - Did nothing, record price of Stock A at EOD
01/03/2018 - Bought Stock B, record price of Stock A and Stock B at EOD
01/04/2018 - Sell Stock A, record price of Stock B at EOD

Мы используем Django для построения моделей. Каждый день мы будем фиксировать цену каждой имеющейся у нас акции. Этот набор данных предназначен только для внешнего использования и не будет доступен общественности.

Мое первоначальное исследование показало, что не идеально иметь одну таблицу для исторических цен и хранить каждую цену за акцию в виде одной строки. Я не уверен, что лучший подход при использовании Django. Как будет выглядеть модель Django для хранения всех этих данных, и мы должны использовать MYSQL?

1 Ответ

0 голосов
/ 03 июля 2018

Вы разделяете на 3 модели данных:

  • Модель для акции, имеющая ссылки на историю и текущую цену и количество, а также метаданные
  • Модель для истории покупок
  • Модель для истории цен

Три связаны с внешними ключами из стандартной модели. Пример кода:

from django.db import models
from django.util.translation import ugettext_lazy as _
from datetime import date


class StockAsset(models.Model):
    symbol = models.CharField(max_length=5)
    amount = models.PositiveIntegerField()
    price = models.FloatField()

class PurchaseHistory(models.Model):
    BUY = 1
    SELL = 2
    ACTION_CHOICES = (
        (BUY, _('buy')),
        (SELL, _('sell')),
    )
    action = models.PositiveIntegerField(choices=ACTION_CHOICES)
    action_date = models.DateTimeField(auto_now_add=True)
    stock = models.ForeignKey(StockAsset,
        on_delete=models.CASCADE, related_name='purchases'
    )

class PriceHistory(models.Model):
    stock = models.ForeignKey(StockAsset, on_delete=models.CASCADE, related_name='price_history')
    price_date = models.DateField(default=date.today)

Таким образом, вы можете получить доступ ко всем из модели StockAsset. Начните , читая здесь .

Для этого тип базы данных для выбора не очень важен. Если у вас нет предпочтений, используйте PostgreSQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...