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."
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."
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']