Exemplo n.º 1
0
    def withdrawals(self): 
        # we start out with the default withdrawal rate.
        # n.b. that this is the ONLY time it is used. Every other
        # time we will use a tilt because we will either be above or
        # below this value
        withdrawal = self.portfolio.value * self.rate
        actual_withdrawal = self.harvest.send(withdrawal)
        change = yield report(self.portfolio, actual_withdrawal, None)
        assert isinstance(change, AnnualChange)

        while True:
            previous_portfolio_amount = self.portfolio.value
            self.portfolio.adjust_returns(change)
            gains = (self.portfolio.value - previous_portfolio_amount) / previous_portfolio_amount

            self.cumulative_inflation *= (1 + change.inflation)

            # Figure out which tilt we used based on the current (inflation-adjusted)
            # portfolio value
            if (self.portfolio.value / self.cumulative_inflation) < self.starting_portfolio_value:
                withdrawal = self.portfolio.value * (self.rate - self.tilt)
            else:
                withdrawal = self.portfolio.value * (self.rate + self.tilt)

            actual_withdrawal = self.harvest.send(withdrawal)
            
            change = yield report(self.portfolio, actual_withdrawal, gains)
            assert isinstance(change, AnnualChange)
Exemplo n.º 2
0
    def withdrawals(self):
        withdrawal = self.portfolio.value * self.rate
        actual_withdrawal = self.harvest.send(withdrawal)
        change = yield report(self.portfolio, actual_withdrawal, None)
        assert isinstance(change, AnnualChange)

        while True:
            previous_portfolio_amount = self.portfolio.value
            self.portfolio.adjust_returns(change)
            gains = (self.portfolio.value - previous_portfolio_amount) / previous_portfolio_amount

            withdrawal = self.portfolio.value * self.rate
            actual_withdrawal = self.harvest.send(withdrawal)
            change = yield report(self.portfolio, actual_withdrawal, gains)
            assert isinstance(change, AnnualChange)
Exemplo n.º 3
0
    def withdrawals(self):
        em = EM.calc_withdrawal(self.portfolio.value, self.years_left)
        withdrawal = em.send(None)
        actual_withdrawal = self.harvest.send(withdrawal)

        change = yield report(self.portfolio, actual_withdrawal, None)
        assert isinstance(change, AnnualChange)

        while True:
            (gains, _, _) = self.portfolio.adjust_returns(change)
            self.cumulative_inflation *= (1 + change.inflation)

            withdrawal = em.send((self.portfolio.value, change.inflation))
            actual_withdrawal = self.harvest.send(withdrawal)
            change = yield report(self.portfolio, actual_withdrawal, gains)
            assert isinstance(change, AnnualChange)
Exemplo n.º 4
0
    def withdrawals(self):
        index = 0
        withdrawal = VPW.calc_withdrawal(self.portfolio.value, index)
        actual_withdrawal = self.harvest.send(withdrawal)

        change = yield report(self.portfolio, actual_withdrawal, None)
        assert isinstance(change, AnnualChange)

        index += 1

        while True:
            (gains, _, _) = self.portfolio.adjust_returns(change)

            withdrawal = vpw_rates[index] * self.portfolio.value
            actual_withdrawal = self.harvest.send(withdrawal)

            change = yield report(self.portfolio, actual_withdrawal, gains)
            assert isinstance(change, AnnualChange)

            index += 1
Exemplo n.º 5
0
    def withdrawals(self):
        withdrawal = self.start()

        actual_withdrawal = self.harvest.send(withdrawal)
        change = yield report(self.portfolio, actual_withdrawal, None)
        assert isinstance(change, AnnualChange)

        while True:
            # Update the world.
            self.current_inflation = change.inflation
            self.cumulative_inflation *= (1 + change.inflation)
            previous_portfolio_amount = self.portfolio.value
            (gains, _, _) = self.portfolio.adjust_returns(change)

            # Now we can make our next withdrawal.
            withdrawal = self.next()

            actual_withdrawal = self.harvest.send(withdrawal)
            change = yield report(self.portfolio, actual_withdrawal, gains)
            assert isinstance(change, AnnualChange)