| import uuid |
| from django.db import models, connection |
|
|
|
|
| class BaseModel(models.Model): |
|
|
| id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) |
| created_at = models.DateTimeField(auto_now_add=True, null=True, blank=True) |
| updated_at = models.DateTimeField(auto_now=True, null=True, blank=True) |
|
|
| class Meta: |
| abstract = True |
|
|
|
|
| class MutualFund(BaseModel): |
| """ |
| This model will store the mutual fund data |
| """ |
|
|
| id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) |
| fund_name = models.CharField(max_length=200, unique=True) |
| isin_number = models.CharField(max_length=50, unique=True, null=True) |
| security_id = models.CharField(max_length=50, unique=True) |
| data = models.JSONField(null=True) |
| rank = models.IntegerField(unique=True, null=True) |
| crisil_rank = models.IntegerField(null=True) |
| aum = models.FloatField(null=True) |
| expense_ratio = models.FloatField(null=True, blank=True) |
| return_m12 = models.FloatField(null=True, blank=True) |
| nav = models.FloatField(null=True, blank=True) |
|
|
| @staticmethod |
| def execute_raw_sql_query(sql_query): |
| with connection.cursor() as cursor: |
| cursor.execute(sql_query) |
| columns = [col[0] for col in cursor.description] |
| results = [dict(zip(columns, row)) for row in cursor.fetchall()] |
|
|
| return results |
|
|
| @classmethod |
| def execute_query(cls, query): |
| try: |
| return cls.execute_raw_sql_query(query) |
| except Exception as e: |
| print("Error: ", repr(e)) |
| return [] |
|
|
| class Stock(BaseModel): |
| id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) |
| name = models.CharField(max_length=200) |
| ltp = models.CharField(max_length=50, null=True) |
| percentage_change = models.CharField(max_length=50, null=True) |
| price_change = models.CharField(max_length=50, null=True) |
| link = models.URLField(max_length=200, null=True) |
| volume = models.CharField(max_length=50, null=True) |
| data = models.JSONField(null=True) |
| isin_number = models.CharField(max_length=50, unique=True, null=True) |
| rank = models.IntegerField(unique=True, null=True) |
|
|
|
|
| class MFHoldings(models.Model): |
| id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) |
| isin_number = models.CharField(max_length=20, null=True, blank=True) |
| security_id = models.CharField(max_length=20, null=True, blank=True) |
| sector = models.CharField(max_length=50, null=True, blank=True) |
| country = models.CharField(max_length=50, null=True, blank=True) |
| currency = models.CharField(max_length=100, null=True, blank=True) |
| weighting = models.FloatField(null=True, blank=True) |
| sector_code = models.CharField(max_length=100, null=True, blank=True) |
| holding_type = models.CharField(max_length=100, null=True, blank=True) |
| market_value = models.FloatField(null=True, blank=True) |
| stock_rating = models.CharField(max_length=100, null=True, blank=True) |
| total_assets = models.FloatField(null=True, blank=True) |
| currency_name = models.CharField(max_length=150, null=True, blank=True) |
| holding_name = models.CharField(max_length=100, null=True, blank=True) |
| holding_type = models.CharField(max_length=100, null=True, blank=True) |
| holding_type_id = models.CharField(max_length=100, null=True, blank=True) |
| number_of_shares = models.FloatField(null=True, blank=True) |
| one_year_return = models.FloatField(null=True, blank=True) |
| mutual_fund = models.ForeignKey(MutualFund, on_delete=models.CASCADE) |
|
|
| def __str__(self): |
| return f"{self.ticker} - {self.securityName}" |
|
|
|
|
| class MFVolatility(models.Model): |
| VOLATILITY_CHOICES = ( |
| (1, "for1Year"), |
| (3, "for3Year"), |
| (5, "for5Year"), |
| (10, "for10Year"), |
| (15, "for15Year"), |
| ) |
| id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) |
| mutual_fund = models.ForeignKey(MutualFund, on_delete=models.CASCADE) |
| year = models.CharField(max_length=100, choices=VOLATILITY_CHOICES) |
| alpha = models.FloatField(null=True, blank=True) |
| beta = models.FloatField(null=True, blank=True) |
| sharpe_ratio = models.FloatField(null=True, blank=True) |
| standard_deviation = models.FloatField(null=True, blank=True) |
|
|