예제 #1
0
 def deal(self, code, price, amount, action):
     market_id = get_market(code)
     up_limit = 0
     down_limit = 0
     secuid = self.secuids[market_id]
     maxBuy = 0
     post_data = {
         "type": action,
         "market": market_id,
         "up_limit": up_limit,
         "down_limit": down_limit,
         "stktype": "0",
         "secuid": secuid,
         "stkcode": code,
         "stockName": "",
         "price": price,
         "fundavl": "1.00",
         "maxBuy": maxBuy,
         "amount": amount
     }
     (ret, result) = self.client.post(DEAL_URL, post_data)
     self.log.debug("%s action: %s, current price:%s, amount:%s" %
                    (code, action, price, amount))
     if ret != 0:
         self.log.warn("post to url fail: ret=%d" % ret)
         return -10
     #check if has error
     reg = re.compile(r'.*alert.*\[-(\d{6,})\]')
     match = reg.search(result.decode('gbk', "ignore"))
     if match:
         if match.group(1) == "150906130":
             return ct.NOT_ENOUGH_MONEY, "no enough money"
         elif match.group(1) == "150906135":
             return ct.NOT_ENOUGH_STOCK, "no enough stocks for sell"
         elif match.group(1) == "999003088":
             return ct.SETTLEMENT_TIME, "deal forbidden"
         elif match.group(1) == "990297020":
             return ct.NOT_DEAL_TIME, "not in deal time"
         elif match.group(1) == "990265060":
             return ct.NOT_CORRECT_PRICE, "price is not right"
         elif match.group(1) == "150906090":
             return ct.REPEATED_SHENGOU, "new stock can not be duplicated delegation."
         elif match.group(1) == "990221020":
             return ct.NO_SUCH_CODE, "not such code:%s." % code
         else:
             return ct.OTHER_ERROR, "other err"
     else:
         reg = re.compile('.*alert.*新股申购数量超出.*\[(\d{3,})\]')
         match = reg.search(result.decode('gbk', "ignore"))
         if match:
             return ct.SHENGOU_LIMIT, match.group(1)
         else:
             return ct.OTHER_ERROR, "other error"
     #parse the deal id. if not exist return ""
     reg = re.compile(r'alert.*(\d{4})')
     match = reg.search(result.decode("gbk", "ignore"))
     if match:
         return 0, match.group(1)
     else:
         return -5, "err happened need check."
예제 #2
0
 def max_amounts(self, code, price, max_qty):
     "https://trade.cgws.com/cgi-bin/stock/EntrustQuery?function=ajaxMaxAmount&market=0&secuid=0121056913&stkcode=300762&bsflag=B&price=16.280&rand=1551774639858"
     randNum = str(int(time.time())) + "".join(
         map(lambda x: random.choice(string.digits), range(3)))
     market_id = get_market(code)
     post_data = {
         "function": "ajaxMaxAmount",
         "market": market_id,
         "secuid": self.secuids[market_id],
         "stkcode": code,
         "bsflag": "B",
         "price": price,
         "rand": randNum
     }
     (ret, response) = self.session_client.post(STOCK_MONUT, post_data)
     if ret != 0:
         self.log.warn("get to url fail: ret=%d" % ret)
         return -5, "get order url failed"
     try:
         stock_info = response.json()
         return int(stock_info[0]['errorCode']), int(
             stock_info[0]['maxstkqty'])
     except:
         self.log.warn("stock info can not be json.")
         return -6, "stock info can not be json."
예제 #3
0
 def max_amounts(self, code, price):
     randNum = str(int(time.time())) + "".join(
         map(lambda x: random.choice(string.digits), range(3)))
     market_id = get_market(code)
     text_body = {
         "function": "ajaxMaxAmount",
         "market": market_id,
         "secuid": self.secuids[market_id],
         "stkcode": code,
         "bsflag": "B",
         "price": price,
         "rand": randNum
     }
     (ret, result) = self.client.get(STOCK_MONUT, text_body)
     if ret != 0:
         self.log.warn("get to url fail: ret=%d" % ret)
         return -5, "get order url failed"
     stock_info = json.loads(result.decode())
     return int(stock_info[0]['errorCode']), stock_info[0]['maxstkqty']