| | |
| | | is_default=is_default) |
| | | HourCancelBigNumComputer().set_real_place_order_index(code, index, buy_single_index) |
| | | GCancelBigNumComputer().set_real_place_order_index(code, index, buy_single_index, is_default) |
| | | FCancelBigNumComputer().set_real_order_index(code, index) |
| | | FCancelBigNumComputer().set_real_order_index(code, index, is_default) |
| | | |
| | | |
| | | class SecondCancelBigNumComputer: |
| | |
| | | for k in keys: |
| | | code = k.split("-")[-1] |
| | | val = RedisUtils.get(__redis, k) |
| | | CodeDataCacheUtil.set_cache(cls.__real_order_index_cache, code, int(val)) |
| | | val = json.loads(val) |
| | | CodeDataCacheUtil.set_cache(cls.__real_order_index_cache, code, val) |
| | | finally: |
| | | RedisUtils.realse(__redis) |
| | | |
| | |
| | | def __get_redis(cls): |
| | | return cls.__redis_manager.getRedis() |
| | | |
| | | def __set_real_order_index(self, code, index): |
| | | CodeDataCacheUtil.set_cache(self.__real_order_index_cache, code, index) |
| | | RedisUtils.setex_async(self.__db, f"f_cancel_real_order_index-{code}", tool.get_expire(), f"{index}") |
| | | def __set_real_order_index(self, code, index, is_default): |
| | | CodeDataCacheUtil.set_cache(self.__real_order_index_cache, code, (index, is_default)) |
| | | RedisUtils.setex_async(self.__db, f"f_cancel_real_order_index-{code}", tool.get_expire(), json.dumps((index, is_default))) |
| | | |
| | | def __del_real_order_index(self, code): |
| | | CodeDataCacheUtil.clear_cache(self.__real_order_index_cache, code) |
| | |
| | | def __get_real_order_index(self, code): |
| | | val = RedisUtils.get(self.__db, f"f_cancel_real_order_index-{code}") |
| | | if val: |
| | | return int(val) |
| | | val = json.loads(val) |
| | | return val[0] |
| | | return None |
| | | |
| | | def __get_real_order_index_cache(self, code): |
| | |
| | | else: |
| | | return False, "快速成交了50%以下" |
| | | |
| | | # 设置真实的下单位置,返回是否需要撤单 |
| | | def set_real_order_index(self, code, index): |
| | | self.__set_real_order_index(code, index) |
| | | # 设置真实的下单位置 |
| | | def set_real_order_index(self, code, index, is_default): |
| | | self.__set_real_order_index(code, index, is_default) |
| | | |
| | | def place_order_success(self, code): |
| | | self.clear(code) |
| | |
| | | def cancel_success(self, code): |
| | | self.clear(code) |
| | | |
| | | # 是否成交太快需要撤单 |
| | | def need_cancel_for_deal_fast(self, code, trade_index): |
| | | # 判断是否具有真实的下单位置 |
| | | real_order_index_info = self.__get_real_order_index_cache(code) |
| | | if not real_order_index_info: |
| | | return False, "没找到真实下单位" |
| | | if real_order_index_info[1]: |
| | | return False, "真实下单位为默认" |
| | | if real_order_index_info[0] <= trade_index: |
| | | return False, "真实下单位在成交位之前" |
| | | real_order_index = real_order_index_info[0] |
| | | # 统计未撤订单的数量与金额 |
| | | total_datas = local_today_datas.get(code) |
| | | # 是否是下单5分钟内 |
| | | if tool.trade_time_sub(tool.get_now_time_str(),total_datas[real_order_index]['val']['time']) > 5*60: |
| | | return False, "下单超过5分钟" |
| | | |
| | | total_left_count = 0 |
| | | total_left_num = 0 |
| | | for i in range(trade_index + 1, real_order_index_info[0]): |
| | | data = total_datas[i] |
| | | val = data["val"] |
| | | if not L2DataUtil.is_limit_up_price_buy(val): |
| | | continue |
| | | if val["num"] * float(val["price"]) < 5000: |
| | | continue |
| | | left_count = l2_data_source_util.L2DataSourceUtils.get_limit_up_buy_no_canceled_count_v2(code, |
| | | i, |
| | | total_datas, |
| | | local_today_canceled_buyno_map.get( |
| | | code)) |
| | | if left_count > 0: |
| | | total_left_count += left_count |
| | | total_left_num += val["num"] * left_count |
| | | if total_left_count < 10: |
| | | return True, f"剩余笔数不足({total_left_count}),成交进度:{trade_index},真实下单位置:{real_order_index}" |
| | | limit_up_price = gpcode_manager.get_limit_up_price(code) |
| | | if limit_up_price and total_left_num * float(limit_up_price) < 1000*100: |
| | | return True, f"剩余金额不足({round(total_left_num * float(limit_up_price)*100)}),成交进度:{trade_index},真实下单位置:{real_order_index}" |
| | | return False, "不满足撤单条件" |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | # ---------------------------------G撤------------------------------- |
| | | class GCancelBigNumComputer: |