コード例 #1
0
    def test_close_position_sets(self):
        """
        Test close position_sets using filled_orders
        """
        open_position_sets = self.controller.create_position_sets()

        # both open and close filled orders
        self.filled_orders = FilledOrder.objects.filter(
            Q(trade_summary__date__gt='2015-01-29')
            & Q(trade_summary__date__lt='2015-02-19')
            & Q(pos_effect='TO CLOSE'))

        self.controller = PositionSetController(self.filled_orders)

        self.position_sets = self.controller.close_position_sets()

        for position_set in self.position_sets:
            print position_set
            print 'id: %d' % position_set.id
            print 'status: %s' % position_set.status
            print '.' * 60

            self.assertEqual(type(position_set), PositionSet)
            self.assertEqual(position_set.status, 'CLOSE')

        # set back all open position_set
        self.position_sets = list()
        for position_set in open_position_sets:
            self.position_sets.append(
                PositionSet.objects.get(id=position_set.id))
コード例 #2
0
    def setUp(self):
        TestPositionSetCls.setUp(self)

        self.controller = None
        self.filled_orders = None
        self.position_sets = list()

        # both open and close filled orders
        self.filled_orders = FilledOrder.objects.filter(
            Q(trade_summary__date__gte='2015-01-29')
            & Q(trade_summary__date__lt='2015-02-18')
            & Q(pos_effect='TO OPEN'))

        self.controller = PositionSetController(self.filled_orders)
コード例 #3
0
    def test_close_position_sets(self):
        """
        Test close position_sets using filled_orders
        """
        open_position_sets = self.controller.create_position_sets()

        # both open and close filled orders
        self.filled_orders = FilledOrder.objects.filter(
            Q(trade_summary__date__gt='2015-01-29')
            & Q(trade_summary__date__lt='2015-02-19')
            & Q(pos_effect='TO CLOSE')
        )

        self.controller = PositionSetController(self.filled_orders)

        self.position_sets = self.controller.close_position_sets()

        for position_set in self.position_sets:
            print position_set
            print 'id: %d' % position_set.id
            print 'status: %s' % position_set.status
            print '.' * 60

            self.assertEqual(type(position_set), PositionSet)
            self.assertEqual(position_set.status, 'CLOSE')

        # set back all open position_set
        self.position_sets = list()
        for position_set in open_position_sets:
            self.position_sets.append(
                PositionSet.objects.get(id=position_set.id)
            )
コード例 #4
0
    def test_batch_update_foreign_keys(self):
        """
        Test update foreign keys when there was no filled orders
        """
        # only update one day foreign keys
        self.filled_orders = FilledOrder.objects.filter(
            Q(trade_summary__date='2015-01-29'))

        self.controller = PositionSetController(self.filled_orders)
        self.position_sets = self.controller.create_position_sets(
            date='2015-01-29')

        print 'run update_foreign_keys...\n\n'
        self.controller.batch_update_foreign_keys(date='2015-01-30')

        for position_set in self.position_sets:
            position_set = position_set
            """:type: PositionSet"""
            print position_set

            print position_set.filledorder_set.all()

            if position_set.underlying:
                print position_set.positioninstrument_set.all()
                print position_set.profitloss_set.all()
                self.assertGreaterEqual(
                    position_set.positioninstrument_set.count(), 0)
                self.assertGreaterEqual(position_set.profitloss_set.count(), 0)
            elif position_set.future:
                print position_set.positionfuture_set.all()
                print position_set.profitloss_set.all()
                self.assertGreaterEqual(
                    position_set.positionfuture_set.count(), 0)
                self.assertGreaterEqual(position_set.profitloss_set.count(), 0)
            elif position_set.forex:
                print position_set.positionforex_set.all()
                self.assertGreaterEqual(position_set.positionforex_set.count(),
                                        0)

            print '.' * 60
コード例 #5
0
    def setUp(self):
        TestPositionSetCls.setUp(self)

        self.controller = None
        self.filled_orders = None
        self.position_sets = list()

        # both open and close filled orders
        self.filled_orders = FilledOrder.objects.filter(
            Q(trade_summary__date__gte='2015-01-29')
            & Q(trade_summary__date__lt='2015-02-18')
            & Q(pos_effect='TO OPEN')
        )

        self.controller = PositionSetController(self.filled_orders)
コード例 #6
0
    def test_batch_update_foreign_keys(self):
        """
        Test update foreign keys when there was no filled orders
        """
        # only update one day foreign keys
        self.filled_orders = FilledOrder.objects.filter(
            Q(trade_summary__date='2015-01-29')
        )

        self.controller = PositionSetController(self.filled_orders)
        self.position_sets = self.controller.create_position_sets(date='2015-01-29')

        print 'run update_foreign_keys...\n\n'
        self.controller.batch_update_foreign_keys(date='2015-01-30')

        for position_set in self.position_sets:
            position_set = position_set
            """:type: PositionSet"""
            print position_set

            print position_set.filledorder_set.all()

            if position_set.underlying:
                print position_set.positioninstrument_set.all()
                print position_set.profitloss_set.all()
                self.assertGreaterEqual(position_set.positioninstrument_set.count(), 0)
                self.assertGreaterEqual(position_set.profitloss_set.count(), 0)
            elif position_set.future:
                print position_set.positionfuture_set.all()
                print position_set.profitloss_set.all()
                self.assertGreaterEqual(position_set.positionfuture_set.count(), 0)
                self.assertGreaterEqual(position_set.profitloss_set.count(), 0)
            elif position_set.forex:
                print position_set.positionforex_set.all()
                self.assertGreaterEqual(position_set.positionforex_set.count(), 0)

            print '.' * 60
コード例 #7
0
class TestPositionSetController(TestPositionSetCls):
    def setUp(self):
        TestPositionSetCls.setUp(self)

        self.controller = None
        self.filled_orders = None
        self.position_sets = list()

        # both open and close filled orders
        self.filled_orders = FilledOrder.objects.filter(
            Q(trade_summary__date__gte='2015-01-29')
            & Q(trade_summary__date__lt='2015-02-18')
            & Q(pos_effect='TO OPEN'))

        self.controller = PositionSetController(self.filled_orders)

    def tearDown(self):
        TestPositionSetCls.tearDown(self)

        # clean up
        for position_set in self.position_sets:
            position_set.filledorder_set.update(position_set=None)
            position_set.positioninstrument_set.update(position_set=None)
            position_set.positionfuture_set.update(position_set=None)
            position_set.positionforex_set.update(position_set=None)
            position_set.profitloss_set.update(position_set=None)

            position_set.delete()

        #PositionSet.objects.all().delete()
        #self.assertFalse(PositionSet.objects.count(), msg='Please reset db.')

    def test_init_set_queries(self):
        """
        Test init set merge filter query
        """
        print 'output all queries...'
        for query in self.controller.queries:
            print '> %s' % query
            self.assertEqual(type(query), Q)

    def test_create_position_set(self):
        """
        Test create position_sets from filled_orders
        """
        print 'run create_position_sets'
        self.position_sets = self.controller.create_position_sets()
        self.assertEqual(type(self.position_sets), list)

        for position_set in self.position_sets:
            position_set = position_set
            """:type: PositionSet"""
            print '> id: %d - %s' % (position_set.id, position_set)

            self.assertEqual(type(position_set), PositionSet)

    def test_close_position_sets(self):
        """
        Test close position_sets using filled_orders
        """
        open_position_sets = self.controller.create_position_sets()

        # both open and close filled orders
        self.filled_orders = FilledOrder.objects.filter(
            Q(trade_summary__date__gt='2015-01-29')
            & Q(trade_summary__date__lt='2015-02-19')
            & Q(pos_effect='TO CLOSE'))

        self.controller = PositionSetController(self.filled_orders)

        self.position_sets = self.controller.close_position_sets()

        for position_set in self.position_sets:
            print position_set
            print 'id: %d' % position_set.id
            print 'status: %s' % position_set.status
            print '.' * 60

            self.assertEqual(type(position_set), PositionSet)
            self.assertEqual(position_set.status, 'CLOSE')

        # set back all open position_set
        self.position_sets = list()
        for position_set in open_position_sets:
            self.position_sets.append(
                PositionSet.objects.get(id=position_set.id))

    def test_batch_update_foreign_keys(self):
        """
        Test update foreign keys when there was no filled orders
        """
        # only update one day foreign keys
        self.filled_orders = FilledOrder.objects.filter(
            Q(trade_summary__date='2015-01-29'))

        self.controller = PositionSetController(self.filled_orders)
        self.position_sets = self.controller.create_position_sets(
            date='2015-01-29')

        print 'run update_foreign_keys...\n\n'
        self.controller.batch_update_foreign_keys(date='2015-01-30')

        for position_set in self.position_sets:
            position_set = position_set
            """:type: PositionSet"""
            print position_set

            print position_set.filledorder_set.all()

            if position_set.underlying:
                print position_set.positioninstrument_set.all()
                print position_set.profitloss_set.all()
                self.assertGreaterEqual(
                    position_set.positioninstrument_set.count(), 0)
                self.assertGreaterEqual(position_set.profitloss_set.count(), 0)
            elif position_set.future:
                print position_set.positionfuture_set.all()
                print position_set.profitloss_set.all()
                self.assertGreaterEqual(
                    position_set.positionfuture_set.count(), 0)
                self.assertGreaterEqual(position_set.profitloss_set.count(), 0)
            elif position_set.forex:
                print position_set.positionforex_set.all()
                self.assertGreaterEqual(position_set.positionforex_set.count(),
                                        0)

            print '.' * 60
コード例 #8
0
ファイル: views.py プロジェクト: jack2150/rivers0.2
    def clean(self):
        """
        Validate date for file date and all import file name date
        """
        cleaned_data = super(PmsImportStatementsForm, self).clean()

        if not len(self._errors):
            # no error found for field
            real_date = cleaned_data.get("date").strftime('%Y-%m-%d')

            acc_date = datetime.strptime(
                cleaned_data.get("account_statement").name[:10], '%Y-%m-%d'
            )
            pos_date = datetime.strptime(
                cleaned_data.get("position_statement").name[:10], '%Y-%m-%d'
            )
            ta_date = datetime.strptime(
                cleaned_data.get("trade_activity").name[:10], '%Y-%m-%d'
            )

            acc_date = acc_date - BDay(1)
            acc_date = acc_date.strftime('%Y-%m-%d')
            pos_date = pos_date - BDay(1)
            pos_date = pos_date.strftime('%Y-%m-%d')
            ta_date = ta_date - BDay(1)
            ta_date = ta_date.strftime('%Y-%m-%d')

            if acc_date == pos_date == ta_date:
                if real_date != acc_date:
                    error_message = 'All date must have (-1 BDay, %s != %s).' % (real_date, acc_date)
                    self._errors['date'] = self.error_class([error_message])
            else:
                error_message = 'All file date must be same.'
                self._errors['date'] = self.error_class([error_message])

            if not len(self._errors):
                # save here so django can track error location
                acc_data = cleaned_data.get("account_statement")
                acc_data = acc_data.read()
                pos_data = cleaned_data.get("position_statement")
                pos_data = pos_data.read()
                ta_data = cleaned_data.get("trade_activity")
                ta_data = ta_data.read()

                statement = Statement()
                statement.date = real_date
                statement.account_statement = acc_data
                statement.position_statement = pos_data
                statement.trade_activity = ta_data
                statement.save()

                SaveAccountStatement(
                    date=real_date,
                    statement=statement,
                    file_data=acc_data
                ).save_all()

                SavePositionStatement(
                    date=real_date,
                    statement=statement,
                    file_data=pos_data
                ).save_all()

                trade_summary_id = SaveTradeActivity(
                    date=real_date,
                    statement=statement,
                    file_data=ta_data
                ).save_all()

                SaveStatDay(statement).save_all()

                # create or update position_set
                filled_orders = FilledOrder.objects.filter(trade_summary__id=trade_summary_id)
                controller = PositionSetController(filled_orders)
                controller.close_position_sets(date=real_date)
                controller.create_position_sets(date=real_date)
                controller.batch_update_foreign_keys(date=real_date)

                self.cleaned_data['statement_id'] = statement.id
                self.cleaned_data['statement_name'] = statement.__unicode__()

        return cleaned_data
コード例 #9
0
ファイル: views.py プロジェクト: jack2150/rivers0.2
def statement_import_all(request):
    """
    import all statements in real_path folder
    :param request: request
    :return: render
    """
    template = 'tos_import/statement_import_all.html'
    real_files_folder = glob.glob('%s/*' % import_path)

    imported_logs = list()
    error_logs = list()
    for folder in real_files_folder:
        if os.path.isdir(folder):
            real_date = os.path.basename(folder)

            try:
                datetime.strptime(real_date, '%Y-%m-%d')
            except ValueError:
                error_logs.append(
                    {
                        'path': folder,
                        'date': real_date.split(' ')[0],
                        'note': real_date.split(' ')[1],
                        'error': 'Invalid filename'
                    }
                )
            else:
                # only import error free folder
                # get file inside and get date
                # skip date exist in db
                if not Statement.objects.filter(date=real_date).exists():
                    statement = glob.glob('%s/*.csv' % folder)[0]
                    file_date = os.path.basename(statement)[0:10]

                    acc_data = pos_data = ta_data = ''
                    acc_file = os.path.join(folder, '%s-AccountStatement.csv' % file_date)
                    pos_file = os.path.join(folder, '%s-PositionStatement.csv' % file_date)
                    ta_file = os.path.join(folder, '%s-TradeActivity.csv' % file_date)

                    statement = Statement()
                    statement.date = real_date

                    if os.path.exists(acc_file):
                        acc_data = open(acc_file).read()
                        statement.account_statement = acc_data
                    if os.path.exists(pos_file):
                        pos_data = open(pos_file).read()
                        statement.position_statement = pos_data
                    if os.path.exists(ta_file):
                        ta_data = open(ta_file).read()
                        statement.trade_activity = ta_data

                    statement.save()

                    if acc_data:
                        account_summary_id = SaveAccountStatement(
                            date=real_date,
                            statement=statement,
                            file_data=acc_data
                        ).save_all()

                    if pos_data:
                        position_summary_id = SavePositionStatement(
                            date=real_date,
                            statement=statement,
                            file_data=pos_data
                        ).save_all()

                    trade_summary_id = 0
                    if ta_data:
                        trade_summary_id = SaveTradeActivity(
                            date=real_date,
                            statement=statement,
                            file_data=ta_data
                        ).save_all()

                    # save stat day
                    SaveStatDay(statement).save_all()

                    # create or update position_set
                    filled_orders = FilledOrder.objects.filter(trade_summary__id=trade_summary_id)
                    controller = PositionSetController(filled_orders)
                    controller.close_position_sets(date=real_date)
                    controller.create_position_sets(date=real_date)
                    controller.batch_update_foreign_keys(date=real_date)

                    imported_logs.append({
                        'statement': {
                            'id': statement.id,
                            'change_url': reverse(
                                'admin:tos_import_statement_change',
                                args={statement.id}),
                            'delete_url': reverse(
                                'admin:tos_import_statement_delete',
                                args={statement.id}),
                            'date': statement.date
                        },
                        'account_statement': {
                            'id': account_summary_id,
                            'change_url': reverse(
                                'admin:statement_account_accountsummary_change',
                                args={account_summary_id}),
                            'delete_url': reverse(
                                'admin:statement_account_accountsummary_delete',
                                args={account_summary_id}),
                        },
                        'position_statement': {
                            'id': position_summary_id,
                            'change_url': reverse(
                                'admin:statement_position_positionsummary_change',
                                args={position_summary_id}),
                            'delete_url': reverse(
                                'admin:statement_position_positionsummary_delete',
                                args={position_summary_id}),
                        },
                        'trade_activity': {
                            'id': trade_summary_id,
                            'change_url': reverse(
                                'admin:statement_trade_tradesummary_change',
                                args={trade_summary_id}),
                            'delete_url': reverse(
                                'admin:statement_trade_tradesummary_delete',
                                args={trade_summary_id}),
                        },
                    })

                    # log entry
                    LogEntry.objects.log_action(
                        user_id=request.user.id,
                        content_type_id=ContentType.objects.get_for_model(Statement).id,
                        object_id=statement.id,
                        object_repr=statement.__unicode__(),
                        action_flag=ADDITION
                    )

    parameters = dict(
        imported_logs=imported_logs,
        error_logs=error_logs
    )

    # testing page view, delete all after done...
    # Statement.objects.all().delete()

    return render(request, template, parameters)
コード例 #10
0
class TestPositionSetController(TestPositionSetCls):
    def setUp(self):
        TestPositionSetCls.setUp(self)

        self.controller = None
        self.filled_orders = None
        self.position_sets = list()

        # both open and close filled orders
        self.filled_orders = FilledOrder.objects.filter(
            Q(trade_summary__date__gte='2015-01-29')
            & Q(trade_summary__date__lt='2015-02-18')
            & Q(pos_effect='TO OPEN')
        )

        self.controller = PositionSetController(self.filled_orders)

    def tearDown(self):
        TestPositionSetCls.tearDown(self)

        # clean up
        for position_set in self.position_sets:
            position_set.filledorder_set.update(position_set=None)
            position_set.positioninstrument_set.update(position_set=None)
            position_set.positionfuture_set.update(position_set=None)
            position_set.positionforex_set.update(position_set=None)
            position_set.profitloss_set.update(position_set=None)

            position_set.delete()

        #PositionSet.objects.all().delete()
        #self.assertFalse(PositionSet.objects.count(), msg='Please reset db.')

    def test_init_set_queries(self):
        """
        Test init set merge filter query
        """
        print 'output all queries...'
        for query in self.controller.queries:
            print '> %s' % query
            self.assertEqual(type(query), Q)

    def test_create_position_set(self):
        """
        Test create position_sets from filled_orders
        """
        print 'run create_position_sets'
        self.position_sets = self.controller.create_position_sets()
        self.assertEqual(type(self.position_sets), list)

        for position_set in self.position_sets:
            position_set = position_set
            """:type: PositionSet"""
            print '> id: %d - %s' % (position_set.id, position_set)

            self.assertEqual(type(position_set), PositionSet)

    def test_close_position_sets(self):
        """
        Test close position_sets using filled_orders
        """
        open_position_sets = self.controller.create_position_sets()

        # both open and close filled orders
        self.filled_orders = FilledOrder.objects.filter(
            Q(trade_summary__date__gt='2015-01-29')
            & Q(trade_summary__date__lt='2015-02-19')
            & Q(pos_effect='TO CLOSE')
        )

        self.controller = PositionSetController(self.filled_orders)

        self.position_sets = self.controller.close_position_sets()

        for position_set in self.position_sets:
            print position_set
            print 'id: %d' % position_set.id
            print 'status: %s' % position_set.status
            print '.' * 60

            self.assertEqual(type(position_set), PositionSet)
            self.assertEqual(position_set.status, 'CLOSE')

        # set back all open position_set
        self.position_sets = list()
        for position_set in open_position_sets:
            self.position_sets.append(
                PositionSet.objects.get(id=position_set.id)
            )

    def test_batch_update_foreign_keys(self):
        """
        Test update foreign keys when there was no filled orders
        """
        # only update one day foreign keys
        self.filled_orders = FilledOrder.objects.filter(
            Q(trade_summary__date='2015-01-29')
        )

        self.controller = PositionSetController(self.filled_orders)
        self.position_sets = self.controller.create_position_sets(date='2015-01-29')

        print 'run update_foreign_keys...\n\n'
        self.controller.batch_update_foreign_keys(date='2015-01-30')

        for position_set in self.position_sets:
            position_set = position_set
            """:type: PositionSet"""
            print position_set

            print position_set.filledorder_set.all()

            if position_set.underlying:
                print position_set.positioninstrument_set.all()
                print position_set.profitloss_set.all()
                self.assertGreaterEqual(position_set.positioninstrument_set.count(), 0)
                self.assertGreaterEqual(position_set.profitloss_set.count(), 0)
            elif position_set.future:
                print position_set.positionfuture_set.all()
                print position_set.profitloss_set.all()
                self.assertGreaterEqual(position_set.positionfuture_set.count(), 0)
                self.assertGreaterEqual(position_set.profitloss_set.count(), 0)
            elif position_set.forex:
                print position_set.positionforex_set.all()
                self.assertGreaterEqual(position_set.positionforex_set.count(), 0)

            print '.' * 60