Пример #1
0
    def test_investment_shock(self):
        parameterDefs = simulator.define_parameters()
        eParams = Parameters(parameterDefs)
        econ1 = Economy(self.simInfo, "Economy1", eParams)
        eParams = Parameters(parameterDefs)
        econ2 = Economy(self.simInfo, "Economy2", eParams)
        inv = []
        for i in range(10):
            inv.append(econ1.create_investment())
            inv.append(econ2.create_investment())

        econ1.params.set('investmentShockFactor', .5)
        econ1.params.set('investmentShockProportion', .8)
        self.simInfo.updateCount = 2
        victims = econ1.do_investment_shock()
        eq_(len(victims), 8, "expected 8 investments to be affected but got %r" % len(victims))
        for victim in victims:
            eq_(victim.currentPrice, 0.5,
                "expected price of %s to be .5 but got %f" % (victim.id_, victim.currentPrice))
        econ2.params.set('investmentShockFactor', .25)
        econ2.params.set('investmentShockProportion', .1)
        victims = econ2.do_investment_shock()
        eq_(len(victims), 1, "expected 1 investments to be affected but got %r" % len(victims))
        for victim in victims:
            eq_(victim.currentPrice, 0.75,
                "expected price of %s to be .75 but got %f" % (victim.id_, victim.currentPrice))
Пример #2
0
def setup_banks1():
    simInfo = SimulationInfo()
    parameterDefs = simulator.define_parameters()
    eParams = Parameters(parameterDefs)

    banks = []
    econ = Economy(simInfo, "Economy1", eParams)

    for i in range(5):
        params = Parameters(parameterDefs, econ.params)
        banks.append(Bank(simInfo, "bank%s" % i, econ, params))

    econ.params.set('fireSaleFactor', 0.0)
    inv1 = econ.create_investment()
    inv2 = econ.create_investment()
    inv3 = econ.create_investment()
    inv1.buy(50, banks[0])
    inv2.buy(10, banks[1])
    inv2.buy(20, banks[2])
    inv2.buy(40, banks[4])
    inv3.buy(10, banks[1])
    inv3.buy(20, banks[2])
    inv3.buy(30, banks[3])
    inv3.buy(40, banks[4])
    # total investments: 0 50, 1 20, 2 40, 3 30, 4 80
    banks[0].add_loan(banks[1], amount=1)
    banks[0].add_loan(banks[2], amount=2)
    banks[0].add_loan(banks[3], amount=3)
    banks[0].add_loan(banks[4], amount=4)
    banks[1].add_loan(banks[0], amount=10)
    banks[2].add_loan(banks[0], amount=20)
    banks[3].add_loan(banks[0], amount=30)
    banks[4].add_loan(banks[0], amount=40)
    # lending:   0  10, 1 10, 2 20, 3 30, 4 40
    # borrowing: 0 100, 1  1, 2  2, 3  3, 4  4
    # matrix:  0   1   2   3   4
    #         10   0   0   0   0
    #         20   0   0   0   0
    #         30   0   0   0   0
    #         40   0   0   0   0
    banks[0].deposits = 10
    banks[1].deposits = 20
    banks[2].deposits = 30
    banks[3].deposits = 40
    banks[4].deposits = 50
    # liabilities: 0 110, 1 21, 2 32, 3 43, 4 54
    banks[0].cash = 50
    banks[1].cash = 20
    banks[2].cash = 15
    banks[3].cash = 10
    banks[4].cash = 5
    # assets:  0 110, 1 50, 2 75, 3 70, 4 125
    # capital: 0   0, 1 29, 2 43, 3 27, 4  71
    return banks, econ, simInfo
Пример #3
0
    def setup(self):
        self.simInfo = SimulationInfo()

        self.simInfo.runDesc = "testTest"
        self.simInfo.tString = "timeString000"

        self.parameterDefs = simulator.define_parameters()
        xmlString = ("<parameters name='test1'>" +
                     "<simulator>" +
                     "<parameter name='assetSalesFactor' value='1.0' />" +
                     "<parameter name='randomSeed' value='12343' />" +
                     "<parameter name='balanceSheetMethod' value='assets' />" +
                     "</simulator>" +
                     "<economy name='econ1'>" +
                     "<parameter name='fireSaleFactor' value='0.0' />" +
                     "<parameter name='investmentCount' value='5' />" +
                     "<parameter name='financialAssetRatio' value='0.3' />" +
                     "<parameter name='capitalRatio' value='.15' />" +
                     "<parameter name='financialLiabilityRatio' value='.7' />" +
                     "</economy>" +
                     "<economy name='econ2'>" +
                     "<parameter name='fireSaleFactor' value='0.5' />" +
                     "<parameter name='investmentCount' value='10' />" +
                     "<parameter name='cashRatio' value='.15' />" +
                     "<parameter name='financialAssetRatio' value='0.4' />" +
                     "<parameter name='capitalRatio' value='0.2' />" +
                     "<parameter name='financialLiabilityRatio' value='.7' />" +
                     "</economy>" +
                     "<bank name='bank1' economy='econ1'>" +
                     "<parameter name='loanSize' value='10' />" +
                     "<parameter name='loanSD' value='2' />" +
                     "<parameter name='cashRatio' value='.1' />" +
                     "</bank>" +
                     "<bank name='bank2' economy='econ2'>" +
                     "<parameter name='loanSize' value='20' />" +
                     "<parameter name='loanSD' value='2' />" +
                     "<parameter name='financialLiabilityRatio' value='.2' />" +
                     "</bank>" +
                     "<bank name='bank3' economy='econ2'>" +
                     "<parameter name='loanSize' value='30' />" +
                     "<parameter name='loanSD' value='3' />" +
                     "<parameter name='financialAssetRatio' value='0.25' />" +
                     "<parameter name='capitalRatio' value='.125' />" +
                     "</bank>" +
                     "</parameters>")
        self.xmlRoot = ET.fromstring(xmlString)
        self.pList = read_params_from_xml(self.xmlRoot, "fName")
        self.simInfo.basicGraph = nx.DiGraph()
        self.simInfo.basicGraph.add_edges_from([('bank1', 'bank2'), ('bank2', 'bank1'),
                                             ('bank2', 'bank3'), ('bank3', 'bank1')])
        simulator.do_simulator_parameters(self.simInfo, self.pList, self.parameterDefs)
Пример #4
0
    def setUp(self):
        self.simInfo = SimulationInfo()
        parameterDefs = simulator.define_parameters()
        eParams = Parameters(parameterDefs)
        self.simInfo.theParameters = eParams
        self.econ = Economy(self.simInfo, "Economy1", eParams)
        self.banks = []
        self.investments = []
        for i in range(5):
            params = Parameters(parameterDefs, self.econ.params)
            self.banks.append(Bank(self.simInfo, "bank%s" % i, self.econ, params))
            self.investments.append(self.econ.create_investment())

        random.seed(1234)
Пример #5
0
    def test_investments_buy2(self):
        parameterDefs = simulator.define_parameters()
        eParams = Parameters(parameterDefs)
        econ = Economy(self.simInfo, "Economy1", eParams)
        newI = econ.create_investment()
        econ.params.set('fireSaleFactor', 0.0)

        self.simInfo.updateCount = 1
        newI.set_price(2)
        q, v = newI.buy(3, "buyer1")
        eq_(q, 3, "expected quantity 3 but got %r (1)" % q)
        eq_(v, 6, "expected consideration 6 but got %r (1)" % v)
        check_asset_network(self.simInfo, nodes=2, edges=1, tag="buy3")
        check_asset_holding(newI, "buyer1", quantity=3, value=6, tag="buy3")
        check_asset_totals(self.simInfo, newI, 3, 2, tag="buy3")

        self.simInfo.updateCount = 2
        q, v = newI.buy(4, "buyer2")
        eq_(q, 4, "expected quantity 4 but got %r (2)" % q)
        eq_(v, 8, "expected consideration 8 but got %r (2)" % v)
        check_asset_network(self.simInfo, nodes=3, edges=2, tag="buy4")
        check_asset_holding(newI, "buyer1", quantity=3, value=6, tag="buy4")
        check_asset_holding(newI, "buyer2", quantity=4, value=8, tag="buy4")
        check_asset_totals(self.simInfo, newI, 7, 2, tag="buy4")

        self.simInfo.updateCount = 3
        q, v = newI.buy(2, "buyer3")
        eq_(q, 2, "expected quantity 2 but got %r (3)" % q)
        eq_(v, 4, "expected consideration 4 but got %r (3)" % v)
        check_asset_network(self.simInfo, nodes=4, edges=3, tag="buy5")
        check_asset_holding(newI, "buyer1", quantity=3, value=6, tag="buy5")
        check_asset_holding(newI, "buyer2", quantity=4, value=8, tag="buy5")
        check_asset_holding(newI, "buyer3", quantity=2, value=4, tag="buy5")
        check_asset_totals(self.simInfo, newI, 9, 2, tag="buy3")

        self.simInfo.updateCount = 4
        q, v = newI.sell(5, "buyer2")
        eq_(q, 4, "expected quantity 4 but got %r (4)" % q)
        eq_(v, 8, "expected consideration 8 but got %r (4)" % v)
        check_asset_network(self.simInfo, nodes=4, edges=2, tag="buy5")
        check_asset_holding(newI, "buyer1", quantity=3, value=6, tag="buy5")
        check_asset_holding(newI, "buyer2", quantity=0, value=0, tag="buy5")
        check_asset_holding(newI, "buyer3", quantity=2, value=4, tag="buy5")
        check_asset_totals(self.simInfo, newI, 5, 2, tag="buy3")
Пример #6
0
    def test_firesale(self):
        parameterDefs = simulator.define_parameters()
        eParams = Parameters(parameterDefs)
        simInfo = SimulationInfo()

        econ = Economy(simInfo, "Economy1", eParams)
        inv = []
        holders = []
        for i in range(5):
            inv.append(econ.create_investment())
            holders.append("holder%s" % i)
        econ.params.set('fireSaleFactor', 1.0)  # price is affected by sales
        simInfo.updateCount = 1
        for i in range(5):
            inv[0].buy(5, holders[i])
            inv[1].buy(5, holders[i])

        # one holder sells a bit of the investment
        simInfo.updateCount = 2
        q, v = inv[0].sell(1, holders[0])
        assert v < 1, "expected consideration < 1 but is %f" % v
        eq_(v, inv[0].currentPrice,
            "expected consideration equal to price but they are %f, %f" % (v, inv[0].currentPrice))
        check_asset_holding(inv[0], holders[0], quantity=4, value=4 * v, tag="fs1")
        check_asset_holding(inv[0], holders[1], quantity=5, value=5 * v, tag="fs1")
        price1 = inv[0].currentPrice

        simInfo.updateCount = 3
        q, v = inv[0].sell(3, holders[2])  # a total of 4 has now been sold
        price2 = inv[0].currentPrice
        assert price2 < price1, "expected price < %f but is %f (fs2)" % (price1, price2)
        assert approx_equal(v, price2 * q, 0.00001), "expected consideration %f but is %f (fs2)" % (price2 * q, v)

        simInfo.updateCount = 4
        inv[1].sell(4, holders[3])  # sell 4, so price should be same as inv0
        price3 = inv[1].currentPrice
        assert approx_equal(price2, price3, 0.00001), "expected price to be %f but is %f (fs3)" % (price2, price3)

        pHistory = inv[1].priceHistory
        when, price = pHistory[-1]
        eq_(4, when, "expected last item in price history to be at time 4 but got %r" % when)
        eq_(price3, price, "expected last item in price history to be price %f but got %f" % (price3, price))
Пример #7
0
    def test_investments_buy1(self):
        parameterDefs = simulator.define_parameters()
        eParams = Parameters(parameterDefs)
        econ = Economy(self.simInfo, "Economy1", eParams)
        newI = econ.create_investment()

        hLen = len(newI.priceHistory)
        self.simInfo.updateCount = 1
        newI.set_price(1.0)
        hLen1 = len(newI.priceHistory)
        eq_(hLen + 1, hLen1, "expected %r items in price history but got %r" % (hLen + 1, hLen1))
        when, price = newI.priceHistory[hLen1 - 1]
        eq_(1, when, "expected last item in price history to be at time 0 but was %r" % when)
        eq_(1.0, price, "expected last price in price history to be 1.0 but was %r" % price)

        self.simInfo.updateCount = 2
        q, v = newI.buy(1, "buyer1")
        eq_(q, 1, "expected quantity 1 but got %r (1)" % q)
        eq_(v, 1, "expected consideration 1 but got %r (1)" % v)
        check_asset_network(self.simInfo, nodes=2, edges=1, tag="buy1")
        check_asset_holding(newI, "buyer1", 1, 1.0, tag="buy1")
        check_asset_totals(self.simInfo, newI, 1, 1.0, "buy1")
        hHistory = newI.holdingHistory["buyer1"]
        eq_(1, len(hHistory), "expected 1 item in holding history but got %r" % len(hHistory))
        when, amount = hHistory[-1]
        eq_(2, when, "expected last item in holding history to be at time 1 but got %r" % when)
        eq_(1, amount, "expected last item in holding history to be amount 1 but got %r" % amount)

        self.simInfo.updateCount = 3
        newI.set_price(2.0)
        q, v = newI.buy(3, "buyer1")
        eq_(q, 3, "expected quantity 3 but got %r (2)" % q)
        eq_(v, 6, "expected consideration 6 but got %r (2)" % v)
        check_asset_network(self.simInfo, nodes=2, edges=1, tag="buy1")
        check_asset_holding(newI, "buyer1", 4, 8.0, tag="buy2")
        check_asset_totals(self.simInfo, newI, 4, 2.0, tag="buy2")

        eq_(newI.value("buyer2"), 0, "expected buyer2 value to be 0 but is %r" % newI.value("buyer2"))
        eq_(newI.quantity("buyer2"), 0, "expected buyer2 quantity to be 0 but is %r" % newI.quantity("buyer2"))

        # now sell some
        self.simInfo.updateCount = 4
        newI.set_price(5.0)
        econ.params.set('fireSaleFactor', 0.0)  # selling has no effect on price
        q, v = newI.sell(3, "buyer1")
        eq_(q, 3, "expected quantity 3 but got %r (4)" % q)
        eq_(v, 15, "expected consideration 15 but got %r (4)" % v)
        check_asset_network(self.simInfo, nodes=2, edges=1, tag="sell1")
        check_asset_holding(newI, "buyer1", 1, 5.0, "sell1")
        check_asset_totals(self.simInfo, newI, 1, 5.0, "sell1")

        self.simInfo.updateCount = 5
        q, v = newI.sell(1, "buyer2")
        eq_(q, 0, "expected quantity 0 but got %r" % q)
        eq_(v, 0, "expected consideration 0 but got %r" % v)
        check_asset_network(self.simInfo, nodes=2, edges=1, tag="sell2")
        check_asset_holding(newI, "buyer1", 1, 5.0, "sell2")
        check_asset_totals(self.simInfo, newI, 1, 5.0, "sell2")

        self.simInfo.updateCount = 6
        q, v = newI.sell(-6, "buyer1")
        eq_(q, 0, "expected quantity 0 but got %r (4.5)" % q)
        eq_(v, 0, "expected consideration 0 but got %r (4.5)" % v)
        check_asset_network(self.simInfo, nodes=2, edges=1, tag="sell3")
        check_asset_holding(newI, "buyer1", 1, 5.0, "sell3")
        check_asset_totals(self.simInfo, newI, 1, 5.0, "sell3")

        pHistory = newI.priceHistory
        when, price = pHistory[-1]
        eq_(4, when, "expected last item in price history to be at time 4 but got %r" % when)
        eq_(5.0, price, "expected last item in price history to be price 5 but got %r" % price)

        self.simInfo.updateCount = 7
        newI.set_price(3)
        q, v = newI.sell(5, "buyer1")
        eq_(q, 1, "expected quantity 1 but got %r (5)" % q)
        eq_(v, 3, "expected consideration 3 but got %r (5)" % v)
        check_asset_network(self.simInfo, nodes=2, edges=0, tag="sell4")
        check_asset_holding(newI, "buyer1", 0, 0, "sell4")
        check_asset_totals(self.simInfo, newI, 0, 3, "sell4")

        self.simInfo.updateCount = 8
        q, v = newI.buy(-6, "buyer1")
        eq_(q, 0, "expected quantity 0 but got %r (6)" % q)
        eq_(v, 0, "expected consideration 0 but got %r (6)" % v)

        hHistory = newI.holdingHistory["buyer1"]
        when, amount = hHistory[-1]
        eq_(7, when, "expected last item in holding history to be at time 7 but got %r" % when)
        eq_(0.0, amount, "expected last item in holding history to be amount 0 but got %r" % amount)

        pHistory = newI.priceHistory
        when, price = pHistory[-1]
        eq_(7, when, "expected last item in price history to be at time 7 but got %r" % when)
        eq_(3.0, price, "expected last item in price history to be price 3 but got %r" % price)