Balance Sheet Example

Code

from sfctools import Agent, BalanceSheet, BalanceEntry
import numpy as np

class MyAgent(Agent):
    """
    An example agent
    """
    def __init__(self):
        super().__init__()

        self.change_equity(20.0,"Asset1")
        self.change_equity(10.0,"Asset2")
        self.change_debt(18.0)

    def change_equity(self,q,which): # increase or decrease equity by q / -q
        with self.balance_sheet.modify:
            self.balance_sheet.change_item(which,BalanceEntry.ASSETS,q)
            self.balance_sheet.change_item("Equity",BalanceEntry.EQUITY,q)

    def change_debt(self,q): # increase or decrease debt by q / -q
        with self.balance_sheet.modify:
            self.balance_sheet.change_item("Debt",BalanceEntry.LIABILITIES,q)
            self.balance_sheet.change_item("Asset2",BalanceEntry.ASSETS,q)

    def swap_assets(self,q): # swap between assets
        try:
            with self.balance_sheet.modify:
                self.balance_sheet.change_item("Asset2",BalanceEntry.ASSETS,-q)
                self.balance_sheet.change_item("Asset1",BalanceEntry.ASSETS,q)
        except:
            pass

    def update(self):

        q1 = 0.5*(np.random.rand())
        q2 = 0.5*(np.random.rand())
        q3 = .4*np.random.rand()

        self.change_equity(q1,"Asset1")
        self.change_debt(q1)
        self.swap_assets(q3)


my_agent = MyAgent() # create an agent

my_balances = [] # allocate empty list

for i in range(80): # iterate simulation
    my_agent.update()
    my_balances.append(my_agent.balance_sheet.raw_data) # append balance sheet data to list


# plot balance sheet evolution
BalanceSheet.plot_list(my_balances, dt=5, xlabel="Time", title="My Agent", show_liabilities=True)

Output

alternate text