Exemplo n.º 1
0
    def setUp(self):
        TestUnitSetUpStage.setUp(self)

        self.call_order = create_filled_order(trade_summary=self.trade_summary,
                                              underlying=self.underlying,
                                              spread='COMBO',
                                              contract='CALL',
                                              side='BUY',
                                              quantity=1,
                                              strike=211,
                                              price=2.26,
                                              net_price=-0.46)

        self.put_order = create_filled_order(trade_summary=self.trade_summary,
                                             underlying=self.underlying,
                                             spread='COMBO',
                                             contract='PUT',
                                             side='SELL',
                                             quantity=-1,
                                             strike=204,
                                             price=2.72,
                                             net_price=0.0)

        self.contract_right = 100

        filled_orders = FilledOrder.objects.filter(underlying=self.underlying)

        self.long_combo = StageLongCombo(filled_orders=filled_orders,
                                         contract_right=self.contract_right)
Exemplo n.º 2
0
    def setUp(self):
        TestUnitSetUpStage.setUp(self)

        self.call_order = create_filled_order(
            trade_summary=self.trade_summary,
            underlying=self.underlying,
            spread="COMBO",
            contract="CALL",
            side="BUY",
            quantity=1,
            strike=211,
            price=2.26,
            net_price=-0.46,
        )

        self.put_order = create_filled_order(
            trade_summary=self.trade_summary,
            underlying=self.underlying,
            spread="COMBO",
            contract="PUT",
            side="SELL",
            quantity=-1,
            strike=204,
            price=2.72,
            net_price=0.0,
        )

        self.contract_right = 100

        filled_orders = FilledOrder.objects.filter(underlying=self.underlying)

        self.long_combo = StageLongCombo(filled_orders=filled_orders, contract_right=self.contract_right)
Exemplo n.º 3
0
class TestStageLongCombo1(TestUnitSetUpStage):
    def setUp(self):
        TestUnitSetUpStage.setUp(self)

        self.call_order = create_filled_order(trade_summary=self.trade_summary,
                                              underlying=self.underlying,
                                              spread='COMBO',
                                              contract='CALL',
                                              side='BUY',
                                              quantity=1,
                                              strike=211,
                                              price=2.26,
                                              net_price=-0.46)

        self.put_order = create_filled_order(trade_summary=self.trade_summary,
                                             underlying=self.underlying,
                                             spread='COMBO',
                                             contract='PUT',
                                             side='SELL',
                                             quantity=-1,
                                             strike=204,
                                             price=2.72,
                                             net_price=0.0)

        self.contract_right = 100

        filled_orders = FilledOrder.objects.filter(underlying=self.underlying)

        self.long_combo = StageLongCombo(filled_orders=filled_orders,
                                         contract_right=self.contract_right)

    def test_create_even_stage(self):
        """
        Create even stage using filled orders data
        """
        even_stage = self.long_combo.create_even_stage()

        self.method_test_create_stage(
            stage=even_stage,
            name='EVEN',
            expression='{price_a} == {current_price}',
            detail={
                'price_a': 203.54,
                '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=203.54, expect=True)
        self.check_in_stage(stage_cls=even_stage, price=204, expect=False)

        self.check_get_status(even_stage,
                              new_price=203.54,
                              old_price=203.54,
                              expect='UNKNOWN')

    def test_create_max_profit_stage(self):
        """
        Create max profit stage using filled orders data
        """
        max_profit_stage = self.long_combo.create_max_profit_stage()

        self.method_test_create_stage(
            stage=max_profit_stage,
            name='MAX_PROFIT',
            expression='{price_a} <= {current_price} <= {price_b}',
            detail={
                'price_a':
                204.0,
                'amount_a':
                46.0,
                'price_b':
                211.0,
                'amount_b':
                46.0,
                'left_status':
                'VANISHING',
                'left_expression':
                '{price_a} <= {new_price} < {old_price} <= {price_b}',
                'right_status':
                'GUARANTEEING',
                'right_expression':
                '{price_a} <= {old_price} < {new_price} <= {price_b}',
            })

        self.check_in_stage(stage_cls=max_profit_stage, price=207, expect=True)
        self.check_in_stage(stage_cls=max_profit_stage,
                            price=203,
                            expect=False)

        self.check_get_status(max_profit_stage,
                              new_price=204,
                              old_price=206,
                              expect='VANISHING')
        self.check_get_status(max_profit_stage,
                              new_price=208,
                              old_price=206,
                              expect='GUARANTEEING')
        self.check_get_status(max_profit_stage,
                              new_price=206,
                              old_price=206,
                              expect='UNKNOWN')

    def test_create_profit_stage1(self):
        """
        Create profit stage using filled orders data
        """
        profit_stage = self.long_combo.create_profit_stage1()

        self.method_test_create_stage(
            stage=profit_stage,
            name='PROFIT',
            expression='{price_a} < {current_price}',
            detail={
                'price_a': 211.0,
                'amount_a': 46.0,
                'price_b': 0.0,
                'amount_b': 0.0,
                'left_status': 'DECREASING',
                'left_expression': '{price_a} < {new_price} < {old_price}',
                'right_status': 'PROFITING',
                'right_expression': '{price_a} < {old_price} < {new_price}',
            })

        self.check_in_stage(stage_cls=profit_stage, price=212, expect=True)
        self.check_in_stage(stage_cls=profit_stage, price=210, expect=False)

        self.check_get_status(profit_stage,
                              new_price=212,
                              old_price=214,
                              expect='DECREASING')
        self.check_get_status(profit_stage,
                              new_price=216,
                              old_price=214,
                              expect='PROFITING')
        self.check_get_status(profit_stage,
                              new_price=215,
                              old_price=215,
                              expect='UNKNOWN')

    def test_create_profit_stage2(self):
        """
        Create profit stage using filled orders data
        """
        profit_stage = self.long_combo.create_profit_stage2()

        self.method_test_create_stage(
            stage=profit_stage,
            name='PROFIT',
            expression='{price_a} < {current_price} < {price_b}',
            detail={
                'price_a':
                203.54,
                'amount_a':
                0.0,
                'price_b':
                204.0,
                'amount_b':
                46.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=203.8, expect=True)
        self.check_in_stage(stage_cls=profit_stage, price=204.1, expect=False)

        self.check_get_status(profit_stage,
                              new_price=203.6,
                              old_price=203.8,
                              expect='DECREASING')
        self.check_get_status(profit_stage,
                              new_price=203.9,
                              old_price=203.7,
                              expect='PROFITING')
        self.check_get_status(profit_stage,
                              new_price=203.8,
                              old_price=203.8,
                              expect='UNKNOWN')

    def test_create_loss_stage2(self):
        """
        Create profit stage using filled orders data
        """
        loss_stage = self.long_combo.create_loss_stage2()

        self.method_test_create_stage(
            stage=loss_stage,
            name='LOSS',
            expression='{current_price} < {price_a}',
            detail={
                'price_a': 203.54,
                'amount_a': 0.0,
                'price_b': 0.0,
                'amount_b': 0.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=203, expect=True)
        self.check_in_stage(stage_cls=loss_stage, price=205, expect=False)

        self.check_get_status(loss_stage,
                              new_price=202,
                              old_price=201,
                              expect='RECOVERING')
        self.check_get_status(loss_stage,
                              new_price=201,
                              old_price=202,
                              expect='LOSING')
        self.check_get_status(loss_stage,
                              new_price=202,
                              old_price=202,
                              expect='UNKNOWN')

    def test_create_stages(self):
        """
        Test create stages using filled orders
        """
        print 'run create_stages...'
        stages = self.long_combo.create_stages()
        self.assertEqual(type(stages), list)

        for stage in stages:
            print stage
            self.assertEqual(type(stage), PositionStage)
Exemplo n.º 4
0
class TestStageLongCombo1(TestUnitSetUpStage):
    def setUp(self):
        TestUnitSetUpStage.setUp(self)

        self.call_order = create_filled_order(
            trade_summary=self.trade_summary,
            underlying=self.underlying,
            spread="COMBO",
            contract="CALL",
            side="BUY",
            quantity=1,
            strike=211,
            price=2.26,
            net_price=-0.46,
        )

        self.put_order = create_filled_order(
            trade_summary=self.trade_summary,
            underlying=self.underlying,
            spread="COMBO",
            contract="PUT",
            side="SELL",
            quantity=-1,
            strike=204,
            price=2.72,
            net_price=0.0,
        )

        self.contract_right = 100

        filled_orders = FilledOrder.objects.filter(underlying=self.underlying)

        self.long_combo = StageLongCombo(filled_orders=filled_orders, contract_right=self.contract_right)

    def test_create_even_stage(self):
        """
        Create even stage using filled orders data
        """
        even_stage = self.long_combo.create_even_stage()

        self.method_test_create_stage(
            stage=even_stage,
            name="EVEN",
            expression="{price_a} == {current_price}",
            detail={
                "price_a": 203.54,
                "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=203.54, expect=True)
        self.check_in_stage(stage_cls=even_stage, price=204, expect=False)

        self.check_get_status(even_stage, new_price=203.54, old_price=203.54, expect="UNKNOWN")

    def test_create_max_profit_stage(self):
        """
        Create max profit stage using filled orders data
        """
        max_profit_stage = self.long_combo.create_max_profit_stage()

        self.method_test_create_stage(
            stage=max_profit_stage,
            name="MAX_PROFIT",
            expression="{price_a} <= {current_price} <= {price_b}",
            detail={
                "price_a": 204.0,
                "amount_a": 46.0,
                "price_b": 211.0,
                "amount_b": 46.0,
                "left_status": "VANISHING",
                "left_expression": "{price_a} <= {new_price} < {old_price} <= {price_b}",
                "right_status": "GUARANTEEING",
                "right_expression": "{price_a} <= {old_price} < {new_price} <= {price_b}",
            },
        )

        self.check_in_stage(stage_cls=max_profit_stage, price=207, expect=True)
        self.check_in_stage(stage_cls=max_profit_stage, price=203, expect=False)

        self.check_get_status(max_profit_stage, new_price=204, old_price=206, expect="VANISHING")
        self.check_get_status(max_profit_stage, new_price=208, old_price=206, expect="GUARANTEEING")
        self.check_get_status(max_profit_stage, new_price=206, old_price=206, expect="UNKNOWN")

    def test_create_profit_stage1(self):
        """
        Create profit stage using filled orders data
        """
        profit_stage = self.long_combo.create_profit_stage1()

        self.method_test_create_stage(
            stage=profit_stage,
            name="PROFIT",
            expression="{price_a} < {current_price}",
            detail={
                "price_a": 211.0,
                "amount_a": 46.0,
                "price_b": 0.0,
                "amount_b": 0.0,
                "left_status": "DECREASING",
                "left_expression": "{price_a} < {new_price} < {old_price}",
                "right_status": "PROFITING",
                "right_expression": "{price_a} < {old_price} < {new_price}",
            },
        )

        self.check_in_stage(stage_cls=profit_stage, price=212, expect=True)
        self.check_in_stage(stage_cls=profit_stage, price=210, expect=False)

        self.check_get_status(profit_stage, new_price=212, old_price=214, expect="DECREASING")
        self.check_get_status(profit_stage, new_price=216, old_price=214, expect="PROFITING")
        self.check_get_status(profit_stage, new_price=215, old_price=215, expect="UNKNOWN")

    def test_create_profit_stage2(self):
        """
        Create profit stage using filled orders data
        """
        profit_stage = self.long_combo.create_profit_stage2()

        self.method_test_create_stage(
            stage=profit_stage,
            name="PROFIT",
            expression="{price_a} < {current_price} < {price_b}",
            detail={
                "price_a": 203.54,
                "amount_a": 0.0,
                "price_b": 204.0,
                "amount_b": 46.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=203.8, expect=True)
        self.check_in_stage(stage_cls=profit_stage, price=204.1, expect=False)

        self.check_get_status(profit_stage, new_price=203.6, old_price=203.8, expect="DECREASING")
        self.check_get_status(profit_stage, new_price=203.9, old_price=203.7, expect="PROFITING")
        self.check_get_status(profit_stage, new_price=203.8, old_price=203.8, expect="UNKNOWN")

    def test_create_loss_stage2(self):
        """
        Create profit stage using filled orders data
        """
        loss_stage = self.long_combo.create_loss_stage2()

        self.method_test_create_stage(
            stage=loss_stage,
            name="LOSS",
            expression="{current_price} < {price_a}",
            detail={
                "price_a": 203.54,
                "amount_a": 0.0,
                "price_b": 0.0,
                "amount_b": 0.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=203, expect=True)
        self.check_in_stage(stage_cls=loss_stage, price=205, expect=False)

        self.check_get_status(loss_stage, new_price=202, old_price=201, expect="RECOVERING")
        self.check_get_status(loss_stage, new_price=201, old_price=202, expect="LOSING")
        self.check_get_status(loss_stage, new_price=202, old_price=202, expect="UNKNOWN")

    def test_create_stages(self):
        """
        Test create stages using filled orders
        """
        print "run create_stages..."
        stages = self.long_combo.create_stages()
        self.assertEqual(type(stages), list)

        for stage in stages:
            print stage
            self.assertEqual(type(stage), PositionStage)