def setUp(self): TestUnitSetUpStage.setUp(self) self.buy_order = create_filled_order( trade_summary=self.trade_summary, underlying=self.underlying, spread='BACKRATIO', contract='PUT', side='BUY', quantity=1, strike=125, price=6.15, net_price=-1.75 ) self.sell_order = create_filled_order( trade_summary=self.trade_summary, underlying=self.underlying, spread='BACKRATIO', contract='PUT', side='SELL', quantity=-2, strike=120, price=3.95, net_price=0.0 ) self.contract_right = 100 filled_orders = FilledOrder.objects.filter(underlying=self.underlying) self.short_put_backratio = StageShortPutBackratio( filled_orders=filled_orders, contract_right=self.contract_right )
class TestStageShortPutBackratio1(TestUnitSetUpStage): def setUp(self): TestUnitSetUpStage.setUp(self) self.buy_order = create_filled_order( trade_summary=self.trade_summary, underlying=self.underlying, spread='BACKRATIO', contract='PUT', side='BUY', quantity=1, strike=125, price=6.15, net_price=-1.75 ) self.sell_order = create_filled_order( trade_summary=self.trade_summary, underlying=self.underlying, spread='BACKRATIO', contract='PUT', side='SELL', quantity=-2, strike=120, price=3.95, net_price=0.0 ) self.contract_right = 100 filled_orders = FilledOrder.objects.filter(underlying=self.underlying) self.short_put_backratio = StageShortPutBackratio( filled_orders=filled_orders, contract_right=self.contract_right ) def test_create_even_stage1(self): """ Create even stage using filled orders data """ even_stage = self.short_put_backratio.create_even_stage1() self.method_test_create_stage( stage=even_stage, name='EVEN', expression='{price_a} == {current_price}', detail={ 'price_a': 113.25, 'amount_a': 0.0, 'price_b': 0.0, 'amount_b': 0.0, 'left_status': '', 'left_expression': '', 'right_status': '', 'right_expression': '', } ) self.check_in_stage(stage_cls=even_stage, price=113.25, expect=True) self.check_in_stage(stage_cls=even_stage, price=114, expect=False) print '\n' + ':' * 80 + '\n' self.check_get_status( stage_cls=even_stage, new_price=113.25, old_price=113.25, expect='UNKNOWN' ) def test_create_max_profit_stage1(self): """ Create loss stage using filled orders data """ max_profit_stage = self.short_put_backratio.create_max_profit_stage1() self.method_test_create_stage( stage=max_profit_stage, name='MAX_PROFIT', expression='{price_a} == {current_price}', detail={ 'price_a': 120.0, 'amount_a': 675.0, 'price_b': 0, 'amount_b': 0, 'left_status': '', 'left_expression': '', 'right_status': '', 'right_expression': '', } ) self.check_in_stage(stage_cls=max_profit_stage, price=120, expect=True) self.check_in_stage(stage_cls=max_profit_stage, price=122, expect=False) print '\n' + ':' * 80 + '\n' self.check_get_status(max_profit_stage, new_price=120, old_price=120, expect='UNKNOWN') def test_create_loss_stage1(self): """ Create profit stage using filled orders data """ loss_stage = self.short_put_backratio.create_loss_stage1() self.method_test_create_stage( stage=loss_stage, name='LOSS', expression='{current_price} < {price_a}', detail={ 'price_a': 113.25, 'amount_a': 0.0, 'price_b': 0, 'amount_b': 0, 'left_status': 'RECOVERING', 'left_expression': '{old_price} < {new_price} < {price_a}', 'right_status': 'LOSING', 'right_expression': '{new_price} < {old_price} < {price_a}', } ) self.check_in_stage(stage_cls=loss_stage, price=112, expect=True) self.check_in_stage(stage_cls=loss_stage, price=116, expect=False) print '\n' + ':' * 80 + '\n' self.check_get_status(loss_stage, new_price=112, old_price=111, expect='RECOVERING') self.check_get_status(loss_stage, new_price=109, old_price=110, expect='LOSING') self.check_get_status(loss_stage, new_price=112, old_price=112, expect='UNKNOWN') def test_create_profit_stage1(self): """ Create profit stage using filled orders data """ profit_stage = self.short_put_backratio.create_profit_stage1() self.method_test_create_stage( stage=profit_stage, name='PROFIT', expression='{price_a} < {current_price} < {price_b}', detail={ 'price_a': 113.25, 'amount_a': 0.0, 'price_b': 120.00, 'amount_b': 675.0, 'left_status': 'DECREASING', 'left_expression': '{price_a} < {new_price} < {old_price} < {price_b}', 'right_status': 'PROFITING', 'right_expression': '{price_a} < {old_price} < {new_price} < {price_b}', } ) self.check_in_stage(stage_cls=profit_stage, price=115, expect=True) self.check_in_stage(stage_cls=profit_stage, price=111, expect=False) print '\n' + ':' * 80 + '\n' self.check_get_status(profit_stage, new_price=116, old_price=117, expect='DECREASING') self.check_get_status(profit_stage, new_price=118, old_price=116, expect='PROFITING') self.check_get_status(profit_stage, new_price=116, old_price=116, expect='UNKNOWN') def test_create_profiting_stage2(self): """ Create loss stage using filled orders data """ profit_stage = self.short_put_backratio.create_profit_stage2() self.method_test_create_stage( stage=profit_stage, name='PROFIT', expression='{price_a} < {current_price} < {price_b}', detail={ 'price_a': 120.00, 'amount_a': 675.0, 'price_b': 125.0, 'amount_b': 175.0, 'left_status': 'DECREASING', 'left_expression': '{price_a} < {old_price} < {new_price} < {price_b}', 'right_status': 'PROFITING', 'right_expression': '{price_a} < {new_price} < {old_price} < {price_b}', } ) self.check_in_stage(stage_cls=profit_stage, price=122, expect=True) self.check_in_stage(stage_cls=profit_stage, price=118, expect=False) print '\n' + ':' * 80 + '\n' self.check_get_status(profit_stage, new_price=123, old_price=122, expect='DECREASING') self.check_get_status(profit_stage, new_price=123, old_price=124, expect='PROFITING') self.check_get_status(profit_stage, new_price=123, old_price=123, expect='UNKNOWN') def test_create_max_profit_stage2(self): """ Create loss stage using filled orders data """ max_profit_stage = self.short_put_backratio.create_max_profit_stage2() self.method_test_create_stage( stage=max_profit_stage, name='MAX_PROFIT', expression='{price_a} <= {current_price}', detail={ 'price_a': 125.0, 'amount_a': 175.0, 'price_b': 0.0, 'amount_b': 0.0, 'left_status': 'VANISHING', 'left_expression': '{price_a} <= {new_price} < {old_price}', 'right_status': 'GUARANTEEING', 'right_expression': '{price_a} <= {old_price} < {new_price}', } ) self.check_in_stage(stage_cls=max_profit_stage, price=126, expect=True) self.check_in_stage(stage_cls=max_profit_stage, price=124, expect=False) print '\n' + ':' * 80 + '\n' self.check_get_status(max_profit_stage, new_price=127, old_price=127, expect='UNKNOWN') def test_create_stages(self): """ Test create stages using filled orders """ print 'run create_stages...' stages = self.short_put_backratio.create_stages() self.assertEqual(type(stages), list) for stage in stages: print stage self.assertEqual(type(stage), PositionStage)