| | 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) |
| |
|