示例#1
0
    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
        )
示例#2
0
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)