thaifin.stock API documentation

# thaifin.stock

View Source

    import arrow
    import pandas as pd
    from fuzzywuzzy import process

    from thaifin.sources.finnomena import get_financial_sheet
    from thaifin.sources.finnomena import get_stock_list

    class Stock:
        @classmethod
        def search(cls, company_name: str, limit: int = 5):
            list_ = get_stock_list().data
            search_against = {x.thName + x.enName: x for x in list_}
            search_result = process.extract(company_name, search_against, limit=limit)
            return [cls(s[0].name) for s in search_result]

        @staticmethod
        def list_symbol():
            list_ = get_stock_list().data
            return [s.name for s in list_]

        @staticmethod
        def find_symbol(symbol: str):
            list_ = get_stock_list().data
            return next(obj for obj in list_ if obj.name == symbol)

        def __init__(self, symbol: str):
            symbol = symbol.upper()
            self.info = self.find_symbol(symbol)
            self.fundamental = get_financial_sheet(self.info.security_id).data
            self.updated = arrow.utcnow()
            # self.

        @property
        def symbol(self):
            return self.info.name

        @property
        def company_name(self):
            return self.info.enName

        @property
        def thai_company_name(self):
            return self.info.thName

        @property
        def quarter_dataframe(self):
            df = pd.DataFrame([s.dict(exclude={"SecurityID"}) for s in self.fundamental])
            # Quarter 9 means yearly values
            df = df[df.Quarter != 9]
            df["Time"] = df.Fiscal.astype(str) + "Q" + df.Quarter.astype(str)
            df = df.set_index("Time")
            df.index = pd.to_datetime(df.index).to_period("Q")
            df = df.drop(columns=["Fiscal", "Quarter"])
            return df

        @property
        def yearly_dataframe(self):
            df = pd.DataFrame([s.dict(exclude={"SecurityID"}) for s in self.fundamental])
            # Quarter 9 means yearly values
            df = df[df.Quarter == 9]
            df = df.set_index("Fiscal")
            df.index = pd.to_datetime(df.index, format="%Y").to_period("Y")
            df = df.drop(columns=["Quarter"])
            return df

        def __repr__(self):
            return f'<Stock "{self.symbol}" - updated {self.updated.humanize()}>'

class Stock:
View Source

    class Stock:
        @classmethod
        def search(cls, company_name: str, limit: int = 5):
            list_ = get_stock_list().data
            search_against = {x.thName + x.enName: x for x in list_}
            search_result = process.extract(company_name, search_against, limit=limit)
            return [cls(s[0].name) for s in search_result]

        @staticmethod
        def list_symbol():
            list_ = get_stock_list().data
            return [s.name for s in list_]

        @staticmethod
        def find_symbol(symbol: str):
            list_ = get_stock_list().data
            return next(obj for obj in list_ if obj.name == symbol)

        def __init__(self, symbol: str):
            symbol = symbol.upper()
            self.info = self.find_symbol(symbol)
            self.fundamental = get_financial_sheet(self.info.security_id).data
            self.updated = arrow.utcnow()
            # self.

        @property
        def symbol(self):
            return self.info.name

        @property
        def company_name(self):
            return self.info.enName

        @property
        def thai_company_name(self):
            return self.info.thName

        @property
        def quarter_dataframe(self):
            df = pd.DataFrame([s.dict(exclude={"SecurityID"}) for s in self.fundamental])
            # Quarter 9 means yearly values
            df = df[df.Quarter != 9]
            df["Time"] = df.Fiscal.astype(str) + "Q" + df.Quarter.astype(str)
            df = df.set_index("Time")
            df.index = pd.to_datetime(df.index).to_period("Q")
            df = df.drop(columns=["Fiscal", "Quarter"])
            return df

        @property
        def yearly_dataframe(self):
            df = pd.DataFrame([s.dict(exclude={"SecurityID"}) for s in self.fundamental])
            # Quarter 9 means yearly values
            df = df[df.Quarter == 9]
            df = df.set_index("Fiscal")
            df.index = pd.to_datetime(df.index, format="%Y").to_period("Y")
            df = df.drop(columns=["Quarter"])
            return df

        def __repr__(self):
            return f'<Stock "{self.symbol}" - updated {self.updated.humanize()}>'

Stock(symbol: str)
View Source

        def __init__(self, symbol: str):
            symbol = symbol.upper()
            self.info = self.find_symbol(symbol)
            self.fundamental = get_financial_sheet(self.info.security_id).data
            self.updated = arrow.utcnow()

@classmethod
def search(cls, company_name: str, limit: int = 5):
View Source

        @classmethod
        def search(cls, company_name: str, limit: int = 5):
            list_ = get_stock_list().data
            search_against = {x.thName + x.enName: x for x in list_}
            search_result = process.extract(company_name, search_against, limit=limit)
            return [cls(s[0].name) for s in search_result]

@staticmethod
def list_symbol():
View Source

        @staticmethod
        def list_symbol():
            list_ = get_stock_list().data
            return [s.name for s in list_]

@staticmethod
def find_symbol(symbol: str):
View Source

        @staticmethod
        def find_symbol(symbol: str):
            list_ = get_stock_list().data
            return next(obj for obj in list_ if obj.name == symbol)

symbol
company_name
thai_company_name
quarter_dataframe
yearly_dataframe