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)
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)
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)
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)
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})
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) })
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)
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')
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)
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})