Hello Andrew,
I'm mystified by the StopLimitOrder. Here's the output I got after modifying your algorithm:
2013-12-03PRINT15.4635
2013-12-03PRINTEvent({'status': 1, 'limit_reached': True, 'created': datetime.datetime(2013, 11, 21, 17, 50, tzinfo=), 'stop': None, 'reason': None, 'stop_reached': False, 'commission': 3.0, 'amount': 100, 'limit': 15.48, 'sid': Security(700, symbol='BAC', security_name='BANK OF AMERICA CORP', exchange='NEW YORK STOCK EXCHANGE', start_date=datetime.datetime(1993, 1, 4, 0, 0, tzinfo=), end_date=datetime.datetime(2014, 9, 22, 0, 0, tzinfo=), first_traded=None), 'id': 'a2c6b8a421c24a6cac370811fd93b82c', 'dt': datetime.datetime(2013, 12, 3, 18, 23, tzinfo=), 'filled': 100})
2014-01-02PRINT16.0025
2014-01-02PRINTEvent({'status': 1, 'limit_reached': True, 'created': datetime.datetime(2013, 11, 25, 14, 44, tzinfo=), 'stop': None, 'reason': None, 'stop_reached': False, 'commission': 3.0, 'amount': -100, 'limit': 16.0, 'sid': Security(700, symbol='BAC', security_name='BANK OF AMERICA CORP', exchange='NEW YORK STOCK EXCHANGE', start_date=datetime.datetime(1993, 1, 4, 0, 0, tzinfo=), end_date=datetime.datetime(2014, 9, 22, 0, 0, tzinfo=), first_traded=None), 'id': 'eb0bc78919cf4d159f0c4fffabbf3bfa', 'dt': datetime.datetime(2014, 1, 2, 16, 26, tzinfo=), 'filled': -100})
My confusion is that your buy order should have both a limit price and a stop price listed, but I only see the limit price of 15.48. It seems that your stop price of 15.52 should be listed, too.
Grant