コード例 #1
0
 def post(self):
     """ 发单 """
     info = request.values.to_dict()
     local_symbol = info.get("local_symbol")
     direction = info.get("direction")
     offset = info.get("offset")
     type = info.get("type")
     price = info.get("price")
     volume = info.get("volume")
     exchange = info.get("exchange")
     if local_symbol and direction and offset and type and price and volume and exchange:
         req = helper.generate_order_req_by_str(symbol=local_symbol,
                                                exchange=exchange,
                                                direction=direction,
                                                offset=offset,
                                                volume=int(volume),
                                                price=float(price),
                                                type=type)
         try:
             req_id = bee_current_app.send_order(req)
             sleep(0.2)
             order = bee_current_app.recorder.get_order(req_id)
             if order.status.value == "拒单":
                 return false_response(msg=bee_current_app.recorder.
                                       get_new_error()['data']['ErrorMsg'])
             return true_response(msg="成功下单")
         except Exception as e:
             return false_response(msg="下单失败")
     return false_response(msg='参数含空')
コード例 #2
0
 def post(self):
     """ 发单 """
     info = request.values.to_dict()
     try:
         local_symbol = info["local_symbol"]
         direction = info["direction"]
         offset = info["offset"]
         type = info["type"]
         price = info["price"]
         volume = info["volume"]
         exchange = info["exchange"]
     except KeyError:
         return false_response(msg='参数含空')
     req = helper.generate_order_req_by_str(symbol=local_symbol,
                                            exchange=exchange,
                                            direction=direction, offset=offset, volume=int(volume),
                                            price=float(price),
                                            type=type)
     try:
         req_id = bee_current_app.send_order(req)
         sleep(0.2)
         order = bee_current_app.recorder.get_order(req_id)
         if order.status.value == "拒单":
             return false_response(msg=bee_current_app.recorder.get_new_error()['data']['ErrorMsg'])
         return true_response(msg="成功下单")
     except Exception:
         return false_response(msg="下单失败")
コード例 #3
0
ファイル: strategy.py プロジェクト: yutiansut/ctpbee_client
    def post(self):
        """Run pylint on code and get output
            :return: JSON object of pylint errors
                {
                    {
                        "code":...,
                        "error": ...,
                        "message": ...,
                        "line": ...,
                        "error_info": ...,
                    }
                    ...
                }

            For more customization, please look at Pylint's library code:
            https://github.com/PyCQA/pylint/blob/master/pylint/lint.py
        """
        # Session to handle multiple users at one time and to get textarea from AJAX call
        se = G.session[session['token']]

        se["code"] = request.form['text']
        text = se["code"]
        output = evaluate_pylint(text)
        print(output)
        # MANAGER.astroid_cache.clear()
        return true_response(data=output)
コード例 #4
0
ファイル: strategy.py プロジェクト: yutiansut/ctpbee_client
    def post(self):
        if slow():
            return false_response(
                msg="Running code too much within a short time period. "
                "Please wait a few seconds Run .")
        se = G.session[session['token']]
        se["time_now"] = datetime.now()
        se["code"] = request.form['text']
        text = se['code']
        try:
            se["file_name"]
            f = open(se["file_name"], "w")
            for t in text:
                f.write(t)
            f.flush()
        except Exception as e:
            with tempfile.NamedTemporaryFile(delete=False) as temp:
                se["file_name"] = temp.name
                for t in text:
                    temp.write(t.encode("utf-8"))
                temp.flush()
        output = None
        cmd = 'python ' + se["file_name"]
        p = Popen(cmd,
                  shell=True,
                  stdin=PIPE,
                  stdout=PIPE,
                  stderr=STDOUT,
                  close_fds=True)
        output = p.stdout.read()

        return true_response(data=output.decode('utf-8'))
コード例 #5
0
 def post(self):
     symbol = request.values.get("symbol")
     try:
         bee_current_app.subscribe(symbol)
         return true_response(msg=f"订阅{symbol}成功")
     except Exception:
         return false_response(msg=f"订阅{symbol}失败")
コード例 #6
0
 def put(self):
     password = request.values.get('password')
     code = request.values.get('authorization', "")
     if password == bee_current_app.trader.password and len(code) >= 6:
         G.authorization = code
         return true_response(msg='修改成功')
     return false_response(msg='修改失败')
コード例 #7
0
    def post(self):
        """
        bee_app:   token if check userid,password else false_response
        not bee_app:  token if td_login_status else false_response
        :return:
        """
        info = dict(request.values)
        authorization = info.pop('authorization', None)
        if not authorization or not G.check_authorization(authorization):
            return false_response(msg='授权码错误')
        userid = info.get('userid')
        password = info.get('password')
        # bee_current_app存在
        if bee_current_app and \
                bee_current_app.trader and \
                bee_current_app.td_login_status:
            if userid == bee_current_app.trader.userid and password == bee_current_app.trader.password:
                token = Auth.authenticate(info)
                return true_response(data=token, msg='登录成功')
            return false_response(msg='Refuse!')

        else:  # bee_current_app 不不存在
            bee_app = CtpBee(name=info.get("username"),
                             import_name=__name__,
                             refresh=True,
                             logger_class=VLog)
            login_info = {
                "CONNECT_INFO": info,
                "INTERFACE": info.get('interface'),
                "TD_FUNC": True,
                "MD_FUNC": True,
            }
            bee_app.config.from_mapping(login_info)
            default = DefaultSettings("default_settings", bee_app, io)
            load_strategy(bee_app)  # 加载策略
            bee_app.start()
            sleep(1)

            if bee_current_app and \
                    bee_current_app.trader and \
                    bee_current_app.td_login_status:
                token = Auth.authenticate(info)

                return true_response(data=token, msg='重新登录成功')
            else:
                del_app(__name__)
                return false_response(msg="重新登录出现错误")
コード例 #8
0
 def put(self):
     """ 更新contract"""
     try:
         contracts = [contract.local_symbol for contract in bee_current_app.recorder.get_all_contracts()]
         contracts.sort(key=lambda v: v.upper())
         io.emit("contract", contracts)
     except Exception:
         return false_response(msg="更新合约失败", )
     return true_response(msg="更新合约列表完成")
コード例 #9
0
ファイル: strategy.py プロジェクト: yutiansut/ctpbee_client
 def get(self):
     name = request.values.get('name')
     if name and name != 'default_settings':
         text = get_strategy(name)
         if text:
             return true_response(data=text)
         else:
             return false_response(msg='unknown name')
     return false_response(msg='name is none')
コード例 #10
0
 def post(self):
     auth_code = request.values.get('authorization', "")
     if auth_code and len(auth_code) >= 6 and G.check_authorization(auth_code):
         del_app(__name__)
         G.current_user.clear()
         print("bee_app: ", bee_current_app)
         return true_response(msg='服务器已安全退出')
     else:
         return false_response(msg='授权码错误')
コード例 #11
0
 def get(self):
     position_list = bee_current_app.recorder.get_all_positions()
     active_order_list = [active_order._to_dict() for active_order in
                          bee_current_app.recorder.get_all_active_orders()]
     trade_list = [trade._to_dict() for trade in bee_current_app.recorder.get_all_trades()]
     order_list = [order._to_dict() for order in bee_current_app.recorder.get_all_orders()]
     result = dict(position_list=position_list, active_order_list=active_order_list, trade_list=trade_list,
                   order_list=order_list, log_history=G.log_history)
     return true_response(data=result)
コード例 #12
0
ファイル: strategy.py プロジェクト: yutiansut/ctpbee_client
 def get(self):
     G.session = dict(token=session['token'],
                      data=dict(count=0, time_now=datetime.now()))
     result = []
     for k, v in bee_current_app.extensions.items():
         temp = {}
         temp['name'] = k
         temp['status'] = "停止" if v.frozen else "运行中"
         result.append(temp)
     return true_response(data=result)
コード例 #13
0
 def get(self):
     try:
         name = request.values['name']
     except KeyError:
         return false_response(msg='参数为空')
     if name != 'default_settings':
         text = get_strategy(name)
         if text:
             return true_response(data=text)
         else:
             return false_response(msg='unknown name')
     return false_response(msg='name is none')
コード例 #14
0
ファイル: strategy.py プロジェクト: yutiansut/ctpbee_client
 def put(self):
     operation = request.values.get('operation')
     name = request.values.get('name')
     if name in bee_current_app.extensions:
         if operation == "开启":
             res = bee_current_app.enable_extension(name)
         elif operation == "关闭":
             res = bee_current_app.suspend_extension(name)
         else:
             res = 'unknown'
         res = '成功' if res is True else '失败'
         return true_response(msg=f'{operation} {name} {res}')
     return false_response(msg=f"{name} not found!")
コード例 #15
0
 def delete(self):
     """ 撤单 """
     info = request.values
     local_symbol = info.get("local_symbol")
     order_id = info.get("order_id")
     exchange = info.get("exchange")
     req = helper.generate_cancel_req_by_str(symbol=local_symbol,
                                             exchange=exchange,
                                             order_id=order_id)
     try:
         bee_current_app.cancel_order(req)
         return true_response(msg="成功撤单")
     except Exception:
         return false_response(msg="撤单失败")
コード例 #16
0
ファイル: strategy.py プロジェクト: yutiansut/ctpbee_client
    def post(self):
        pattern = r"ext\s*=\s*\w*[(][\"\'](.*)[\"\'][)]"
        se = G.session[session['token']]

        text = request.values.get('text')
        name = re.findall(pattern, text)  # 检测 name ,ext
        if not name or not text:
            return false_response(msg='name,text为空 or 未定义ext变量 ')
        name = name[-1]
        res = add_strategy(name, text)
        if res is True:
            return true_response(msg='添加成功')
        else:
            return false_response(msg='添加失败:' + res)
コード例 #17
0
 def post(self):
     pattern = r"ext\s*=\s*\w*[(][\"\'](.*)[\"\'][)]"
     try:
         text = request.values['text']
     except KeyError:
         return false_response(msg='参数为空')
     name = re.findall(pattern, text)  # 检测 name ,ext
     if not name or not text:
         return false_response(msg='name,text为空 or 未定义ext变量 ')
     name = name[-1]
     res = add_strategy(name, text)
     if res is True:
         return true_response(msg='添加成功')
     else:
         return false_response(msg='添加失败:' + res)
コード例 #18
0
 def post(self):
     symbol = request.values.get('local_symbol')
     if not symbol:
         return false_response(msg='symbol 为空')
     timeArray = datetime.now() - timedelta(days=G.g['BAR_TIME'])
     # 转换成时间戳
     timestamp = round(timeArray.timestamp() * 1000)
     results = db[symbol].find({'timestamp': {"$gte": timestamp}})
     data = []
     for bar in results:
         temp = [
             bar['timestamp'], bar['open_price'], bar['high_price'],
             bar['low_price'], bar['close_price'], bar['volume']
         ]
         data.append(temp)
     return true_response(data=data)
コード例 #19
0
ファイル: config.py プロジェクト: yutiansut/ctpbee_client
 def put(self):
     data = request.values.to_dict()
     print(data)
     if not data:
         return false_response(msg='含空项')
     for k in data.keys():
         if k in self.keys:
             if data[k].isdigit() or re.compile(
                     r'^[-+]?[0-9]+\.[0-9]+$').match(data[k]):
                 bee_current_app.config[k] = float(data[k])
             elif data[k] == 'true':
                 bee_current_app.config[k] = True
             elif data[k] == 'false':
                 bee_current_app.config[k] = False
             else:
                 bee_current_app.config[k] = data[k]
     return true_response(msg='修改成功')
コード例 #20
0
 def put(self):
     try:
         operation = request.values['operation']
         name = request.values['name']
     except KeyError:
         return false_response(msg='参数为空')
     if name in bee_current_app.extensions:
         if operation == "开启":
             res = bee_current_app.enable_extension(name)
             G.frozen_strategy.remove(name + '.py')
         elif operation == "关闭":
             res = bee_current_app.suspend_extension(name)
             G.frozen_strategy.append(name + '.py')
         else:
             res = 'unknown'
         res = '成功' if res is True else '失败'
         return true_response(msg=f'{operation} {name} {res}')
     return false_response(msg=f"{name} not found!")
コード例 #21
0
 def post(self):
     req_info = request.values.to_dict()
     local_symbol = req_info.get("local_symbol")
     volume = int(req_info.get("volume"))
     direction = req_info.get("direction")
     exchange = req_info.get("exchange")
     symbol = req_info.get("symbol")
     tick = TickData(symbol=symbol, exchange=self.exchange_map[exchange])
     price = bee_current_app.recorder.get_tick(local_symbol).last_price
     try:
         if direction == "long":
             bee_current_app.action.cover(price=price,
                                          volume=volume,
                                          origin=tick)
         if direction == "short":
             bee_current_app.action.sell(price=price,
                                         volume=volume,
                                         origin=tick)
         return true_response(msg="平仓请求发送成功")
     except Exception:
         return false_response(msg="平仓请求发送失败")
コード例 #22
0
    def post(self):
        try:
            text = request.values['text']
        except KeyError:
            return false_response(msg='参数为空')
        with tempfile.NamedTemporaryFile(delete=False) as temp:
            file_name = temp.name
            for t in text:
                temp.write(t.encode("utf-8"))
            temp.flush()
        output = None
        cmd = 'python ' + file_name
        p = Popen(cmd,
                  shell=True,
                  stdin=PIPE,
                  stdout=PIPE,
                  stderr=STDOUT,
                  close_fds=True)
        output = p.stdout.read()

        return true_response(data=output.decode('utf-8'))
コード例 #23
0
 def get(self):
     result = []
     for k, v in bee_current_app.extensions.items():
         temp = {'name': k, 'status': "停止" if v.frozen else "运行中"}
         result.append(temp)
     return true_response(data=result)
コード例 #24
0
 def delete(self):
     name = request.values.get('name')
     if delete_strategy(name):
         G.frozen_strategy.append(name + '.py')
         return true_response(msg=f'删除{name}成功')
     return false_response(msg=f'删除{name}失败')
コード例 #25
0
ファイル: strategy.py プロジェクト: yutiansut/ctpbee_client
 def delete(self):
     name = request.values.get('name')
     if delete_strategy(name):
         return true_response(msg=f'删除{name}成功')
     return false_response(msg=f'删除{name}失败')
コード例 #26
0
ファイル: config.py プロジェクト: yutiansut/ctpbee_client
 def get(self):
     data = {}
     for key in self.keys:
         data[key] = bee_current_app.config[key]
     return true_response(data=data)