'Fail if the given order would cause the magnitude of our position to be
greater in shares than self.max_shares or greater in dollar value than
self.max_notional.'

def validate(self, asset, amount, portfolio, algo_datetime, algo_current_data):

    if ((self.asset is not None) and (self.asset != asset)):
        return
    current_share_count = portfolio.positions[asset].amount
    shares_post_order = (current_share_count + amount)
    too_many_shares = ((self.max_shares is not None) and (abs(shares_post_order) > self.max_shares))
    if too_many_shares:
        self.handle_violation(asset, amount, algo_datetime)
    current_price = algo_current_data.current(asset, 'price')
    value_post_order = (shares_post_order * current_price)
    too_much_value = ((self.max_notional is not None) and (abs(value_post_order) > self.max_notional))
    if too_much_value:
        self.handle_violation(asset, amount, algo_datetime)
