Esempio n. 1
0
    def debug_t0(self):
        self.running_mode = 'backtest'
        self.database = pymongo.MongoClient(mongo_ip).QUANTAXIS
        user = QA_User(username="******", password='******')
        port = user.new_portfolio(self.portfolio)
        self.acc = port.new_accountpro(
            account_cookie=self.strategy_id, init_cash=self.init_cash, init_hold={
                self.code: 100000},
            market_type=self.market_type, running_environment=RUNNING_ENVIRONMENT.TZERO)
        self.positions = self.acc.get_position(self.code)

        print(self.acc)

        print(self.acc.market_type)
        data = QA.QA_quotation(self.code.upper(), self.start, self.end, source=QA.DATASOURCE.MONGO,
                               frequence=self.frequence, market=self.market_type, output=QA.OUTPUT_FORMAT.DATASTRUCT)

        def x1(item):
            # print(data)
            self.latest_price[item.name[1]] = item['close']
            if str(item.name[0])[0:10] != str(self.running_time)[0:10]:
                self.on_dailyclose()
                for order in self.acc.close_positions_order:
                    order.trade('closebySys', order.price,
                                order.amount, order.datetime)
                self.on_dailyopen()
                if self.market_type == QA.MARKET_TYPE.STOCK_CN:
                    print('backtest: Settle!')
                    self.acc.settle()
            self._on_1min_bar()
            self._market_data.append(item)
            self.running_time = str(item.name[0])
            self.on_bar(item)

        data.data.apply(x1, axis=1)
Esempio n. 2
0
    def debug_histick(self, freq):
        data = QA.QA_fetch_get_future_transaction(
            'tdx', self.code.upper(), self.start, self.end)
        self.running_mode = 'backtest'
        self.database = pymongo.MongoClient(mongo_ip).QUANTAXIS
        user = QA_User(username="******", password='******')
        port = user.new_portfolio(self.portfolio)
        self.strategy_id = self.strategy_id + 'histick_{}_{}_{}'.format(self.start, self.end, freq)
        self.acc = port.new_accountpro(
            account_cookie=self.strategy_id, init_cash=self.init_cash, market_type=self.market_type)
        self.positions = self.acc.get_position(self.code)
        data = data.assign(price=data.price/1000).loc[:, ['code', 'price', 'volume']].resample(
            freq).apply({'code': 'last', 'price': 'ohlc', 'volume': 'sum'}).dropna()
        data.columns = data.columns.droplevel(0)
        data = data.reset_index().set_index(['datetime', 'code'])

        def x1(item):
            self.latest_price[item.name[1]] = item['close']
            if str(item.name[0])[0:10] != str(self.running_time)[0:10]:
                self.on_dailyclose()
                self.on_dailyopen()
            self._on_1min_bar()
            self._market_data.append(item)
            self.running_time = str(item.name[0])
            self.on_bar(item)

        data.apply(x1, axis=1)
Esempio n. 3
0
    def debug(self):
        self.running_mode = 'backtest'
        self.database = DATABASE  #pymongo.MongoClient(mongo_ip).QUANTAXIS
        user = QA_User(username="******", password='******')
        if self.reset_acc:
            self.database.account.remove({
                'account_cookie': self.strategy_id,
                'portfolio_cookie': self.portfolio,
                'user_cookie': user.user_cookie
            })
        port = user.new_portfolio(self.portfolio)
        self.acc = port.new_accountpro(account_cookie=self.strategy_id,
                                       init_cash=self.init_cash,
                                       commission_coeff=self.commission_coeff,
                                       allow_t0=True,
                                       allow_margin=False,
                                       allow_sellopen=False,
                                       market_type=self.market_type,
                                       running_environment=self.market_type,
                                       frequence=self.frequence)
        #self.positions = self.acc.get_position(self.code)

        QA_util_log_info(self.acc)
        data = QA.QA_quotation(self.code,
                               self.start,
                               self.end,
                               source=QA.DATASOURCE.MONGO,
                               frequence=self.frequence,
                               market=self.market_type,
                               output=QA.OUTPUT_FORMAT.DATASTRUCT)

        self.on_before_bar(data)
        data.data.progress_apply(self.x1, axis=1)
Esempio n. 4
0
    def debug(self):
        self.running_mode = 'backtest'
        self.database = pymongo.MongoClient(mongo_ip).QUANTAXIS
        user = QA_User(username="******", password='******')
        port = user.new_portfolio(self.portfolio)
        self.acc = port.new_accountpro(
            account_cookie=self.strategy_id, init_cash=self.init_cash, market_type=self.market_type)
        #self.positions = self.acc.get_position(self.code)

        print(self.acc)

        print(self.acc.market_type)
        data = QA.QA_quotation(self.code, self.start, self.end, source=QA.DATASOURCE.MONGO,
                               frequence=self.frequence, market=self.market_type, output=QA.OUTPUT_FORMAT.DATASTRUCT)

        def x1(item):
            # print(data)
            self._on_1min_bar()
            self._market_data.append(item)

            if str(item.name[0])[0:10] != str(self.running_time)[0:10]:
                if self.market_type == QA.MARKET_TYPE.STOCK_CN:
                    print('backtest: Settle!')
                    self.acc.settle()

            self.running_time = str(item.name[0])
            self.on_bar(item)

        data.data.apply(x1, axis=1)
Esempio n. 5
0
    def get(self):
        action = self.get_argument('action', default='query')
        wechat_id = self.get_argument('wechat_id', default=None)
        model = self.get_argument('model', 'wechat')
        if wechat_id is None and model == 'wechat':
            self.write({'status': 404, 'result': 'no wechat id'})

        else:
            if model == 'password':
                user = QA_User(username=self.get_argument('username'),
                               password=self.get_argument('password'))
            else:
                user = QA_User(wechat_id=wechat_id)

            if action == 'query':
                self.write({"result": user.message})
            elif action == 'query_strategy':
                status = self.get_argument('status', 'all')
                if status == 'running':
                    self.write({
                        'status':
                        200,
                        'result':
                        QA_util_to_json_from_pandas(user.subscribing_strategy)
                    })
                elif status == 'all':
                    self.write({
                        'status':
                        200,
                        'result':
                        QA_util_to_json_from_pandas(user.subscribed_strategy)
                    })
            elif action == 'query_portfolio':
                """获取某个user下的所有portfolio

                """
                self.write({'status': 200, 'result': user.portfolio_list})
            elif action == 'get_portfolio':
                """
                ?portfolio = xxxx

                这里主要展示这个portfolio的信息
                如果需要具体对portfolio进行控制, 则在aprhandlers.portfolio_handler中
                """
                try:
                    self.write({
                        'status':
                        200,
                        'result':
                        user.get_portfolio(
                            self.get_argument('portfolio')).message
                    })
                except Exception as e:
                    self.write({'status': 404, 'result': str(e)})
            elif action == 'get_nodeview':
                self.write({'status': 200, 'result': user.node_view})
Esempio n. 6
0
    def debug(self):
        self.running_mode = 'backtest'
        self.database = pymongo.MongoClient(mongo_ip).QUANTAXIS
        user = QA_User(username="******", password='******')
        port = user.new_portfolio(self.portfolio)
        self.acc = port.new_accountpro(
            account_cookie=self.strategy_id, init_cash=self.init_cash, market_type=self.market_type)
        #self.positions = self.acc.get_position(self.code)


        data = QA.QA_quotation(self.code, self.start, self.end, source=QA.DATASOURCE.MONGO,
                               frequence=self.frequence, market=self.market_type, output=QA.OUTPUT_FORMAT.DATASTRUCT)
        #print(data.data)
        data.data.apply(self.x1, axis=1)
    def get(self):
        action = self.get_argument('action', default='query')
        wechat_id = self.get_argument('wechat_id', default=None)
        if wechat_id is None:
            self.write({'status': 404, 'result': 'no wechat id'})
        else:
            user = QA_User(wechat_id=wechat_id)

            if action == 'query':
                self.write({"result": user.message})
            elif action == 'query_strategy':
                status = self.get_argument('status', 'all')
                if status == 'running':
                    self.write({
                        'status':
                        200,
                        'result':
                        QA_util_to_json_from_pandas(user.subscribing_strategy)
                    })
                elif status == 'all':
                    self.write({
                        'status':
                        200,
                        'result':
                        QA_util_to_json_from_pandas(user.subscribed_strategy)
                    })
Esempio n. 8
0
    def run(self):
        self.database = pymongo.MongoClient(mongo_ip).QUANTAXIS
        user = QA_User(username="******", password='******')
        port = user.new_portfolio(self.portfolio)
        self.acc = port.new_accountpro(account_cookie=self.strategy_id,
                                       init_cash=self.init_cash,
                                       market_type=self.market_type)
        self.positions = self.acc.get_position(self.code)

        print(self.acc)
        print(self.acc.market_type)
        data = self.quotation(self.code.upper(),
                              self.start,
                              self.end,
                              source=qa.DATASOURCE.MONGO,
                              frequence=self.frequence,
                              market=self.market_type,
                              output=qa.OUTPUT_FORMAT.DATASTRUCT)
        data.data.apply(self.x1, axis=1)
Esempio n. 9
0
    def get(self):
        """注册接口

        Arguments:
            QABaseHandler {[type]} -- [description]

            user/signin?user=xxx&password=xx
        Return 
            'SUCCESS' if success
            'WRONG' if wrong
        """

        username = self.get_argument('user', default='admin')
        password = self.get_argument('password', default='admin')
        if QA_user_sign_up(username, password, DATABASE):
            user = QA_User(username=username, password=password)
            user.save()
            self.write('SUCCESS')
        else:
            self.write('WRONG')
Esempio n. 10
0
    def debug(self):
        self.running_mode = 'backtest'
        self.database = pymongo.MongoClient(mongo_ip).QUANTAXIS
        user = QA_User(username=self.username, password=self.password)
        port = user.new_portfolio(self.portfolio)
        self.acc = port.new_accountpro(account_cookie=self.strategy_id,
                                       init_cash=self.init_cash,
                                       commission_coeff=self.commission_coeff,
                                       market_type=self.market_type,
                                       frequence=self.frequence)
        self.positions = self.acc.get_position(self.code)

        QA_util_log_info(self.acc)
        QA_util_log_info(self.acc.market_type)
        data = QA.QA_quotation(self.code.upper(),
                               self.start,
                               self.end,
                               source=QA.DATASOURCE.MONGO,
                               frequence=self.frequence,
                               market=self.market_type,
                               output=QA.OUTPUT_FORMAT.DATASTRUCT)

        data.data.progress_apply(self.x1, axis=1)
Esempio n. 11
0
    def post(self):
        """动作修改
        """

        action = self.get_argument('action')
        wechat_id = self.get_argument('wechat_id', default=None)
        model = self.get_argument('model', 'wechat')
        if wechat_id is None and model == 'wechat':
            self.write({'status': 404, 'result': 'no wechat id'})

        else:
            if model == 'password':
                user = QA_User(username=self.get_argument('username'),
                               password=self.get_argument('password'))
            else:
                user = QA_User(wechat_id=wechat_id)

            try:
                if action == 'change_password':
                    user.password = str(self.get_argument(
                        'password', '123456'))
                if action == 'change_name':
                    user.username = str(
                        self.get_argument('username', 'default_name'))
                elif action == 'change_phone':
                    user.phone = str(self.get_argument('phone', '123456789'))
                elif action == 'change_coins':
                    user.coins = float(self.get_argument('coins'))
                elif action == 'subscribe_strategy':
                    user.subscribe_strategy(
                        self.get_argument('strategy_id'),
                        int(self.get_argument('last')),
                        cost_coins=int(self.get_argument('cost_coins')))
                elif action == 'unsubscribe_strategy':
                    user.unsubscribe_stratgy(self.get_argument('strategy_id'))
                elif action == 'subscribe_code':
                    user.sub_code(self.get_argument('code'))
                elif action == 'add_portfolio':
                    user.new_portfolio(
                        portfolio_cookie=self.get_argument('portfolio'))
                elif action == 'change_wechatid':
                    user.wechat_id = self.get_argument('wechat_id')
                user.save()
                #
                self.write({'status': 200})
            except:
                self.write({'status': 400})