| | |
| | | |
| | | # 大单管理 |
| | | from db import redis_manager |
| | | from db.redis_manager import RedisUtils |
| | | from utils import tool |
| | | |
| | | __redisManager = redis_manager.RedisManager(0) |
| | |
| | | # 设置过期时间 |
| | | def expire(code): |
| | | redis = __redisManager.getRedis() |
| | | redis.expire("big_money-{}".format(code), tool.get_expire()) |
| | | RedisUtils.expire(redis, "big_money-{}".format(code), tool.get_expire()) |
| | | |
| | | |
| | | def reset(code): |
| | |
| | | |
| | | def reset_all(): |
| | | redis = __redisManager.getRedis() |
| | | keys = redis.keys("big_money-*") |
| | | keys = RedisUtils.keys(redis, "big_money-*") |
| | | for k in keys: |
| | | redis.setex(k, tool.get_expire(), 0) |
| | | RedisUtils.setex(redis, k, tool.get_expire(), 0) |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | |
| | | |
| | | from code_attribute import gpcode_manager |
| | | from db import mysql_data, redis_manager |
| | | from db.redis_manager import RedisUtils |
| | | from utils import tool |
| | | |
| | | _redisManager = redis_manager.RedisManager(0) |
| | |
| | | @classmethod |
| | | def save(cls, code, val, unit): |
| | | redis = _redisManager.getRedis() |
| | | redis.setex("zyltgb-{}".format(code), tool.get_expire(), |
| | | RedisUtils.setex(redis,"zyltgb-{}".format(code), tool.get_expire(), |
| | | round(float(val) * 100000000) if int(unit) == 0 else round( |
| | | float(val) * 10000)) |
| | | |
| | | @classmethod |
| | | def get(cls, code): |
| | | redis = _redisManager.getRedis() |
| | | val = redis.get("zyltgb-{}".format(code)) |
| | | val = RedisUtils.get(redis, "zyltgb-{}".format(code)) |
| | | if val is not None: |
| | | return int(val) |
| | | return None |
| | |
| | | |
| | | if __name__ == "__main__": |
| | | redis = _redisManager.getRedis() |
| | | keys = redis.keys("zyltgb-*") |
| | | keys = RedisUtils.keys(redis, "zyltgb-*") |
| | | for key in keys: |
| | | redis.delete(key) |
| | | RedisUtils.delete(redis, key) |
| | |
| | | |
| | | # 代码股性记录管理 |
| | | from utils import tool |
| | | from db.redis_manager import RedisManager |
| | | from db.redis_manager import RedisManager, RedisUtils |
| | | |
| | | |
| | | class CodeNatureRecordManager: |
| | |
| | | # 保存K线形态 |
| | | @classmethod |
| | | def save_k_format(cls, code, k_format): |
| | | cls.__get_redis().setex(f"k_format-{code}", tool.get_expire(), json.dumps(k_format)) |
| | | RedisUtils.setex(cls.__get_redis(),f"k_format-{code}", tool.get_expire(), json.dumps(k_format)) |
| | | |
| | | @classmethod |
| | | def get_k_format(cls, code): |
| | |
| | | # 保存股性 |
| | | @classmethod |
| | | def save_nature(cls, code, natures): |
| | | cls.__get_redis().setex(f"code_nature-{code}", tool.get_expire(), json.dumps(natures)) |
| | | RedisUtils.setex(cls.__get_redis(),f"code_nature-{code}", tool.get_expire(), json.dumps(natures)) |
| | | |
| | | @classmethod |
| | | def get_nature(cls, code): |
| | |
| | | # yesterday 昨天的量 |
| | | import json |
| | | |
| | | from db.redis_manager import RedisUtils |
| | | from utils import global_util, tool |
| | | from db import redis_manager |
| | | from log_module.log import logger_day_volumn |
| | |
| | | redis = __redis_manager.getRedis() |
| | | global_util.max60_volumn[code] = (max60, max60_day) |
| | | global_util.yesterday_volumn[code] = yesterday |
| | | redis.setex("volumn_max60-{}".format(code), tool.get_expire(), json.dumps((max60, max60_day))) |
| | | redis.setex("volumn_yes-{}".format(code), tool.get_expire(), yesterday) |
| | | RedisUtils.setex(redis, "volumn_max60-{}".format(code), tool.get_expire(), json.dumps((max60, max60_day))) |
| | | RedisUtils.setex(redis, "volumn_yes-{}".format(code), tool.get_expire(), yesterday) |
| | | |
| | | |
| | | # 获取历史量 |
| | |
| | | logger_day_volumn.info("code:{} volumn:{}".format(code, volumn)) |
| | | redis = __redis_manager.getRedis() |
| | | global_util.today_volumn[code] = volumn |
| | | redis.setex("volumn_today-{}".format(code), tool.get_expire(), volumn) |
| | | RedisUtils.setex(redis, "volumn_today-{}".format(code), tool.get_expire(), volumn) |
| | | |
| | | |
| | | # 获取今日量 |
| | |
| | | # 将量从数据库加入内存 |
| | | def load(): |
| | | redis = __redis_manager.getRedis() |
| | | keys = redis.keys("volumn_max60-*") |
| | | keys = RedisUtils.keys(redis, "volumn_max60-*") |
| | | if keys is not None: |
| | | for k in keys: |
| | | code = k.split("-")[1] |
| | |
| | | if max60_volumn: |
| | | max60_volumn = json.loads(max60_volumn) |
| | | global_util.max60_volumn[code] = max60_volumn |
| | | keys = redis.keys("volumn_yes-*") |
| | | keys = RedisUtils.keys(redis, "volumn_yes-*") |
| | | if keys is not None: |
| | | for k in keys: |
| | | code = k.split("-")[1] |
| | |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | | print(get_volume_rate("000059")) |
| | | print(get_volume_rate("000059")) |
| | |
| | | # 设置首板未筛选的目标票 |
| | | import json |
| | | |
| | | from db.redis_manager import RedisUtils |
| | | from utils import tool |
| | | from db import redis_manager |
| | | from third_data import block_info |
| | |
| | | # 4.最近炸开时间 |
| | | # 5.是否已经涨停 |
| | | def __save_first_code_data(code, data): |
| | | __redisManager.getRedis().setex(f"first_code_data-{code}", tool.get_expire(), json.dumps(data)) |
| | | RedisUtils.setex(__redisManager.getRedis(),f"first_code_data-{code}", tool.get_expire(), json.dumps(data)) |
| | | |
| | | |
| | | def __get_first_code_data(code): |
| | | val = __get_redis().get(f"first_code_data-{code}") |
| | | val = RedisUtils.get(__get_redis(), f"first_code_data-{code}") |
| | | if val is None: |
| | | return None |
| | | return json.loads(val) |
| | |
| | | redis = __redisManager.getRedis() |
| | | if codes: |
| | | for code in codes: |
| | | redis.sadd("first_no_screen_codes", code) |
| | | redis.expire("first_no_screen_codes", tool.get_expire()) |
| | | RedisUtils.sadd(redis, "first_no_screen_codes", code) |
| | | RedisUtils.expire(redis, "first_no_screen_codes", tool.get_expire()) |
| | | |
| | | |
| | | def clear_first_no_screen_codes(): |
| | | redis = __redisManager.getRedis() |
| | | redis.delete("first_no_screen_codes") |
| | | RedisUtils.delete(redis, "first_no_screen_codes") |
| | | |
| | | |
| | | def __remove_first_no_screen_codes(codes): |
| | |
| | | |
| | | |
| | | def __get_first_no_screen_codes(): |
| | | codes = __get_redis().smembers("first_no_screen_codes") |
| | | codes = RedisUtils.smembers(__get_redis(), "first_no_screen_codes") |
| | | if not codes: |
| | | return set() |
| | | return codes |
| | |
| | | |
| | | import constant |
| | | from db import redis_manager |
| | | from db.redis_manager import RedisUtils |
| | | from utils import tool |
| | | import decimal |
| | | |
| | |
| | | |
| | | @classmethod |
| | | def list_first_code_name_dict(cls): |
| | | val = cls.__get_redis().get("gp_list_names_first") |
| | | val = RedisUtils.get(cls.__get_redis(), "gp_list_names_first") |
| | | if val is not None: |
| | | val = json.loads(val) |
| | | return val |
| | |
| | | |
| | | @classmethod |
| | | def list_second_code_name_dict(cls): |
| | | val = cls.__get_redis().get("gp_list_names") |
| | | val = RedisUtils.get(cls.__get_redis(), "gp_list_names") |
| | | if val is not None: |
| | | val = json.loads(val) |
| | | return val |
| | |
| | | |
| | | @classmethod |
| | | def get_first_code_name(cls, code): |
| | | val = cls.__get_redis().get("gp_list_names_first") |
| | | val = RedisUtils.get(cls.__get_redis(), "gp_list_names_first") |
| | | if not val: |
| | | return None |
| | | val = json.loads(val) |
| | |
| | | |
| | | @classmethod |
| | | def get_second_code_name(cls, code): |
| | | val = cls.__get_redis().get("gp_list_names") |
| | | val = RedisUtils.get(cls.__get_redis(), "gp_list_names") |
| | | if not val: |
| | | return None |
| | | val = json.loads(val) |
| | |
| | | |
| | | @classmethod |
| | | def get_first_name_code(cls, name): |
| | | val = cls.__get_redis().get("gp_list_names_first") |
| | | val = RedisUtils.get(cls.__get_redis(), "gp_list_names_first") |
| | | if not val: |
| | | return None |
| | | val = json.loads(val) |
| | |
| | | |
| | | @classmethod |
| | | def add_first_code_name(cls, code, name): |
| | | val = cls.__get_redis().get("gp_list_names_first") |
| | | val = RedisUtils.get(cls.__get_redis(), "gp_list_names_first") |
| | | if not val: |
| | | return None |
| | | val = json.loads(val) |
| | |
| | | |
| | | @classmethod |
| | | def get_second_name_code(cls, name): |
| | | val = cls.__get_redis().get("gp_list_names") |
| | | val = RedisUtils.get(cls.__get_redis(), "gp_list_names") |
| | | if not val: |
| | | return None |
| | | val = json.loads(val) |
| | |
| | | # 删除首板代码名称 |
| | | @classmethod |
| | | def clear_first_code_names(cls): |
| | | cls.__get_redis().delete("gp_list_names_first") |
| | | RedisUtils.delete(cls.__get_redis(), "gp_list_names_first") |
| | | |
| | | # 设置二板代码名称 |
| | | @classmethod |
| | | def clear_second_code_names(cls): |
| | | cls.__get_redis().delete("gp_list_names") |
| | | RedisUtils.delete(cls.__get_redis(), "gp_list_names") |
| | | |
| | | |
| | | # 首板代码管理 |
| | |
| | | @classmethod |
| | | def add_record(cls, codes): |
| | | for code in codes: |
| | | cls.__get_redis().sadd("first_code_record", code) |
| | | cls.__get_redis().expire("first_code_record", tool.get_expire()) |
| | | RedisUtils.sadd(cls.__get_redis(), "first_code_record", code) |
| | | RedisUtils.expire(cls.__get_redis(), "first_code_record", tool.get_expire()) |
| | | |
| | | @classmethod |
| | | def is_in_first_record(cls, code): |
| | |
| | | @classmethod |
| | | def add_limited_up_record(cls, codes): |
| | | for code in codes: |
| | | cls.__get_redis().sadd("first_code_limited_up_record", code) |
| | | cls.__get_redis().expire("first_code_limited_up_record", tool.get_expire()) |
| | | RedisUtils.sadd(cls.__get_redis(), "first_code_limited_up_record", code) |
| | | RedisUtils.expire(cls.__get_redis(), "first_code_limited_up_record", tool.get_expire()) |
| | | |
| | | # 是否涨停过 |
| | | @classmethod |
| | |
| | | |
| | | @classmethod |
| | | def clear(cls): |
| | | cls.__get_redis().delete(cls.__redis_key) |
| | | RedisUtils.delete(cls.__get_redis(), cls.__redis_key) |
| | | |
| | | @classmethod |
| | | def add_code(cls, code): |
| | | cls.__get_redis().sadd(cls.__redis_key, code) |
| | | cls.__get_redis().expire(cls.__redis_key, tool.get_expire()) |
| | | RedisUtils.sadd(cls.__get_redis(), cls.__redis_key, code) |
| | | RedisUtils.expire(cls.__get_redis(), cls.__redis_key, tool.get_expire()) |
| | | |
| | | @classmethod |
| | | def remove_code(cls, code): |
| | |
| | | |
| | | @classmethod |
| | | def list_code(cls): |
| | | return cls.__get_redis().smembers(cls.__redis_key) |
| | | return RedisUtils.smembers(cls.__get_redis(), cls.__redis_key) |
| | | |
| | | |
| | | # 暂停下单代码管理 |
| | |
| | | |
| | | @classmethod |
| | | def clear(cls): |
| | | cls.__get_redis().delete(cls.__redis_key) |
| | | RedisUtils.delete(cls.__get_redis(), cls.__redis_key) |
| | | |
| | | @classmethod |
| | | def add_code(cls, code): |
| | | cls.__get_redis().sadd(cls.__redis_key, code) |
| | | cls.__get_redis().expire(cls.__redis_key, tool.get_expire()) |
| | | RedisUtils.sadd(cls.__get_redis(), cls.__redis_key, code) |
| | | RedisUtils.expire(cls.__get_redis(), cls.__redis_key, tool.get_expire()) |
| | | |
| | | @classmethod |
| | | def remove_code(cls, code): |
| | |
| | | |
| | | @classmethod |
| | | def list_code(cls): |
| | | return cls.__get_redis().smembers(cls.__redis_key) |
| | | return RedisUtils.smembers(cls.__get_redis(), cls.__redis_key) |
| | | |
| | | |
| | | def __parse_codes_data(code_datas): |
| | |
| | | codes, name_codes = __parse_codes_data(code_datas) |
| | | redis_instance = __redisManager.getRedis() |
| | | # 删除之前的 |
| | | redis_instance.delete("gp_list") |
| | | RedisUtils.delete(redis_instance, "gp_list") |
| | | CodesNameManager.clear_second_code_names() |
| | | for d in codes: |
| | | redis_instance.sadd("gp_list", d) |
| | | RedisUtils.sadd(redis_instance, "gp_list", d) |
| | | CodesNameManager.set_second_code_names(name_codes) |
| | | |
| | | |
| | |
| | | redis_instance = __redisManager.getRedis() |
| | | codes, name_codes = __parse_codes_data(code_datas) |
| | | for d in codes: |
| | | redis_instance.sadd("gp_list", d) |
| | | RedisUtils.sadd(redis_instance, "gp_list", d) |
| | | old_name_codes = CodesNameManager.list_second_code_name_dict() |
| | | if old_name_codes is None: |
| | | old_name_codes = name_codes |
| | |
| | | codes_set = set() |
| | | for code in codes: |
| | | codes_set.add(code) |
| | | old_codes_set = redis_instance.smembers("gp_list_first") |
| | | old_codes_set = RedisUtils.smembers(redis_instance, "gp_list_first") |
| | | if old_codes_set is None: |
| | | old_codes_set = set() |
| | | del_set = old_codes_set - codes_set |
| | | add_codes = codes_set - old_codes_set |
| | | for code in add_codes: |
| | | redis_instance.sadd("gp_list_first", code) |
| | | RedisUtils.sadd(redis_instance, "gp_list_first", code) |
| | | for code in del_set: |
| | | redis_instance.srem("gp_list_first", code) |
| | | redis_instance.expire("gp_list_first", tool.get_expire()) |
| | | RedisUtils.expire(redis_instance, "gp_list_first", tool.get_expire()) |
| | | |
| | | old_name_codes = CodesNameManager.list_first_code_name_dict() |
| | | if old_name_codes is None: |
| | |
| | | # 获取首板代码 |
| | | def get_first_gp_codes(): |
| | | redis_instance = __redisManager.getRedis() |
| | | return redis_instance.smembers("gp_list_first") |
| | | return RedisUtils.smembers(redis_instance, "gp_list_first") |
| | | |
| | | |
| | | # 是否在首板里面 |
| | |
| | | # 获取基本信息 |
| | | redis_instance = __redisManager.getRedis() |
| | | # 删除之前的 |
| | | redis_instance.delete("gp_limit_up_list") |
| | | RedisUtils.delete(redis_instance, "gp_limit_up_list") |
| | | for d in gpset: |
| | | redis_instance.sadd("gp_limit_up_list", json.dumps(d)) |
| | | redis_instance.expire("gp_limit_up_list", tool.get_expire()) |
| | | redis_instance.setex("gp_limit_up_list_update_time", tool.get_expire(), round(time.time() * 1000)) |
| | | RedisUtils.sadd(redis_instance, "gp_limit_up_list", json.dumps(d)) |
| | | RedisUtils.expire(redis_instance, "gp_limit_up_list", tool.get_expire()) |
| | | RedisUtils.setex(redis_instance, "gp_limit_up_list_update_time", tool.get_expire(), round(time.time() * 1000)) |
| | | |
| | | |
| | | # 获取涨停列表 |
| | | def get_limit_up_list(): |
| | | redis_instance = __redisManager.getRedis() |
| | | return redis_instance.get("gp_limit_up_list_update_time"), redis_instance.smembers("gp_limit_up_list") |
| | | return RedisUtils.get(redis_instance, "gp_limit_up_list_update_time"), RedisUtils.smembers(redis_instance, |
| | | "gp_limit_up_list") |
| | | |
| | | |
| | | def rm_gp(code): |
| | |
| | | |
| | | def get_gp_list(): |
| | | redis_instance = __redisManager.getRedis() |
| | | codes = redis_instance.smembers("gp_list") |
| | | codes = RedisUtils.smembers(redis_instance, "gp_list") |
| | | first_codes = get_first_gp_codes() |
| | | return set.union(codes, first_codes) |
| | | |
| | |
| | | # 获取二板代码 |
| | | def get_second_gp_list(): |
| | | redis_instance = __redisManager.getRedis() |
| | | codes = redis_instance.smembers("gp_list") |
| | | codes = RedisUtils.smembers(redis_instance, "gp_list") |
| | | return codes |
| | | |
| | | |
| | |
| | | # 获取收盘价 |
| | | def get_price_pre(code): |
| | | redis_instance = __redisManager.getRedis() |
| | | result = redis_instance.get("price-pre-{}".format(code)) |
| | | result = RedisUtils.get(redis_instance, "price-pre-{}".format(code)) |
| | | if result is not None: |
| | | return float(result) |
| | | return None |
| | |
| | | if code not in codes and not FirstCodeManager.is_in_first_record(code) and not force: |
| | | return |
| | | redis_instance = __redisManager.getRedis() |
| | | redis_instance.setex("price-pre-{}".format(code), tool.get_expire(), str(price)) |
| | | RedisUtils.setex(redis_instance, "price-pre-{}".format(code), tool.get_expire(), str(price)) |
| | | |
| | | |
| | | __limit_up_price_dict = {} |
| | |
| | | # 获取现价 |
| | | def get_price(code): |
| | | redis_instance = __redisManager.getRedis() |
| | | result = redis_instance.get("price-{}".format(code)) |
| | | result = RedisUtils.get(redis_instance, "price-{}".format(code)) |
| | | if result is not None: |
| | | return float(result) |
| | | return None |
| | |
| | | # 设置现价 |
| | | def set_price(code, price): |
| | | redis_instance = __redisManager.getRedis() |
| | | redis_instance.setex("price-{}".format(code), tool.get_expire(), price) |
| | | RedisUtils.setex(redis_instance, "price-{}".format(code), tool.get_expire(), price) |
| | | |
| | | |
| | | # 获取正在监听的代码 |
| | | def get_listen_codes(): |
| | | redis_instance = __redisManager.getRedis() |
| | | keys = redis_instance.keys("listen_code-*-*") |
| | | keys = RedisUtils.keys(redis_instance, "listen_code-*-*") |
| | | codes = set() |
| | | for k in keys: |
| | | code = redis_instance.get(k) |
| | | code = RedisUtils.get(redis_instance, k) |
| | | if code is not None and len(code) > 0: |
| | | codes.add(code) |
| | | return codes |
| | |
| | | def get_listen_code_by_pos(client_id, pos): |
| | | redis_instance = __redisManager.getRedis() |
| | | key = "listen_code-{}-{}".format(client_id, pos) |
| | | value = redis_instance.get(key) |
| | | value = RedisUtils.get(redis_instance, key) |
| | | # print("redis:", key,value) |
| | | return value |
| | | |
| | |
| | | # 设置位置的监听代码 |
| | | def set_listen_code_by_pos(client_id, pos, code): |
| | | redis_instance = __redisManager.getRedis() |
| | | redis_instance.setex("listen_code-{}-{}".format(client_id, pos), tool.get_expire(), code) |
| | | RedisUtils.setex(redis_instance, "listen_code-{}-{}".format(client_id, pos), tool.get_expire(), code) |
| | | # 同步监听的代码集合 |
| | | __sync_listen_codes_pos() |
| | | |
| | |
| | | def __sync_listen_codes_pos(): |
| | | redis_instance = __redisManager.getRedis() |
| | | # 获取已经正在监听的代码 |
| | | keys = redis_instance.keys("code_listen_pos-*") |
| | | keys = RedisUtils.keys(redis_instance, "code_listen_pos-*") |
| | | codes_set = set() |
| | | for key in keys: |
| | | codes_set.add(key.replace("code_listen_pos-", "")) |
| | | |
| | | keys = redis_instance.keys("listen_code-*-*") |
| | | keys = RedisUtils.keys(redis_instance, "listen_code-*-*") |
| | | |
| | | for key in keys: |
| | | result = redis_instance.get(key) |
| | |
| | | key_ = "code_listen_pos-{}".format(code_) |
| | | val = redis_instance.get(key_) |
| | | if val is None: |
| | | redis_instance.setex(key_, tool.get_expire(), json.dumps((client_id_, pos_))) |
| | | RedisUtils.setex(redis_instance, key_, tool.get_expire(), json.dumps((client_id_, pos_))) |
| | | else: |
| | | val = json.loads(val) |
| | | if val[0] != client_id_ or val[1] != pos_: |
| | | redis_instance.setex(key_, tool.get_expire(), json.dumps((client_id_, pos_))) |
| | | RedisUtils.setex(redis_instance, key_, tool.get_expire(), json.dumps((client_id_, pos_))) |
| | | |
| | | # 移除没有监听的代码 |
| | | for code_ in codes_set: |
| | | redis_instance.delete(code_) |
| | | RedisUtils.delete(redis_instance, code_) |
| | | |
| | | |
| | | # 初始化位置 |
| | |
| | | redis_instance = __redisManager.getRedis() |
| | | key = "listen_code-{}-{}".format(client_id, pos) |
| | | redis_instance.setnx(key, "") |
| | | redis_instance.expire(key, tool.get_expire()) |
| | | RedisUtils.expire(redis_instance, key, tool.get_expire()) |
| | | |
| | | |
| | | # 清除所有监听代码 |
| | | def clear_listen_codes(): |
| | | redis_instance = __redisManager.getRedis() |
| | | keys = redis_instance.keys("listen_code-*-*") |
| | | keys = RedisUtils.keys(redis_instance, "listen_code-*-*") |
| | | for key in keys: |
| | | redis_instance.setex(key, tool.get_expire(), "") |
| | | RedisUtils.setex(redis_instance, key, tool.get_expire(), "") |
| | | |
| | | |
| | | def clear_first_codes(): |
| | | redis_instance = __redisManager.getRedis() |
| | | redis_instance.delete("gp_list_first") |
| | | redis_instance.delete("gp_list_names_first") |
| | | redis_instance.delete("first_code_record") |
| | | redis_instance.delete("first_code_limited_up_record") |
| | | RedisUtils.delete(redis_instance, "gp_list_first") |
| | | RedisUtils.delete(redis_instance, "gp_list_names_first") |
| | | RedisUtils.delete(redis_instance, "first_code_record") |
| | | RedisUtils.delete(redis_instance, "first_code_limited_up_record") |
| | | |
| | | |
| | | # 获取可以操作的位置 |
| | |
| | | for client_id in client_ids: |
| | | redis_instance = __redisManager.getRedis() |
| | | k = "listen_code-{}-*".format(client_id) |
| | | keys = redis_instance.keys(k) |
| | | keys = RedisUtils.keys(redis_instance, k) |
| | | # random.shuffle(keys) |
| | | codes = [] |
| | | for key in keys: |
| | |
| | | for client_id in client_ids: |
| | | redis_instance = __redisManager.getRedis() |
| | | k = "listen_code-{}-*".format(client_id) |
| | | keys = redis_instance.keys(k) |
| | | keys = RedisUtils.keys(redis_instance, k) |
| | | for key in keys: |
| | | code = redis_instance.get(key) |
| | | if not code: |
| | |
| | | # 设置正在操作的代码 |
| | | def set_operate(code): |
| | | redis_instance = __redisManager.getRedis() |
| | | redis_instance.setex("gp_operate-{}".format(code), 30, "1") |
| | | RedisUtils.setex( |
| | | redis_instance, "gp_operate-{}".format(code), 30, "1") |
| | | |
| | | |
| | | # 批量设置正在操作的代码 |
| | | def set_operates(codes): |
| | | redis_instance = __redisManager.getRedis() |
| | | for code in codes: |
| | | redis_instance.setex("gp_operate-{}".format(code), 30, "1") |
| | | RedisUtils.setex( |
| | | redis_instance, "gp_operate-{}".format(code), 30, "1") |
| | | |
| | | |
| | | # 移除正在操作的代码 |
| | | def rm_operate(code): |
| | | redis_instance = __redisManager.getRedis() |
| | | redis_instance.delete("gp_operate-{}".format(code)) |
| | | RedisUtils.delete(redis_instance, "gp_operate-{}".format(code)) |
| | | |
| | | |
| | | # 批量移除正在操作的代码 |
| | | def rm_operates(codes): |
| | | redis_instance = __redisManager.getRedis() |
| | | for code in codes: |
| | | redis_instance.delete("gp_operate-{}".format(code)) |
| | | RedisUtils.delete(redis_instance, "gp_operate-{}".format(code)) |
| | | |
| | | |
| | | if __name__ == '__main__': |
| | |
| | | 涨停时间管理器 |
| | | """ |
| | | from db import redis_manager |
| | | from db.redis_manager import RedisUtils |
| | | from utils import global_util, tool |
| | | |
| | | _redisManager = redis_manager.RedisManager(0) |
| | |
| | | _time = get_limit_up_time(code) |
| | | if _time is None: |
| | | redis = _redisManager.getRedis() |
| | | redis.setex("limit_up_time-{}".format(code), tool.get_expire(), time) |
| | | RedisUtils.setex( |
| | | redis, "limit_up_time-{}".format(code), tool.get_expire(), time) |
| | | global_util.limit_up_time[code] = time |
| | | |
| | | |
| | |
| | | time = global_util.limit_up_time.get(code) |
| | | if time is None: |
| | | redis = _redisManager.getRedis() |
| | | time = redis.get("limit_up_time-{}".format(code)) |
| | | time = RedisUtils.get(redis, "limit_up_time-{}".format(code)) |
| | | if time is not None: |
| | | global_util.limit_up_time[code] = time |
| | | |
| | |
| | | |
| | | def load_limit_up_time(): |
| | | redis = _redisManager.getRedis() |
| | | keys = redis.keys("limit_up_time-*") |
| | | keys = RedisUtils.keys(redis, "limit_up_time-*") |
| | | for key in keys: |
| | | code = key.replace("limit_up_time-", "") |
| | | global_util.limit_up_time[code] = redis.get(key) |
| | | global_util.limit_up_time[code] = RedisUtils.get(redis, key) |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | | list = [("1234578", "09:00:03",None), ("12345", "09:00:01",True), ("123456", "09:00:00",True), ("123457", "09:00:04",False)] |
| | | list = [("1234578", "09:00:03", None), ("12345", "09:00:01", True), ("123456", "09:00:00", True), |
| | | ("123457", "09:00:04", False)] |
| | |
| | | return redis.Redis(connection_pool=self.pool) |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | | _redisManager = RedisManager(0) |
| | | redis = _redisManager.getRedis() |
| | | keys = redis.keys("volumn_max60-*") |
| | | for k in keys: |
| | | # print(k) |
| | | redis.delete(k) |
| | | class RedisUtils: |
| | | |
| | | @classmethod |
| | | def get(cls, redis_, key): |
| | | return redis_.get(key) |
| | | |
| | | @classmethod |
| | | def delete(cls, redis_, key): |
| | | return redis_.delete(key) |
| | | |
| | | @classmethod |
| | | def keys(cls, redis_, key): |
| | | return redis_.keys(key) |
| | | |
| | | @classmethod |
| | | def set(cls, redis_, key, val): |
| | | return redis_.set(key, val) |
| | | |
| | | @classmethod |
| | | def setex(cls, redis_, key, expire, val): |
| | | return redis_.setex(key, expire, val) |
| | | |
| | | @classmethod |
| | | def expire(cls, redis_, key, expire): |
| | | return redis_.expire(key, expire) |
| | | |
| | | @classmethod |
| | | def sadd(cls, redis_, key, val): |
| | | return redis_.sadd(key, val) |
| | | |
| | | @classmethod |
| | | def smembers(cls, redis_, key): |
| | | return redis_.smembers(key) |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | | pass |
| | |
| | | |
| | | import win32gui |
| | | |
| | | from db.redis_manager import RedisUtils |
| | | from utils import data_export_util |
| | | import multiprocessing |
| | | |
| | |
| | | try: |
| | | redis = redis_manager.RedisManager().getRedis() |
| | | redis.set("test", "1") |
| | | redis.delete("test") |
| | | RedisUtils.delete(redis, "test") |
| | | text.insert(END, "redis连接成功!\n") |
| | | except: |
| | | error = "redis连接失败...\n" |
| | |
| | | def __draw_pre_data_check(self, frame): |
| | | def refresh_close_price_data(): |
| | | redis = redis_manager.RedisManager(0).getRedis() |
| | | count = len(redis.keys("price-pre-*")) |
| | | count = len(RedisUtils.keys(redis, "price-pre-*")) |
| | | sv_num.set("获取到收盘价数量:{}".format(count)) |
| | | |
| | | def re_get_close_price(): |
| | |
| | | |
| | | def export_l2_data_origin(code): |
| | | redis = redis_manager.RedisManager(1).getRedis() |
| | | keys = redis.keys("big_data-{}-*".format(code)) |
| | | keys = RedisUtils.keys(redis, "big_data-{}-*".format(code)) |
| | | try: |
| | | for k in keys: |
| | | datas = redis.get(k) |
| | |
| | | import gm.api as gmapi |
| | | |
| | | from code_attribute import big_money_num_manager, global_data_loader, gpcode_manager, gpcode_first_screen_manager |
| | | from db.redis_manager import RedisUtils |
| | | from ths import client_manager |
| | | import constant |
| | | from utils import global_util, tool |
| | |
| | | # 设置账户信息 |
| | | def setAccountInfo(accountId, strategyId, token): |
| | | redis = redisManager.getRedis() |
| | | redis.set("juejin-account-id", accountId) |
| | | redis.set("juejin-strategy-id", strategyId) |
| | | redis.set("juejin-token", token) |
| | | RedisUtils.set(redis,"juejin-account-id", accountId) |
| | | RedisUtils.set(redis,"juejin-strategy-id", strategyId) |
| | | RedisUtils.set( redis, "juejin-token", token) |
| | | |
| | | |
| | | def getAccountInfo(): |
| | | redis = redisManager.getRedis() |
| | | account_id = redis.get("juejin-account-id") |
| | | strategy_id = redis.get("juejin-strategy-id") |
| | | token = redis.get("juejin-token") |
| | | account_id =RedisUtils.get( redis, "juejin-account-id") |
| | | strategy_id = RedisUtils.get(redis, "juejin-strategy-id") |
| | | token = RedisUtils.get(redis, "juejin-token") |
| | | return account_id, strategy_id, token |
| | | |
| | | |
| | |
| | | from code_attribute import big_money_num_manager, gpcode_manager |
| | | import l2_data_util |
| | | from db import redis_manager |
| | | from db.redis_manager import RedisUtils |
| | | from utils import tool |
| | | from l2.safe_count_manager import BuyL2SafeCountManager |
| | | from l2.transaction_progress import TradeBuyQueue |
| | |
| | | __s_big_num_cancel_compute_data_cache = {} |
| | | |
| | | @classmethod |
| | | def __getRedis(cls): |
| | | def __get_redis(cls): |
| | | return cls.__redis_manager.getRedis() |
| | | |
| | | # 保存结束位置 |
| | |
| | | CodeDataCacheUtil.set_cache(cls.__s_big_num_cancel_compute_data_cache, code, |
| | | (process_index, buy_num, cancel_num)) |
| | | key = "s_big_num_cancel_compute_data-{}".format(code) |
| | | cls.__getRedis().setex(key, tool.get_expire(), json.dumps((process_index, buy_num, cancel_num))) |
| | | RedisUtils.setex( cls.__get_redis(),key, tool.get_expire(), json.dumps((process_index, buy_num, cancel_num))) |
| | | |
| | | @classmethod |
| | | def __get_compute_data(cls, code): |
| | | key = "s_big_num_cancel_compute_data-{}".format(code) |
| | | val = cls.__getRedis().get(key) |
| | | val = RedisUtils.get(cls.__get_redis(), key) |
| | | if val is None: |
| | | return -1, 0, 0 |
| | | val = json.loads(val) |
| | |
| | | CodeDataCacheUtil.clear_cache(cls.__s_big_num_cancel_compute_data_cache, code) |
| | | ks = ["s_big_num_cancel_compute_data-{}".format(code)] |
| | | for key in ks: |
| | | cls.__getRedis().delete(key) |
| | | RedisUtils.delete(cls.__get_redis(), key) |
| | | |
| | | @classmethod |
| | | def clear_data(cls): |
| | | ks = ["s_big_num_cancel_compute_data-*"] |
| | | for key in ks: |
| | | keys = cls.__getRedis().keys(key) |
| | | keys = RedisUtils.keys(cls.__get_redis(), key) |
| | | for k in keys: |
| | | code = k.replace("s_big_num_cancel_compute_data-","") |
| | | cls.__clear_data(code) |
| | |
| | | __cancel_compute_data_cache = {} |
| | | |
| | | @classmethod |
| | | def __getRedis(cls): |
| | | def __get_redis(cls): |
| | | return cls.__redis_manager.getRedis() |
| | | |
| | | # 保存成交位置到执行位置的揽括范围数据 |
| | |
| | | def __save_watch_index_set(cls, code, datas, process_index, finish): |
| | | CodeDataCacheUtil.set_cache(cls.__cancel_watch_indexs_cache, code, (list(datas), process_index, finish)) |
| | | key = f"h_cancel_watch_indexs-{code}" |
| | | cls.__getRedis().setex(key, tool.get_expire(), json.dumps((list(datas), process_index, finish))) |
| | | RedisUtils.setex(cls.__get_redis(),key, tool.get_expire(), json.dumps((list(datas), process_index, finish))) |
| | | |
| | | # 保存成交进度 |
| | | @classmethod |
| | | def __get_watch_index_set(cls, code): |
| | | key = f"h_cancel_watch_indexs-{code}" |
| | | val = cls.__getRedis().get(key) |
| | | val = RedisUtils.get(cls.__get_redis(), key) |
| | | if val is None: |
| | | return None, -1, False |
| | | val = json.loads(val) |
| | |
| | | CodeDataCacheUtil.set_cache(cls.__cancel_watch_indexs_exec_cache, code, |
| | | (list(datas), process_index, total_count, big_num_count, finished)) |
| | | key = f"h_cancel_watch_indexs_exec-{code}" |
| | | cls.__getRedis().setex(key, tool.get_expire(), |
| | | RedisUtils.setex( cls.__get_redis(),key, tool.get_expire(), |
| | | json.dumps((list(datas), process_index, total_count, big_num_count, finished))) |
| | | |
| | | # 保存成交进度 |
| | | @classmethod |
| | | def __get_watch_index_set_after_exec(cls, code): |
| | | key = f"h_cancel_watch_indexs_exec-{code}" |
| | | val = cls.__getRedis().get(key) |
| | | val = RedisUtils.get(cls.__get_redis(), key) |
| | | if val is None: |
| | | return [], -1, 0, 0, False |
| | | val = json.loads(val) |
| | |
| | | def __add_watch_canceled_index(cls, code, index): |
| | | CodeDataCacheUtil.clear_cache(cls.__cancel_watch_canceled_indexs_cache, code) |
| | | key = f"h_cancel_watch_canceled_indexs-{code}" |
| | | cls.__getRedis().sadd(key, index) |
| | | cls.__getRedis().expire(key, tool.get_expire()) |
| | | RedisUtils.sadd(cls.__get_redis(), key, index) |
| | | RedisUtils.expire(cls.__get_redis(), key, tool.get_expire()) |
| | | |
| | | @classmethod |
| | | def __get_watch_canceled_index(cls, code): |
| | | key = f"h_cancel_watch_canceled_indexs-{code}" |
| | | return cls.__getRedis().smembers(key) |
| | | return RedisUtils.smembers(cls.__get_redis(), key) |
| | | |
| | | @classmethod |
| | | def __get_watch_canceled_index_cache(cls, code): |
| | |
| | | def __del_watch_canceled_index(cls, code): |
| | | CodeDataCacheUtil.clear_cache(cls.__cancel_watch_canceled_indexs_cache, code) |
| | | key = f"h_cancel_watch_canceled_indexs-{code}" |
| | | cls.__getRedis().delete(key) |
| | | RedisUtils.delete( cls.__get_redis(), key) |
| | | |
| | | # 保存成交进度 |
| | | @classmethod |
| | |
| | | CodeDataCacheUtil.set_cache(cls.__cancel_traded_progress_cache, code, |
| | | (origin_process_index, latest_process_index)) |
| | | key = "h_cancel_traded_progress-{}".format(code) |
| | | cls.__getRedis().setex(key, tool.get_expire(), json.dumps((origin_process_index, latest_process_index))) |
| | | RedisUtils.setex(cls.__get_redis(),key, tool.get_expire(), json.dumps((origin_process_index, latest_process_index))) |
| | | |
| | | @classmethod |
| | | def __get_traded_progress(cls, code): |
| | | key = "h_cancel_traded_progress-{}".format(code) |
| | | val = cls.__getRedis().get(key) |
| | | val = RedisUtils.get(cls.__get_redis(), key) |
| | | if val is None: |
| | | return None, None |
| | | val = json.loads(val) |
| | |
| | | CodeDataCacheUtil.set_cache(cls.__cancel_compute_data_cache, code, |
| | | (process_index, cancel_num)) |
| | | key = "h_cancel_compute_data-{}".format(code) |
| | | cls.__getRedis().setex(key, tool.get_expire(), json.dumps((process_index, cancel_num))) |
| | | RedisUtils.setex(cls.__get_redis(),key, tool.get_expire(), json.dumps((process_index, cancel_num))) |
| | | |
| | | @classmethod |
| | | def __get_compute_data(cls, code): |
| | | key = "h_cancel_compute_data-{}".format(code) |
| | | val = cls.__getRedis().get(key) |
| | | val = RedisUtils.get(cls.__get_redis(), key) |
| | | if val is None: |
| | | return -1, 0 |
| | | val = json.loads(val) |
| | |
| | | def __del_compute_data(cls, code): |
| | | CodeDataCacheUtil.clear_cache(cls.__cancel_compute_data_cache, code) |
| | | key = "h_cancel_compute_data-{}".format(code) |
| | | cls.__getRedis().delete(key) |
| | | RedisUtils.delete(cls.__get_redis(), key) |
| | | |
| | | @classmethod |
| | | def __clear_data(cls, code): |
| | |
| | | f"h_cancel_watch_indexs-{code}", f"h_cancel_traded_progress-{code}", |
| | | f"h_cancel_watch_canceled_indexs-{code}"] |
| | | for key in ks: |
| | | cls.__getRedis().delete(key) |
| | | RedisUtils.delete(cls.__get_redis(), key) |
| | | |
| | | @classmethod |
| | | def need_cancel(cls, code, buy_single_index, buy_exec_index, start_index, end_index, total_data, |
| | |
| | | __cancel_real_order_index_cache = {} |
| | | |
| | | @classmethod |
| | | def __getRedis(cls): |
| | | def __get_redis(cls): |
| | | return cls.__redis_manager.getRedis() |
| | | |
| | | @classmethod |
| | | def __set_real_order_index(cls, code, index): |
| | | CodeDataCacheUtil.set_cache(cls.__cancel_real_order_index_cache, code, index) |
| | | cls.__getRedis().setex(f"d_cancel_real_order_index-{code}", tool.get_expire(), f"{index}") |
| | | RedisUtils.setex(cls.__get_redis(),f"d_cancel_real_order_index-{code}", tool.get_expire(), f"{index}") |
| | | |
| | | @classmethod |
| | | def __get_real_order_index(cls, code): |
| | | val = cls.__getRedis().get(f"d_cancel_real_order_index-{code}") |
| | | val = cls.__get_redis().get(f"d_cancel_real_order_index-{code}") |
| | | if val: |
| | | return int(val) |
| | | return None |
| | |
| | | @classmethod |
| | | def clear(cls, code=None): |
| | | if code: |
| | | cls.__getRedis().delete(f"d_cancel_real_order_index-{code}") |
| | | RedisUtils.delete( cls.__get_redis(), f"d_cancel_real_order_index-{code}") |
| | | else: |
| | | keys = cls.__getRedis().keys("d_cancel_real_order_index-*") |
| | | keys = RedisUtils.keys(cls.__get_redis(), "d_cancel_real_order_index-*") |
| | | if keys: |
| | | for k in keys: |
| | | code = k.replace("d_cancel_real_order_index-", "") |
| | | CodeDataCacheUtil.clear_cache(cls.__cancel_real_order_index_cache, code) |
| | | cls.__getRedis().delete(k) |
| | | RedisUtils.delete(cls.__get_redis(), k) |
| | | |
| | | # 设置成交位 |
| | | @classmethod |
| | |
| | | __cancel_watch_index_cache = {} |
| | | |
| | | @classmethod |
| | | def __getRedis(cls): |
| | | def __get_redis(cls): |
| | | return cls.__redis_manager.getRedis() |
| | | |
| | | @classmethod |
| | | def __add_watch_index(cls, code, index): |
| | | CodeDataCacheUtil.clear_cache(cls.__cancel_watch_index_cache, code) |
| | | cls.__getRedis().sadd(f"l_cancel_watch_index-{code}", index) |
| | | cls.__getRedis().expire(f"l_cancel_watch_index-{code}", tool.get_expire()) |
| | | RedisUtils.sadd(cls.__get_redis(), f"l_cancel_watch_index-{code}", index) |
| | | cls.__get_redis().expire(f"l_cancel_watch_index-{code}", tool.get_expire()) |
| | | |
| | | @classmethod |
| | | def __del_watch_index(cls, code, index): |
| | | CodeDataCacheUtil.clear_cache(cls.__cancel_watch_index_cache, code) |
| | | cls.__getRedis().srem(f"l_cancel_watch_index-{code}", index) |
| | | cls.__get_redis().srem(f"l_cancel_watch_index-{code}", index) |
| | | |
| | | @classmethod |
| | | def __get_watch_indexes(cls, code): |
| | | return cls.__getRedis().smembers(f"l_cancel_watch_index-{code}") |
| | | return RedisUtils.smembers(cls.__get_redis(), f"l_cancel_watch_index-{code}") |
| | | |
| | | @classmethod |
| | | def __get_watch_indexes_cache(cls, code): |
| | |
| | | @classmethod |
| | | def del_watch_index(cls, code): |
| | | CodeDataCacheUtil.clear_cache(cls.__cancel_watch_index_cache, code) |
| | | cls.__getRedis().delete(f"l_cancel_watch_index-{code}") |
| | | RedisUtils.delete(cls.__get_redis(), f"l_cancel_watch_index-{code}") |
| | | |
| | | @classmethod |
| | | def clear(cls, code=None): |
| | | if code: |
| | | cls.del_watch_index(code) |
| | | else: |
| | | keys = cls.__getRedis().keys(f"l_cancel_watch_index-*") |
| | | keys = RedisUtils.keys(cls.__get_redis(), f"l_cancel_watch_index-*") |
| | | for k in keys: |
| | | code = k.replace("l_cancel_watch_index-", "") |
| | | cls.del_watch_index(code) |
| | |
| | | |
| | | key = "l2_limit_up_second_money-{}-{}".format(code, time.replace(":", "")) |
| | | |
| | | cls.__get_redis().setex(key, tool.get_expire(), json.dumps((old_num, old_from, old_to))) |
| | | RedisUtils.setex(cls.__get_redis(),key, tool.get_expire(), json.dumps((old_num, old_from, old_to))) |
| | | |
| | | @classmethod |
| | | def __get_l2_second_money_record(cls, code, time): |
| | |
| | | @classmethod |
| | | def __get_l2_second_money_record_keys(cls, code, time_regex): |
| | | key = "l2_limit_up_second_money-{}-{}".format(code, time_regex) |
| | | keys = cls.__get_redis().keys(key) |
| | | keys = RedisUtils.keys(cls.__get_redis(), key) |
| | | return keys |
| | | |
| | | # 设置l2最新的封单额数据 |
| | | @classmethod |
| | | def __set_l2_latest_money_record(cls, code, index, num): |
| | | key = "l2_limit_up_money-{}".format(code) |
| | | cls.__get_redis().setex(key, tool.get_expire(), json.dumps((num, index))) |
| | | RedisUtils.setex(cls.__get_redis(),key, tool.get_expire(), json.dumps((num, index))) |
| | | |
| | | # 返回数量,索引 |
| | | @classmethod |
| | |
| | | @classmethod |
| | | def clear(cls, code): |
| | | key = "l2_limit_up_money-{}".format(code) |
| | | cls.__get_redis().delete(key) |
| | | RedisUtils.delete(cls.__get_redis(), key) |
| | | |
| | | # 返回取消的标志数据 |
| | | # with_cancel 是否需要判断是否撤销 |
| | |
| | | @classmethod |
| | | def __save_process_index(cls, code, index): |
| | | key = "limit_up_sell_index-{}".format(code) |
| | | cls.__get_redis().setex(key, tool.get_expire(), index) |
| | | RedisUtils.setex( cls.__get_redis(),key, tool.get_expire(), index) |
| | | |
| | | @classmethod |
| | | def __get_process_index(cls, code): |
| | |
| | | @classmethod |
| | | def delete(cls, code): |
| | | key = "limit_up_sell_num-{}".format(code) |
| | | cls.__get_redis().delete(key) |
| | | RedisUtils.delete( cls.__get_redis(), key) |
| | | key = "limit_up_sell_index-{}".format(code) |
| | | cls.__get_redis().delete(key) |
| | | RedisUtils.delete( cls.__get_redis(), key) |
| | | |
| | | @classmethod |
| | | def clear(cls): |
| | | keys = cls.__get_redis().keys("limit_up_sell_num-*") |
| | | keys = RedisUtils.keys(cls.__get_redis(), "limit_up_sell_num-*") |
| | | for k in keys: |
| | | cls.__get_redis().delete(k) |
| | | RedisUtils.delete(cls.__get_redis(), k) |
| | | |
| | | # 处理数据,返回是否需要撤单 |
| | | # 处理范围:买入执行位-当前最新位置 |
| | |
| | | """ |
| | | import json |
| | | |
| | | from db.redis_manager import RedisUtils |
| | | from utils import tool |
| | | from db import redis_manager |
| | | from log_module.log import logger_trade_queue_price_info |
| | |
| | | # 保存买1价格信息 |
| | | @classmethod |
| | | def __save_buy1_price_info(cls, code, limit_up_time, open_limit_up_time): |
| | | cls.__get_redis().setex(f"buy1_price_limit_up_info-{code}", tool.get_expire(), |
| | | RedisUtils.setex(cls.__get_redis(),f"buy1_price_limit_up_info-{code}", tool.get_expire(), |
| | | json.dumps((limit_up_time, open_limit_up_time))) |
| | | |
| | | @classmethod |
| | |
| | | @classmethod |
| | | def __save_buy1_price(cls, code, buy_1_price): |
| | | cls.__current_buy_1_price[code] = buy_1_price |
| | | cls.__get_redis().setex(f"buy1_price-{code}", tool.get_expire(), buy_1_price) |
| | | RedisUtils.setex(cls.__get_redis(),f"buy1_price-{code}", tool.get_expire(), buy_1_price) |
| | | |
| | | @classmethod |
| | | def __get_buy1_price(cls, code): |
| | |
| | | # 设置炸板后的最低价 |
| | | @classmethod |
| | | def __save_open_limit_up_lowest_price(cls, code, price): |
| | | cls.__get_redis().setex(f"open_limit_up_lowest_price-{code}", tool.get_expire(), f"{price}") |
| | | RedisUtils.setex(cls.__get_redis(),f"open_limit_up_lowest_price-{code}", tool.get_expire(), f"{price}") |
| | | |
| | | @classmethod |
| | | def __get_open_limit_up_lowest_price(cls, code): |
| | |
| | | import json |
| | | |
| | | from db import redis_manager |
| | | from db.redis_manager import RedisUtils |
| | | from utils import tool |
| | | from log_module.log import logger_l2_trade_buy |
| | | from utils.tool import CodeDataCacheUtil |
| | |
| | | def delete_buy_point(code): |
| | | CodeDataCacheUtil.clear_cache(TradePointManager.__buy_compute_index_info_cache, code) |
| | | redis = TradePointManager.__get_redis() |
| | | redis.delete("buy_compute_index_info-{}".format(code)) |
| | | RedisUtils.delete(redis, "buy_compute_index_info-{}".format(code)) |
| | | |
| | | # 获取买入点信息 |
| | | # 返回数据为:买入点 累计纯买额 已经计算的数据索引 |
| | |
| | | data_ = (_buy_single_index, buy_exec_index, compute_index, nums, count, list(max_num_sets), |
| | | volume_rate) |
| | | CodeDataCacheUtil.set_cache(TradePointManager.__buy_compute_index_info_cache, code, data_) |
| | | redis.setex(_key, expire, |
| | | RedisUtils.setex( |
| | | redis,_key, expire, |
| | | json.dumps(data_)) |
| | | |
| | | # 获取撤买入开始计算的信息 |
| | |
| | | def set_buy_cancel_single_pos(cls, code, index): |
| | | redis = TradePointManager.__get_redis() |
| | | expire = tool.get_expire() |
| | | redis.setex("buy_cancel_single_pos-{}".format(code), expire, index) |
| | | RedisUtils.setex(redis,"buy_cancel_single_pos-{}".format(code), expire, index) |
| | | |
| | | # 删除买撤点数据 |
| | | @classmethod |
| | | def delete_buy_cancel_point(cls, code): |
| | | redis = TradePointManager.__get_redis() |
| | | redis.delete("buy_cancel_single_pos-{}".format(code)) |
| | | RedisUtils.delete( redis, "buy_cancel_single_pos-{}".format(code)) |
| | | |
| | | # 设置买撤纯买额 |
| | | @classmethod |
| | | def set_compute_info_for_cancel_buy(cls, code, index, nums): |
| | | redis = TradePointManager.__get_redis() |
| | | expire = tool.get_expire() |
| | | redis.setex("compute_info_for_cancel_buy-{}".format(code), expire, json.dumps((index, nums))) |
| | | RedisUtils.setex( redis,"compute_info_for_cancel_buy-{}".format(code), expire, json.dumps((index, nums))) |
| | | logger_l2_trade_buy.info("{}保存撤单纯买额信息:{},{}", code, index, nums) |
| | | |
| | | # 获取买撤纯买额计算信息 |
| | |
| | | @classmethod |
| | | def delete_compute_info_for_cancel_buy(cls, code): |
| | | redis = TradePointManager.__get_redis() |
| | | redis.delete("compute_info_for_cancel_buy-{}".format(code)) |
| | | RedisUtils.delete(redis, "compute_info_for_cancel_buy-{}".format(code)) |
| | | |
| | | # 从买入信号开始设置涨停买与涨停撤的单数 |
| | | @classmethod |
| | | def set_count_info_for_cancel_buy(cls, code, index, buy_count, cancel_count): |
| | | redis = TradePointManager.__get_redis() |
| | | expire = tool.get_expire() |
| | | redis.setex("count_info_for_cancel_buy-{}".format(code), expire, json.dumps((index, buy_count, cancel_count))) |
| | | RedisUtils.setex(redis,"count_info_for_cancel_buy-{}".format(code), expire, json.dumps((index, buy_count, cancel_count))) |
| | | logger_l2_trade_buy.info("{}保存撤单纯买额信息:{},{}", code, index, buy_count, cancel_count) |
| | | |
| | | # 获取买撤纯买额计算信息 |
| | |
| | | @classmethod |
| | | def delete_count_info_for_cancel_buy(cls, code): |
| | | redis = TradePointManager.__get_redis() |
| | | redis.delete("count_info_for_cancel_buy-{}".format(code)) |
| | | RedisUtils.delete(redis, "count_info_for_cancel_buy-{}".format(code)) |
| | | |
| | | |
| | | # 清除l2数据 |
| | | def clear_l2_data(code): |
| | | redis_l2 = redis_manager.RedisManager(1).getRedis() |
| | | keys = redis_l2.keys("l2-{}-*".format(code)) |
| | | keys = RedisUtils.keys( redis_l2, "l2-{}-*".format(code)) |
| | | for k in keys: |
| | | redis_l2.delete(k) |
| | | RedisUtils.delete(redis_l2,k) |
| | | |
| | | redis_l2.delete("l2-data-latest-{}".format(code)) |
| | | RedisUtils.delete(redis_l2, "l2-data-latest-{}".format(code)) |
| | | |
| | | |
| | | second_930 = 9 * 3600 + 30 * 60 + 0 |
| | |
| | | redis = _redisManager.getRedis() |
| | | count = redis.scard(key) |
| | | if count > 0: |
| | | redis.delete(key) |
| | | redis.sadd(key, "000000") |
| | | redis.expire(key, tool.get_expire()) |
| | | RedisUtils.delete(redis, key) |
| | | RedisUtils.sadd(redis, key, "000000") |
| | | RedisUtils.expire(redis, key, tool.get_expire()) |
| | | |
| | | |
| | | # 移除l2固定监控代码 |
| | |
| | | def add_to_l2_fixed_codes(code): |
| | | key = "l2-fixed-codes" |
| | | redis = _redisManager.getRedis() |
| | | redis.sadd(key, code) |
| | | redis.expire(key, tool.get_expire()) |
| | | RedisUtils.sadd(redis, key, code) |
| | | RedisUtils.expire(redis, key, tool.get_expire()) |
| | | |
| | | |
| | | # 是否在l2固定监控代码中 |
| | |
| | | from code_attribute import big_money_num_manager, code_volumn_manager, code_data_util, industry_codes_sort, \ |
| | | limit_up_time_manager, global_data_loader, gpcode_manager |
| | | import constant |
| | | from db.redis_manager import RedisUtils |
| | | from l2.huaxin import l2_huaxin_util, huaxin_delegate_postion_manager |
| | | from third_data import kpl_data_manager, block_info |
| | | from utils import global_util, ths_industry_util, tool |
| | |
| | | if self.__get_begin_pos(code) is None: |
| | | # 保存位置 |
| | | key = "m_big_money_begin-{}".format(code) |
| | | self.__get_redis().setex(key, tool.get_expire(), index) |
| | | RedisUtils.setex( self.__get_redis(), key, tool.get_expire(), index) |
| | | |
| | | # 获取计算开始位置 |
| | | def __get_begin_pos(self, code): |
| | | key = "m_big_money_begin-{}".format(code) |
| | | val = self.__get_redis().get(key) |
| | | val = RedisUtils.get(self.__get_redis(),key) |
| | | if val is None: |
| | | return None |
| | | return int(val) |
| | |
| | | # 清除已经处理的数据 |
| | | def clear_processed_end_index(self, code): |
| | | key = "m_big_money_process_index-{}".format(code) |
| | | self.__get_redis().delete(key) |
| | | RedisUtils.delete(self.__get_redis(), key) |
| | | |
| | | # 添加已经处理过的单 |
| | | def __set_processed_end_index(self, code, index): |
| | | key = "m_big_money_process_index-{}".format(code) |
| | | self.__get_redis().setex(key, tool.get_expire(), index) |
| | | RedisUtils.setex(self.__get_redis(), key, tool.get_expire(), index) |
| | | |
| | | # 是否已经处理过 |
| | | def __get_processed_end_index(self, code): |
| | | key = "m_big_money_process_index-{}".format(code) |
| | | val = self.__get_redis().get(key) |
| | | val = RedisUtils.get(self.__get_redis(), key) |
| | | if val is None: |
| | | return None |
| | | return int(val) |
| | |
| | | |
| | | import constant |
| | | from code_attribute import gpcode_manager |
| | | from db.redis_manager import RedisUtils |
| | | from l2 import l2_data_log, l2_data_source_util |
| | | from log_module import log |
| | | from db import redis_manager |
| | |
| | | if load_latest : |
| | | if local_latest_datas.get(code) is None or force: |
| | | # 获取最近的数据 |
| | | _data = redis.get("l2-data-latest-{}".format(code)) |
| | | _data = RedisUtils.get(redis,"l2-data-latest-{}".format(code)) |
| | | if _data is not None: |
| | | if code in local_latest_datas: |
| | | local_latest_datas[code] = json.loads(_data) |
| | |
| | | for _data in datas: |
| | | i += 1 |
| | | key = "l2-" + _data["key"] |
| | | value = redis_instance.get(key) |
| | | value = RedisUtils.get(redis_instance, key) |
| | | if value is None: |
| | | # 新增 |
| | | try: |
| | | value = {"index": _data["index"], "re": _data["re"]} |
| | | redis_instance.setex(key, expire, json.dumps(value)) |
| | | RedisUtils.setex(redis_instance,key, expire, json.dumps(value)) |
| | | except: |
| | | logging.error("更正L2数据出错:{} key:{}".format(code, key)) |
| | | else: |
| | | json_value = json.loads(value) |
| | | if json_value["re"] != _data["re"]: |
| | | json_value["re"] = _data["re"] |
| | | redis_instance.setex(key, expire, json.dumps(json_value)) |
| | | RedisUtils.setex(redis_instance,key, expire, json.dumps(json_value)) |
| | | finally: |
| | | redis_instance.delete("l2-save-{}".format(code)) |
| | | RedisUtils.delete(redis_instance, "l2-save-{}".format(code)) |
| | | |
| | | print("保存新数据用时:", msg, "耗时:{}".format(round(time.time() * 1000) - start_time)) |
| | | return datas |
| | |
| | | # 保存最近的数据 |
| | | __start_time = round(time.time() * 1000) |
| | | if datas: |
| | | redis.setex("l2-data-latest-{}".format(code), tool.get_expire(), json.dumps(datas)) |
| | | RedisUtils.setex(redis,"l2-data-latest-{}".format(code), tool.get_expire(), json.dumps(datas)) |
| | | l2_data_log.l2_time(code, round(time.time() * 1000) - __start_time, "保存最近l2数据用时") |
| | | # 设置进内存 |
| | | local_latest_datas[code] = datas |
| | |
| | | def set_l2_data_latest_count(code, count): |
| | | redis = _redisManager.getRedis() |
| | | key = "latest-l2-count-{}".format(code) |
| | | redis.setex(key, 2, count) |
| | | RedisUtils.setex( redis,key, 2, count) |
| | | pass |
| | | |
| | | |
| | |
| | | redis = _redisManager.getRedis() |
| | | key = "latest-l2-count-{}".format(code) |
| | | |
| | | result = redis.get(key) |
| | | result = RedisUtils.get(redis, key) |
| | | if result is None: |
| | | return 0 |
| | | else: |
| | |
| | | # 下单L2的安全笔数管理 |
| | | import json |
| | | |
| | | from db.redis_manager import RedisUtils |
| | | from l2 import l2_data_source_util |
| | | from trade import l2_trade_factor |
| | | from db import redis_manager |
| | |
| | | # 记录每一次的处理进度 |
| | | def __save_compute_progress(self, code, last_buy_single_index, process_index, buy_num, cancel_num): |
| | | key = "safe_count_l2-{}-{}".format(code, last_buy_single_index) |
| | | self.__getRedis().setex(key, tool.get_expire(), |
| | | json.dumps((last_buy_single_index, process_index, buy_num, cancel_num))) |
| | | RedisUtils.setex(self.__getRedis(), key, tool.get_expire(), |
| | | json.dumps((last_buy_single_index, process_index, buy_num, cancel_num))) |
| | | |
| | | # 返回数据与更新时间 |
| | | def __get_compute_progress(self, code, last_buy_single_index): |
| | | key = "safe_count_l2-{}-{}".format(code, last_buy_single_index) |
| | | val = self.__getRedis().get(key) |
| | | val = RedisUtils.get( self.__getRedis(), key) |
| | | if val is None: |
| | | return None, -1, 0, 0 |
| | | val = json.loads(val) |
| | |
| | | # 保存最近的下单信息 |
| | | def __save_latest_place_order_info(self, code, buy_single_index, buy_exec_index, cancel_index): |
| | | key = "latest_place_order_info-{}".format(code) |
| | | self.__getRedis().setex(key, tool.get_expire(), json.dumps((buy_single_index, buy_exec_index, cancel_index))) |
| | | RedisUtils.setex( self.__getRedis(), key, tool.get_expire(), json.dumps((buy_single_index, buy_exec_index, cancel_index))) |
| | | |
| | | def __get_latest_place_order_info(self, code): |
| | | key = "latest_place_order_info-{}".format(code) |
| | | val = self.__getRedis().get(key) |
| | | val = RedisUtils.get(self.__getRedis(), key) |
| | | if val is None: |
| | | return None, None, None |
| | | val = json.loads(val) |
| | |
| | | |
| | | def __get_all_compute_progress(self, code): |
| | | key_regex = f"safe_count_l2-{code}-*" |
| | | keys = self.__getRedis().keys(key_regex) |
| | | keys = RedisUtils.keys(self.__getRedis(), key_regex) |
| | | vals = [] |
| | | for k in keys: |
| | | val = self.__getRedis().get(k) |
| | | val = RedisUtils.get(self.__getRedis(), k) |
| | | val = json.loads(val) |
| | | vals.append(val) |
| | | return vals |
| | | |
| | | def clear_data(self, code): |
| | | key_regex = f"safe_count_l2-{code}-*" |
| | | keys = self.__getRedis().keys(key_regex) |
| | | keys = RedisUtils.keys(self.__getRedis(), key_regex) |
| | | for k in keys: |
| | | self.__getRedis().delete(k) |
| | | RedisUtils.delete(self.__getRedis(),k) |
| | | |
| | | key = f"latest_place_order_info-{code}" |
| | | self.__getRedis().delete(key) |
| | | RedisUtils.delete( |
| | | self.__getRedis(),key) |
| | | |
| | | # 获取基础的安全笔数 |
| | | def __get_base_save_count(self, code, is_first): |
| | |
| | | |
| | | import constant |
| | | from db import redis_manager |
| | | from db.redis_manager import RedisUtils |
| | | from utils import tool |
| | | import l2.l2_data_util |
| | | from log_module.log import logger_l2_trade_buy_queue, logger_l2_trade_buy_progress |
| | |
| | | |
| | | def __save_buy_queue_data(self, code, num_list): |
| | | key = "trade_buy_queue_data-{}".format(code) |
| | | self.__getRedis().setex(key, tool.get_expire(), json.dumps((num_list, tool.get_now_time_str()))) |
| | | RedisUtils.setex(self.__getRedis(), key, tool.get_expire(), json.dumps((num_list, tool.get_now_time_str()))) |
| | | |
| | | # 返回数据与更新时间 |
| | | def __get_buy_queue_data(self, code): |
| | |
| | | |
| | | def __save_buy_progress_index(self, code, index, is_default): |
| | | key = "trade_buy_progress_index-{}".format(code) |
| | | self.__getRedis().setex(key, tool.get_expire(), json.dumps((index, is_default))) |
| | | RedisUtils.setex(self.__getRedis(), key, tool.get_expire(), json.dumps((index, is_default))) |
| | | # 返回数据与更新时间 |
| | | |
| | | def __get_buy_progress_index(self, code): |
| | |
| | | # 最近的非涨停买1的时间 |
| | | def __save_latest_not_limit_up_time(self, code, time_str): |
| | | key = "latest_not_limit_up_time-{}".format(code) |
| | | self.__getRedis().setex(key, tool.get_expire(), time_str) |
| | | RedisUtils.setex(self.__getRedis(), key, tool.get_expire(), time_str) |
| | | |
| | | def __get_latest_not_limit_up_time(self, code): |
| | | key = "latest_not_limit_up_time-{}".format(code) |
| | |
| | | # 比较时间的大小 |
| | | import json |
| | | import time |
| | | |
| | | from db.redis_manager import RedisUtils |
| | | from utils.tool import async_call |
| | | |
| | | from l2 import l2_data_manager |
| | |
| | | return True |
| | | else: |
| | | return False |
| | | |
| | | |
| | | # 获取大资金的金额 |
| | | def get_big_money_val(limit_up_price): |
| | |
| | | continue |
| | | if same_time_nums[time_] > 20: |
| | | redis = l2_data_manager._redisManager.getRedis() |
| | | redis.setex("big_data-{}-{}".format(code, int(round(time.time() * 1000))), tool.get_expire(), d1) |
| | | RedisUtils.setex(redis, "big_data-{}-{}".format(code, int(round(time.time() * 1000))), tool.get_expire(), |
| | | d1) |
| | | break |
| | | |
| | | |
| | |
| | | # @async_call |
| | | def save_l2_latest_data_number(code, num): |
| | | redis = l2_data_manager._redisManager.getRedis() |
| | | redis.setex("l2_latest_data_num-{}".format(code), 3, num) |
| | | RedisUtils.setex(redis, "l2_latest_data_num-{}".format(code), 3, num) |
| | | |
| | | |
| | | # 获取最新数据条数 |
| | |
| | | # 判断是龙几,判断是否涨停,判断是否炸板,加载分数 |
| | | |
| | | from code_attribute import code_volumn_manager, limit_up_time_manager, gpcode_manager |
| | | from db.redis_manager import RedisUtils |
| | | from utils import tool |
| | | from db import redis_manager |
| | | from third_data.kpl_data_manager import KPLDataManager |
| | |
| | | return self.__redisManager.getRedis() |
| | | |
| | | def ignore_code(self, type, code): |
| | | self.__get_redis().sadd(f"kp_ignore_codes_{type}", code) |
| | | self.__get_redis().expire(f"kp_ignore_codes_{type}", tool.get_expire()) |
| | | RedisUtils.sadd(self.__get_redis(), f"kp_ignore_codes_{type}", code) |
| | | RedisUtils.expire( self.__get_redis(), f"kp_ignore_codes_{type}", tool.get_expire()) |
| | | |
| | | def list_ignore_codes(self, type): |
| | | return self.__get_redis().smembers(f"kp_ignore_codes_{type}") |
| | | return RedisUtils.smembers(self.__get_redis(), f"kp_ignore_codes_{type}") |
| | | |
| | | |
| | | # 获取涨停顺序(按涨停原因分组) |
| | |
| | | from unittest import mock |
| | | |
| | | from code_attribute import big_money_num_manager, gpcode_manager |
| | | from db.redis_manager import RedisUtils |
| | | from log_module import log |
| | | from utils import tool |
| | | from db import redis_manager |
| | |
| | | redis_l2 = redis_manager.RedisManager(1).getRedis() |
| | | keys = ["buy1_volumn_latest_info-{}", "m_big_money_begin-{}", "m_big_money_process_index-{}"] |
| | | for k in keys: |
| | | redis_l2.delete(k.format(code)) |
| | | RedisUtils.delete(redis_l2, k.format(code)) |
| | | l2.l2_data_manager.TradePointManager.delete_buy_point(code) |
| | | big_money_num_manager.reset(code) |
| | | redis_trade = redis_manager.RedisManager(2).getRedis() |
| | | redis_trade.delete("trade-state-{}".format(code)) |
| | | RedisUtils.delete( redis_trade, "trade-state-{}".format(code)) |
| | | trade_data_manager.placeordercountmanager.clear_place_order_count(code) |
| | | redis_info = redis_manager.RedisManager(0).getRedis() |
| | | keys = redis_info.keys("*{}*".format(code)) |
| | | keys = RedisUtils.keys(redis_info, "*{}*".format(code)) |
| | | for k in keys: |
| | | if k.find("pre") is not None: |
| | | continue |
| | | if k.find("zyltgb") is not None: |
| | | continue |
| | | redis_info.delete(k) |
| | | RedisUtils.delete(redis_info, k) |
| | | BuyL2SafeCountManager().clear_data(code) |
| | | |
| | | transaction_progress.TradeBuyQueue().set_traded_index(code, 0) |
| | |
| | | import json |
| | | |
| | | import constant |
| | | from db.redis_manager import RedisUtils |
| | | from third_data import kpl_block_util |
| | | from utils import global_util, tool |
| | | from log_module import log |
| | |
| | | if blocks is None: |
| | | return |
| | | # 保存前2条数据 |
| | | self.__get_redis().setex(f"kpl_jx_blocks-{code}", tool.get_expire(), json.dumps(blocks)) |
| | | RedisUtils.setex(self.__get_redis(),f"kpl_jx_blocks-{code}", tool.get_expire(), json.dumps(blocks)) |
| | | self.__code_blocks[code] = blocks |
| | | |
| | | # 获取精选板块 |
| | | def get_jx_blocks(self, code): |
| | | if code in self.__code_blocks: |
| | | return self.__code_blocks[code] |
| | | val = self.__get_redis().get(f"kpl_jx_blocks-{code}") |
| | | val = RedisUtils.get(self.__get_redis(), f"kpl_jx_blocks-{code}") |
| | | if val is None: |
| | | return None |
| | | else: |
| | |
| | | return self.__redisManager.getRedis() |
| | | |
| | | def save_plate(self, plate): |
| | | self.__get_redis().sadd("kpl_forbidden_plates", plate) |
| | | self.__get_redis().expire("kpl_forbidden_plates", tool.get_expire()) |
| | | RedisUtils.sadd(self.__get_redis(), "kpl_forbidden_plates", plate) |
| | | RedisUtils.expire(self.__get_redis(), "kpl_forbidden_plates", tool.get_expire()) |
| | | |
| | | def list_all(self): |
| | | return self.__get_redis().smembers("kpl_forbidden_plates") |
| | | return RedisUtils.smembers(self.__get_redis(), "kpl_forbidden_plates") |
| | | |
| | | |
| | | class LimitUpCodesPlateKeyManager: |
| | |
| | | |
| | | # 今日涨停原因变化 |
| | | def set_today_limit_up_reason_change(self, code, from_reason, to_reason): |
| | | self.__get_redis().sadd(f"kpl_limit_up_reason_his-{code}", from_reason) |
| | | RedisUtils.sadd(self.__get_redis(), f"kpl_limit_up_reason_his-{code}", from_reason) |
| | | self.__get_redis().expire(f"kpl_limit_up_reason_his-{code}", tool.get_expire()) |
| | | self.__set_total_keys(code) |
| | | |
| | |
| | | |
| | | def set_history_limit_up_reason(self, code, reasons): |
| | | self.__history_limit_up_reason_dict[code] = set(reasons) |
| | | self.__get_redis().setex(f"kpl_his_limit_up_reason-{code}", tool.get_expire(), json.dumps(list(reasons))) |
| | | RedisUtils.setex(self.__get_redis(),f"kpl_his_limit_up_reason-{code}", tool.get_expire(), json.dumps(list(reasons))) |
| | | logger_kpl_debug.debug(f"设置历史涨停原因:{code}-{reasons}") |
| | | |
| | | # 如果返回值不为None表示已经加载过历史原因了 |
| | |
| | | |
| | | def set_blocks(self, code, blocks): |
| | | self.__blocks_dict[code] = set(blocks) |
| | | self.__get_redis().setex(f"kpl_blocks-{code}", tool.get_expire(), json.dumps(list(blocks))) |
| | | RedisUtils.setex(self.__get_redis(),f"kpl_blocks-{code}", tool.get_expire(), json.dumps(list(blocks))) |
| | | |
| | | def get_blocks(self, code): |
| | | reasons = self.__blocks_dict.get(code) |
| | |
| | | if code in LimitUpCodesPlateKeyManager.today_total_limit_up_reason_dict: |
| | | k1 = {LimitUpCodesPlateKeyManager.today_total_limit_up_reason_dict[code]} |
| | | # 加载今日历史原因 |
| | | k11 = self.__get_redis().smembers(f"kpl_limit_up_reason_his-{code}") |
| | | k11 = RedisUtils.smembers(self.__get_redis(), f"kpl_limit_up_reason_his-{code}") |
| | | k2 = self.__CodesPlateKeysManager.get_history_limit_up_reason(code) |
| | | if k2 is None: |
| | | k2 = set() |
| | |
| | | import time |
| | | |
| | | import constant |
| | | from db.redis_manager import RedisUtils |
| | | from utils import tool |
| | | |
| | | # 开盘啦历史涨停数据管理 |
| | |
| | | return self.__redisManager.getRedis() |
| | | |
| | | def save_reason(self, code, reason): |
| | | self.__get_redis().setex(f"kpl_limitup_reason-{code}", tool.get_expire(), reason) |
| | | RedisUtils.setex(self.__get_redis(),f"kpl_limitup_reason-{code}", tool.get_expire(), reason) |
| | | |
| | | def list_all(self): |
| | | keys = self.__get_redis().keys("kpl_limitup_reason-*") |
| | | keys = RedisUtils.keys(self.__get_redis(), "kpl_limitup_reason-*") |
| | | dict_ = {} |
| | | for k in keys: |
| | | val = self.__get_redis().get(k) |
| | | val = RedisUtils.get(self.__get_redis(), k) |
| | | dict_[k.split("-")[1]] = val |
| | | return dict_ |
| | | |
| | |
| | | # 客户端管理器 |
| | | import json |
| | | |
| | | from db.redis_manager import RedisUtils |
| | | from user import authority |
| | | from db import redis_manager |
| | | from utils import import_util |
| | |
| | | |
| | | def getValidL2Clients(): |
| | | redis = __redisManager.getRedis() |
| | | keys = redis.keys("client-active-*") |
| | | keys = RedisUtils.keys(redis, "client-active-*") |
| | | client_ids = [] |
| | | for k in keys: |
| | | _id = k.split("client-active-")[1] |
| | |
| | | # 获取客户端IP |
| | | def getActiveClientIP(client_id): |
| | | redis = __redisManager.getRedis() |
| | | val = redis.get("client-active-{}".format(client_id)) |
| | | val = RedisUtils.get(redis, "client-active-{}".format(client_id)) |
| | | if val is None: |
| | | return None |
| | | val = json.loads(val) |
| | |
| | | return |
| | | |
| | | redis = __redisManager.getRedis() |
| | | redis.setex("client-active-{}".format(client_id), 10, json.dumps((host, thsDead))) |
| | | RedisUtils.setex(redis,"client-active-{}".format(client_id), 10, json.dumps((host, thsDead))) |
| | | if ths_util: |
| | | ths_util.set_ths_dead_state(client_id, thsDead) |
| | | |
| | |
| | | # 获取客户端同花顺状态 |
| | | def getTHSState(client_id): |
| | | redis = __redisManager.getRedis() |
| | | val = redis.get("client-active-{}".format(client_id)) |
| | | val = RedisUtils.get(redis, "client-active-{}".format(client_id)) |
| | | if val is None: |
| | | return None |
| | | val = json.loads(val) |
| | |
| | | import logging |
| | | import threading |
| | | |
| | | from db.redis_manager import RedisUtils |
| | | from ths import client_manager |
| | | from code_attribute import gpcode_manager |
| | | from l2 import l2_data_manager |
| | |
| | | # 设置代码操作状态,服务器保存的代码是否与实际设置的代码保持一致 |
| | | @classmethod |
| | | def set_operate_code_state(cls, client_id, channel, state): |
| | | cls.getRedis().setex("code-operate_state-{}-{}".format(client_id, channel), 10, state) |
| | | RedisUtils.setex(cls.getRedis(),"code-operate_state-{}-{}".format(client_id, channel), 10, state) |
| | | |
| | | def get_operate_code_state(self, client_id, channel): |
| | | value = self.getRedis().get("code-operate_state-{}-{}".format(client_id, channel)) |
| | |
| | | @classmethod |
| | | def set_read_queue_valid(cls): |
| | | redis = cls.getRedis() |
| | | redis.setex("operate_queue_read_state", 20, 1) |
| | | RedisUtils.setex( redis,"operate_queue_read_state", 20, 1) |
| | | |
| | | @classmethod |
| | | def is_read_queue_valid(cls): |
| | |
| | | 同花顺l2监听位置健康度管理 |
| | | """ |
| | | # 不健康 |
| | | from db.redis_manager import RedisUtils |
| | | from utils import tool |
| | | from db import redis_manager |
| | | |
| | |
| | | |
| | | |
| | | def __set_health_state(client_id, pos, state): |
| | | __get_redis().setex(f"l2_pos_health_state-{client_id}-{pos}", tool.get_expire(), state) |
| | | RedisUtils.setex(__get_redis(),f"l2_pos_health_state-{client_id}-{pos}", tool.get_expire(), state) |
| | | |
| | | |
| | | def __get_health_state(client_id, pos): |
| | |
| | | import win32gui |
| | | |
| | | from db import redis_manager |
| | | from db.redis_manager import RedisUtils |
| | | from utils import tool |
| | | from trade import trade_gui |
| | | |
| | |
| | | redis = __redisManager.getRedis() |
| | | key = "ths_state_dead_count-{}".format(client_id) |
| | | if not dead: |
| | | redis.setex(key, tool.get_expire(), 0) |
| | | RedisUtils.setex(redis,key, tool.get_expire(), 0) |
| | | else: |
| | | redis.incrby(key, 1) |
| | | redis.expire(key, tool.get_expire()) |
| | | RedisUtils.expire(redis, key, tool.get_expire()) |
| | | |
| | | |
| | | # 同花顺是否卡死 |
| | |
| | | """ |
| | | import json |
| | | |
| | | from db.redis_manager import RedisUtils |
| | | from utils import tool |
| | | from db import redis_manager |
| | | |
| | |
| | | else: |
| | | money = int(data[1][:-1]) |
| | | money_list.append((data[0], money)) |
| | | __get_redis().setex("bidding_money", tool.get_expire(), json.dumps(money_list)) |
| | | RedisUtils.setex(__get_redis(),"bidding_money", tool.get_expire(), json.dumps(money_list)) |
| | | |
| | | |
| | | # 获取竞价金额 |
| | |
| | | """ |
| | | import json |
| | | |
| | | from db.redis_manager import RedisUtils |
| | | from utils import tool |
| | | from db import redis_manager |
| | | from l2 import l2_data_util, l2_data_source_util |
| | |
| | | |
| | | |
| | | def __save_traded_index(code, index): |
| | | __get_redis().sadd(f"deal_indexes-{code}", index) |
| | | __get_redis().expire(f"deal_indexes-{code}", tool.get_expire()) |
| | | RedisUtils.sadd(__get_redis(), f"deal_indexes-{code}", index) |
| | | RedisUtils.expire(__get_redis(), f"deal_indexes-{code}", tool.get_expire()) |
| | | |
| | | |
| | | def __get_traded_indexes(code): |
| | | return __get_redis().smembers(f"deal_indexes-{code}") |
| | | return RedisUtils.smembers(__get_redis(), f"deal_indexes-{code}") |
| | | |
| | | |
| | | # 获取成交的索引 |
| | |
| | | |
| | | # 设置成交进度 |
| | | def __set_deal_compute_progress(code, index, money): |
| | | __get_redis().setex(f"deal_compute_info-{code}", tool.get_expire(), json.dumps((index, money))) |
| | | RedisUtils.setex(__get_redis(),f"deal_compute_info-{code}", tool.get_expire(), json.dumps((index, money))) |
| | | __deal_compute_progress_cache[code] = (index, money) |
| | | |
| | | |
| | |
| | | import datetime |
| | | import json |
| | | |
| | | from db.redis_manager import RedisUtils |
| | | from utils import tool |
| | | from db import mysql_data, redis_manager |
| | | from third_data.history_k_data_util import HistoryKDatasUtils |
| | |
| | | # 保存代码的量 |
| | | @classmethod |
| | | def __save_code_volume(cls, code, volume): |
| | | cls.__get_redis().setex(f"available_position_{code}", tool.get_expire(), f"{volume}") |
| | | RedisUtils.setex(cls.__get_redis(),f"available_position_{code}", tool.get_expire(), f"{volume}") |
| | | |
| | | @classmethod |
| | | def get_code_volume(cls, code): |
| | |
| | | |
| | | @classmethod |
| | | def save_data(cls, data): |
| | | cls.get_redis().setex("huaxin_money", tool.get_expire(), json.dumps(data)) |
| | | RedisUtils.setex(cls.get_redis(),"huaxin_money", tool.get_expire(), json.dumps(data)) |
| | | |
| | | @classmethod |
| | | def get_data(cls): |
| | |
| | | import inited_data |
| | | from code_attribute import gpcode_manager |
| | | from db import redis_manager, mysql_data |
| | | from db.redis_manager import RedisUtils |
| | | from l2 import l2_data_manager_new |
| | | from l2.huaxin import huaxin_target_codes_manager |
| | | from third_data import block_info |
| | |
| | | _start_time = time.time() |
| | | times = [] |
| | | for i in range(0, 100): |
| | | redis.sadd("test_set", f"000000:{i}") |
| | | RedisUtils.sadd(redis, "test_set", f"000000:{i}") |
| | | times.append(time.time() - _start_time) |
| | | _start_time = time.time() |
| | | for i in range(0, 20): |
| | | redis.smembers("test_set") |
| | | RedisUtils.smembers(redis, "test_set") |
| | | times.append(time.time() - _start_time) |
| | | return_str = json.dumps( |
| | | {"code": 0, "data": times, "msg": ""}) |
| | |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | | redis = redis_manager.RedisManager(0).getRedis() |
| | | for i in range(100): |
| | | _start_time = time.time() |
| | | times = [] |
| | | for i in range(0, 100): |
| | | redis.sadd("test_set", f"000000:{i}") |
| | | times.append(time.time() - _start_time) |
| | | _start_time = time.time() |
| | | for i in range(0, 20): |
| | | redis.smembers("test_set") |
| | | times.append(time.time() - _start_time) |
| | | return_str = json.dumps( |
| | | {"code": 0, "data": times, "msg": ""}) |
| | | print(return_str) |
| | | pass |
| | |
| | | # 交易订单号管理 |
| | | import constant |
| | | from utils import tool |
| | | from db.redis_manager import RedisManager |
| | | from db.redis_manager import RedisManager, RedisUtils |
| | | from log_module.log import logger_huaxin_trade |
| | | |
| | | |
| | |
| | | # 添加订单ID |
| | | @classmethod |
| | | def add_order_id(cls, code, account_id, order_id): |
| | | cls.__get_redis().sadd(f"huaxin_order_id-{code}", json.dumps((account_id, order_id))) |
| | | cls.__get_redis().expire(f"huaxin_order_id-{code}", tool.get_expire()) |
| | | RedisUtils.sadd(cls.__get_redis(), f"huaxin_order_id-{code}", json.dumps((account_id, order_id))) |
| | | RedisUtils.expire(cls.__get_redis(), f"huaxin_order_id-{code}", tool.get_expire()) |
| | | |
| | | # 删除订单ID |
| | | @classmethod |
| | |
| | | # 查询所有的订单号 |
| | | @classmethod |
| | | def list_order_ids(cls, code): |
| | | return cls.__get_redis().smembers(f"huaxin_order_id-{code}") |
| | | return RedisUtils.smembers(cls.__get_redis(), f"huaxin_order_id-{code}") |
| | | |
| | | |
| | | class TradeApi: |
| | |
| | | # 是否在禁止交易代码中 |
| | | from db import redis_manager |
| | | from db.redis_manager import RedisUtils |
| | | from utils import tool |
| | | |
| | | __redis_manager = redis_manager.RedisManager(2) |
| | |
| | | |
| | | @classmethod |
| | | def add_code(cls, code): |
| | | cls.__get_redis().sadd("white_list_codes", code) |
| | | cls.__get_redis().expire("white_list_codes", tool.get_expire()) |
| | | RedisUtils.sadd(cls.__get_redis(), "white_list_codes", code) |
| | | RedisUtils.expire(cls.__get_redis(), "white_list_codes", tool.get_expire()) |
| | | |
| | | @classmethod |
| | | def remove_code(cls, code): |
| | |
| | | |
| | | @classmethod |
| | | def list_codes(cls): |
| | | return cls.__get_redis().smembers("white_list_codes") |
| | | return RedisUtils.smembers(cls.__get_redis(), "white_list_codes") |
| | | |
| | | @classmethod |
| | | def clear(cls): |
| | | cls.__get_redis().delete("white_list_codes") |
| | | RedisUtils.delete( cls.__get_redis(), "white_list_codes") |
| | | |
| | | |
| | | class BlackListCodeManager: |
| | |
| | | |
| | | @classmethod |
| | | def add_code(cls, code): |
| | | cls.__get_redis().sadd("forbidden-trade-codes", code) |
| | | cls.__get_redis().expire("forbidden-trade-codes", tool.get_expire()) |
| | | RedisUtils.sadd( cls.__get_redis(), "forbidden-trade-codes", code) |
| | | RedisUtils.expire(cls.__get_redis(), "forbidden-trade-codes", tool.get_expire()) |
| | | |
| | | @classmethod |
| | | def remove_code(cls, code): |
| | |
| | | |
| | | @classmethod |
| | | def list_codes(cls): |
| | | return cls.__get_redis().smembers("forbidden-trade-codes") |
| | | return RedisUtils.smembers(cls.__get_redis(), "forbidden-trade-codes") |
| | | |
| | | @classmethod |
| | | def clear(cls): |
| | | cls.__get_redis().delete("forbidden-trade-codes") |
| | | RedisUtils.delete(cls.__get_redis(), "forbidden-trade-codes") |
| | | |
| | | |
| | | # 初始化禁止交易代码库 |
| | |
| | | |
| | | # 交易撤销数据管理器 |
| | | import constant |
| | | from db.redis_manager import RedisUtils |
| | | from utils import global_util, tool |
| | | import l2_data_util |
| | | from db import redis_manager |
| | |
| | | @classmethod |
| | | def set_buy_position_info(cls, code, capture_time, trade_time, last_data, last_data_index): |
| | | redis = cls.redisManager.getRedis() |
| | | redis.setex("buy_position_info-{}".format(code), tool.get_expire(), |
| | | json.dumps((capture_time, trade_time, last_data, last_data_index))) |
| | | RedisUtils.setex(redis, "buy_position_info-{}".format(code), tool.get_expire(), |
| | | json.dumps((capture_time, trade_time, last_data, last_data_index))) |
| | | |
| | | # 获取买入点信息 |
| | | @classmethod |
| | | def get_buy_position_info(cls, code): |
| | | redis = cls.redisManager.getRedis() |
| | | val_str = redis.get("buy_position_info-{}".format(code)) |
| | | val_str = RedisUtils.get(redis,"buy_position_info-{}".format(code)) |
| | | if val_str is None: |
| | | return None, None, None, None |
| | | else: |
| | |
| | | @classmethod |
| | | def remove_buy_position_info(cls, code): |
| | | redis = cls.redisManager.getRedis() |
| | | redis.delete("buy_position_info-{}".format(code)) |
| | | RedisUtils.delete( redis,"buy_position_info-{}".format(code)) |
| | | |
| | | # 设置买入确认点信息 |
| | | @classmethod |
| | |
| | | logger_trade.debug("买入确认点信息: code:{} index:{} data:{}", code, index, data) |
| | | redis = cls.redisManager.getRedis() |
| | | key = "buy_sure_position-{}".format(code) |
| | | redis.setex(key, tool.get_expire(), json.dumps((index, data))) |
| | | RedisUtils.setex(redis, key, tool.get_expire(), json.dumps((index, data))) |
| | | cls.buy_sure_position_dict[code] = (index, data) |
| | | # 移除下单信号的详细信息 |
| | | cls.remove_buy_position_info(code) |
| | |
| | | def __clear_buy_sure_position(cls, code): |
| | | redis = cls.redisManager.getRedis() |
| | | key = "buy_sure_position-{}".format(code) |
| | | redis.delete(key) |
| | | RedisUtils.delete(redis, key) |
| | | if code in cls.buy_sure_position_dict: |
| | | cls.buy_sure_position_dict.pop(code) |
| | | |
| | |
| | | |
| | | redis = cls.redisManager.getRedis() |
| | | key = "buy_sure_position-{}".format(code) |
| | | val = redis.get(key) |
| | | val = RedisUtils.get(redis, key) |
| | | if val is None: |
| | | return None, None |
| | | else: |
| | |
| | | # 保存跌价的时间 |
| | | def __save_down_price_time(self, code, time_str): |
| | | key = "under_water_last_time-{}".format(code) |
| | | self.__get_redis().setex(key, tool.get_expire(), time_str) |
| | | RedisUtils.setex(self.__get_redis(),key, tool.get_expire(), time_str) |
| | | |
| | | def __remove_down_price_time(self, code): |
| | | key = "under_water_last_time-{}".format(code) |
| | | self.__get_redis().delete(key) |
| | | RedisUtils.delete( self.__get_redis(), key) |
| | | |
| | | def __get_last_down_price_time(self, code): |
| | | key = "under_water_last_time-{}".format(code) |
| | | return self.__get_redis().get(key) |
| | | return RedisUtils.get(self.__get_redis(), key) |
| | | |
| | | def __increment_down_price_time(self, code, seconds): |
| | | key = "under_water_seconds-{}".format(code) |
| | | self.__get_redis().incrby(key, seconds) |
| | | # 设置个失效时间 |
| | | self.__get_redis().expire(key, tool.get_expire()) |
| | | RedisUtils.expire(self.__get_redis(), key, tool.get_expire()) |
| | | |
| | | def __get_down_price_time_as_seconds(self, code): |
| | | key = "under_water_seconds-{}".format(code) |
| | | val = self.__get_redis().get(key) |
| | | val = RedisUtils.get(self.__get_redis(), key) |
| | | if val is None: |
| | | return None |
| | | else: |
| | |
| | | # 清除所有的水下捞数据 |
| | | def clear_under_water_data(self): |
| | | key = "under_water_*" |
| | | keys = self.__get_redis().keys(key) |
| | | keys = RedisUtils.keys(self.__get_redis(), key) |
| | | for k in keys: |
| | | self.__get_redis().delete(k) |
| | | RedisUtils.delete(self.__get_redis(), k) |
| | | |
| | | def __save_current_price_codes_count(self, count): |
| | | key = "current_price_codes_count" |
| | | self.__get_redis().setex(key, 10, count) |
| | | RedisUtils.setex(self.__get_redis(),key, 10, count) |
| | | |
| | | def __get_current_price_codes_count(self): |
| | | key = "current_price_codes_count" |
| | | count = self.__get_redis().get(key) |
| | | count = RedisUtils.get(self.__get_redis(),key) |
| | | return 0 if count is None else count |
| | | |
| | | # 保存当前涨幅 |
| | | def __save_current_rate(self, code, rate): |
| | | key = "code_current_rate-{}".format(code) |
| | | self.__get_redis().setex(key, tool.get_expire(), rate) |
| | | RedisUtils.setex(self.__get_redis(),key, tool.get_expire(), rate) |
| | | |
| | | # 获取当前涨幅 |
| | | def __get_current_rate(self, code): |
| | | key = "code_current_rate-{}".format(code) |
| | | rate = self.__get_redis().get(key) |
| | | rate = RedisUtils.get(self.__get_redis(), key) |
| | | if rate is not None: |
| | | return float(rate) |
| | | return None |
| | | |
| | | def get_current_rate(self, code): |
| | | return self.__get_current_rate(code) |
| | | |
| | | |
| | | def process_rate(self, code, rate, time_str): |
| | | # 保存目前的代码涨幅 |
| | |
| | | # 获取涨幅前几的代码 |
| | | def get_top_rate_codes(self, top_n): |
| | | keys = "code_current_rate-*" |
| | | keys = self.__get_redis().keys(keys) |
| | | keys = RedisUtils.keys(self.__get_redis(), keys) |
| | | infos = [] |
| | | for k in keys: |
| | | code = k.split("-")[1] |
| | |
| | | def __incre_place_order_count(cls, code): |
| | | key = "place_order_count-{}".format(code) |
| | | cls.__get_redis().incrby(key, 1) |
| | | cls.__get_redis().expire(key, tool.get_expire()) |
| | | RedisUtils.expire(cls.__get_redis(), key, tool.get_expire()) |
| | | |
| | | @classmethod |
| | | def __get_place_order_count(cls, code): |
| | | key = "place_order_count-{}".format(code) |
| | | count = cls.__get_redis().get(key) |
| | | count = RedisUtils.get(cls.__get_redis(), key) |
| | | if count is not None: |
| | | return int(count) |
| | | return 0 |
| | |
| | | @classmethod |
| | | def clear_place_order_count(cls, code): |
| | | key = "place_order_count-{}".format(code) |
| | | cls.__get_redis().delete(key) |
| | | RedisUtils.delete(cls.__get_redis(), key) |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | |
| | | import win32gui |
| | | import win32con |
| | | |
| | | from db.redis_manager import RedisUtils |
| | | from ocr import ocr_util |
| | | from trade import l2_trade_util |
| | | from db import redis_manager |
| | |
| | | @classmethod |
| | | def __save_code_win(cls, code, win): |
| | | key = "buywin_distribute-{}".format(code) |
| | | cls.__get_redis().setex(key, tool.get_expire(), win) |
| | | RedisUtils.setex(cls.__get_redis(), key, tool.get_expire(), win) |
| | | |
| | | # 获取窗口分配的代码 |
| | | @classmethod |
| | |
| | | @classmethod |
| | | def __del_code_win(cls, code): |
| | | key = "buywin_distribute-{}".format(code) |
| | | cls.__get_redis().delete(key) |
| | | RedisUtils.delete(cls.__get_redis(), key) |
| | | |
| | | # 获取所有已经分配窗口的代码 |
| | | @classmethod |
| | | def __get_distributed_win_codes(cls): |
| | | key = "buywin_distribute-*" |
| | | keys = cls.__get_redis().keys(key) |
| | | keys = RedisUtils.keys(cls.__get_redis(), key) |
| | | codes = [] |
| | | for k in keys: |
| | | codes.append(k.replace("buywin_distribute-", "")) |
| | |
| | | def __get_available_win(cls): |
| | | # 是否有可用的还未分配的窗口 |
| | | key = "buywin_distribute-*" |
| | | keys = cls.__get_redis().keys(key) |
| | | keys = RedisUtils.keys(cls.__get_redis(), key) |
| | | win_list = cls.get_buy_wins() |
| | | if len(win_list) < 1: |
| | | raise Exception("必须要有一个买入窗口") |
| | |
| | | @classmethod |
| | | def get_distributed_code_wins(cls): |
| | | key = "buywin_distribute-*" |
| | | keys = cls.__get_redis().keys(key) |
| | | keys = RedisUtils.keys(cls.__get_redis(), key) |
| | | results = [] |
| | | for k in keys: |
| | | code = k.split("-")[-1] |
| | |
| | | import time |
| | | |
| | | import constant |
| | | from db.redis_manager import RedisManager |
| | | from db.redis_manager import RedisManager, RedisUtils |
| | | from log_module.log import logger_juejin_trade, hx_logger_trade_debug |
| | | from trade.huaxin import huaxin_trade_api |
| | | from utils import tool, huaxin_util |
| | |
| | | # 添加订单ID |
| | | @classmethod |
| | | def add_order_id(cls, code, account_id, order_id): |
| | | cls.__get_redis().sadd(f"huaxin_order_id-{code}", json.dumps((account_id, order_id))) |
| | | cls.__get_redis().expire(f"huaxin_order_id-{code}", tool.get_expire()) |
| | | RedisUtils.sadd( cls.__get_redis(), f"huaxin_order_id-{code}", json.dumps((account_id, order_id))) |
| | | RedisUtils.expire(cls.__get_redis(), f"huaxin_order_id-{code}", tool.get_expire()) |
| | | |
| | | # 删除订单ID |
| | | @classmethod |
| | |
| | | # 查询所有的订单号 |
| | | @classmethod |
| | | def list_order_ids(cls, code): |
| | | return cls.__get_redis().smembers(f"huaxin_order_id-{code}") |
| | | return RedisUtils.smembers(cls.__get_redis(), f"huaxin_order_id-{code}") |
| | | |
| | | |
| | | def init(context): |
| | |
| | | |
| | | import constant |
| | | from code_attribute import gpcode_manager |
| | | from db.redis_manager import RedisManager |
| | | from db.redis_manager import RedisManager, RedisUtils |
| | | from log_module.log import logger_juejin_trade |
| | | from utils import network_util, tool |
| | | |
| | |
| | | # 添加订单ID |
| | | @classmethod |
| | | def add_order_id(cls, code, account_id, order_id): |
| | | cls.__get_redis().sadd(f"juejin_order_id-{code}", json.dumps((account_id, order_id))) |
| | | RedisUtils.sadd(cls.__get_redis(),f"juejin_order_id-{code}", json.dumps((account_id, order_id))) |
| | | cls.__get_redis().expire(f"juejin_order_id-{code}", tool.get_expire()) |
| | | |
| | | # 删除订单ID |
| | |
| | | # 查询所有的订单号 |
| | | @classmethod |
| | | def list_order_ids(cls, code): |
| | | return cls.__get_redis().smembers(f"juejin_order_id-{code}") |
| | | return RedisUtils.smembers(cls.__get_redis(), f"juejin_order_id-{code}") |
| | | |
| | | |
| | | def init(context): |
| | |
| | | import dask |
| | | |
| | | from db import mysql_data, redis_manager |
| | | from db.redis_manager import RedisUtils |
| | | from output import kp_client_msg_manager |
| | | from trade import trade_data_manager, l2_trade_util, trade_juejin, trade_huaxin |
| | | |
| | |
| | | # 开启购买入口 |
| | | @classmethod |
| | | def open_buy(cls): |
| | | cls.__get_redis().setex("trade_buy_state", tool.get_expire(), 1) |
| | | RedisUtils.setex(cls.__get_redis(),"trade_buy_state", tool.get_expire(), 1) |
| | | |
| | | # 关闭购买入口 |
| | | @classmethod |
| | | def close_buy(cls): |
| | | cls.__get_redis().setex("trade_buy_state", tool.get_expire(), 0) |
| | | RedisUtils.setex(cls.__get_redis(), "trade_buy_state", tool.get_expire(), 0) |
| | | |
| | | # 是否可以下单 |
| | | @classmethod |
| | |
| | | def set_mode(cls, mode): |
| | | if mode != cls.MODE_ONLY_BUY_WANT_CODES and mode != cls.MODE_BUY_ALL: |
| | | raise Exception("mode参数值错误") |
| | | cls.__get_redis().setex("trade_buy_mode", tool.get_expire(), mode) |
| | | RedisUtils.setex(cls.__get_redis(), "trade_buy_mode", tool.get_expire(), mode) |
| | | |
| | | # 是否可以下单 |
| | | @classmethod |
| | |
| | | |
| | | @classmethod |
| | | def add_code(cls, code): |
| | | cls.__get_redis().sadd(cls.__key, code) |
| | | RedisUtils.sadd( cls.__get_redis(), cls.__key, code) |
| | | |
| | | @classmethod |
| | | def remove_code(cls, code): |
| | |
| | | |
| | | @classmethod |
| | | def clear(cls): |
| | | cls.__get_redis().delete(cls.__key) |
| | | RedisUtils.delete( cls.__get_redis(), cls.__key) |
| | | |
| | | |
| | | # 获取交易状态 |
| | |
| | | def set_trade_state(code, state): |
| | | logger_trade.info("set_trade_state {}-{}".format(code, state)) |
| | | redis = __redis_manager.getRedis() |
| | | redis.setex("trade-state-{}".format(code), tool.get_expire(), state) |
| | | RedisUtils.setex(redis, "trade-state-{}".format(code), tool.get_expire(), state) |
| | | |
| | | |
| | | def get_codes_by_trade_state(state): |
| | | redis = __redis_manager.getRedis() |
| | | keys = redis.keys("trade-state-*") |
| | | keys = RedisUtils.keys(redis, "trade-state-*") |
| | | codes = [] |
| | | if keys is not None: |
| | | for key in keys: |
| | |
| | | |
| | | def get_codes_by_trade_states(states): |
| | | redis = __redis_manager.getRedis() |
| | | keys = redis.keys("trade-state-*") |
| | | keys = RedisUtils.keys(redis, "trade-state-*") |
| | | codes = [] |
| | | if keys is not None: |
| | | for key in keys: |
| | |
| | | def save_trade_success_data(datas, day=datetime.datetime.now().strftime("%Y%m%d")): |
| | | redis = __redis_manager.getRedis() |
| | | time_str = tool.get_now_time_str() |
| | | redis.setex("trade-success-latest-time", tool.get_expire(), time_str) |
| | | RedisUtils.setex(redis, "trade-success-latest-time", tool.get_expire(), time_str) |
| | | mysqldb = mysql_data.Mysqldb() |
| | | # 合并同一合同编号 |
| | | dict_ = {} |
| | |
| | | |
| | | # 保存最新的委托数据 |
| | | redis = __redis_manager.getRedis() |
| | | redis.setex("trade-delegate-latest", tool.get_expire(), json.dumps(datas)) |
| | | redis.setex("trade-delegate-latest-time", tool.get_expire(), time_str) |
| | | RedisUtils.setex(redis,"trade-delegate-latest", tool.get_expire(), json.dumps(datas)) |
| | | RedisUtils.setex(redis,"trade-delegate-latest-time", tool.get_expire(), time_str) |
| | | |
| | | |
| | | # 获取交易成功数据 |
| | |
| | | def __clear_data(code): |
| | | redis_l2 = redis_manager.RedisManager(1).getRedis() |
| | | |
| | | keys = redis_l2.keys("*{}*".format(code)) |
| | | keys = RedisUtils.keys(redis_l2, "*{}*".format(code)) |
| | | for k in keys: |
| | | # if (k.find("l2-") is None or k.find("l2-") < 0) and (k.find("big_data-") is None or k.find("big_data-") < 0): |
| | | redis_l2.delete(k) |
| | | RedisUtils.delete(redis_l2, k) |
| | | |
| | | redis_trade = redis_manager.RedisManager(2).getRedis() |
| | | redis_trade.delete("trade-state-{}".format(code)) |
| | | RedisUtils.delete(redis_trade, "trade-state-{}".format(code)) |
| | | |
| | | redis_info = redis_manager.RedisManager(0).getRedis() |
| | | keys = redis_info.keys("*{}*".format(code)) |
| | | keys = RedisUtils.keys(redis_info, "*{}*".format(code)) |
| | | for k in keys: |
| | | if k.find("pre") is not None: |
| | | continue |
| | | if k.find("zyltgb") is not None: |
| | | continue |
| | | |
| | | redis_info.delete(k) |
| | | RedisUtils.delete(redis_info, k) |
| | | |
| | | |
| | | def __clear_big_data(): |
| | | redis_l2 = redis_manager.RedisManager(1).getRedis() |
| | | keys = redis_l2.keys("big_data-*") |
| | | keys = RedisUtils.keys(redis_l2, "big_data-*") |
| | | for k in keys: |
| | | redis_l2.delete(k) |
| | | RedisUtils.delete( redis_l2, k) |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | |
| | | |
| | | from code_attribute import gpcode_manager |
| | | from db import redis_manager |
| | | from db.redis_manager import RedisUtils |
| | | from utils import tool |
| | | from trade import trade_manager |
| | | |
| | |
| | | # 保存最大量 |
| | | def __save_max_buy1_volume(self, code, volume): |
| | | key = "max_buy1_volumn-{}".format(code) |
| | | self.__get_redis().setex(key, tool.get_expire(), volume) |
| | | RedisUtils.setex(self.__get_redis(), key, tool.get_expire(), volume) |
| | | |
| | | def __get_max_buy1_volume(self, code): |
| | | key = "max_buy1_volumn-{}".format(code) |
| | | val = self.__get_redis().get(key) |
| | | val = RedisUtils.get(self.__get_redis(), key) |
| | | if val is not None: |
| | | return int(val) |
| | | return None |
| | | |
| | | def __del_max_buy1_volume(self, code): |
| | | key = "max_buy1_volumn-{}".format(code) |
| | | val = self.__get_redis().delete(key) |
| | | val = RedisUtils.delete(self.__get_redis(), key) |
| | | |
| | | def __save_recod(self, code, time_str, volumn): |
| | | |
| | | # 保存每一次的 |
| | | key = "buy1_volumn-{}-{}".format(code, time_str) |
| | | self.__get_redis().setex(key, tool.get_expire(), volumn) |
| | | RedisUtils.setex(self.__get_redis(), key, tool.get_expire(), volumn) |
| | | # 保存最近的 |
| | | key = "buy1_volumn_latest_info-{}".format(code) |
| | | self.__get_redis().setex(key, tool.get_expire(), json.dumps((time_str, volumn))) |
| | | RedisUtils.setex(self.__get_redis(), key, tool.get_expire(), json.dumps((time_str, volumn))) |
| | | |
| | | # 保存上一次数据 |
| | | def __save_last_recod(self, code, time_str, volumn): |
| | | # 保存最近的 |
| | | key = "buy1_volumn_last_info-{}".format(code) |
| | | self.__get_redis().setex(key, tool.get_expire(), json.dumps((time_str, volumn))) |
| | | RedisUtils.setex(self.__get_redis(), key, tool.get_expire(), json.dumps((time_str, volumn))) |
| | | |
| | | def __get_last_record(self, code): |
| | | key = "buy1_volumn_last_info-{}".format(code) |
| | | val = self.__get_redis().get(key) |
| | | val = RedisUtils.get(self.__get_redis(), key) |
| | | if val is None: |
| | | return None, None |
| | | val = json.loads(val) |
| | |
| | | |
| | | def __get_latest_record(self, code): |
| | | key = "buy1_volumn_latest_info-{}".format(code) |
| | | val = self.__get_redis().get(key) |
| | | val = RedisUtils.get(self.__get_redis(), key) |
| | | if val is None: |
| | | return None, None |
| | | val = json.loads(val) |
| | |
| | | # 添加记录 |
| | | def __add_recod(self, code): |
| | | key = "buy1_volumn_codes" |
| | | self.__get_redis().sadd(key, code) |
| | | self.__get_redis().expire(key, 10) |
| | | RedisUtils.sadd( self.__get_redis(), key, code) |
| | | RedisUtils.expire(self.__get_redis(), key, 10) |
| | | |
| | | # 获取当前正在监听的代码 |
| | | def get_current_codes(self): |
| | | key = "buy1_volumn_codes" |
| | | return self.__get_redis().smembers(key) |
| | | return RedisUtils.smembers(self.__get_redis(), key) |
| | | |
| | | def get_buy_1_volumn(self, code, time_str): |
| | | key = "buy1_volumn-{}-{}".format(code, time_str) |
| | | return self.__get_redis().get(key) |
| | | return RedisUtils.get(self.__get_redis(), key) |
| | | |
| | | # 返回是否需要更新数据,是否需要撤单,撤单原因 |
| | | def save(self, code, time_str, volumn, price): |
| | |
| | | def __save_recod(self, code, time_str, volumn): |
| | | # 保存每一次的 |
| | | key = "buy1_volumn_juejin-{}-{}".format(code, time_str) |
| | | self.__get_redis().setex(key, tool.get_expire(), volumn) |
| | | RedisUtils.setex(self.__get_redis(), key, tool.get_expire(), volumn) |
| | | key = "buy1_volumn_juejin_latest_info-{}".format(code) |
| | | self.__get_redis().setex(key, tool.get_expire(), volumn) |
| | | RedisUtils.setex(self.__get_redis(), key, tool.get_expire(), volumn) |
| | | |
| | | def __get_latest_record(self, code): |
| | | key = "buy1_volumn_juejin_latest_info-{}".format(code) |
| | | val = self.__get_redis().get(key) |
| | | val = RedisUtils.get(self.__get_redis(), key) |
| | | if val is None: |
| | | return None, None |
| | | val = json.loads(val) |
| | |
| | | def __save_latest_recod(self, code, info): |
| | | # 保存每一次的 |
| | | key = "ths_l2_latest_trade_info-{}".format(code) |
| | | self.__get_redis().setex(key, tool.get_expire(), json.dumps(info)) |
| | | RedisUtils.setex(self.__get_redis(), key, tool.get_expire(), json.dumps(info)) |
| | | |
| | | def __get_latest_record(self, code): |
| | | key = "ths_l2_latest_trade_info-{}".format(code) |
| | | val = self.__get_redis().get(key) |
| | | val = RedisUtils.get(self.__get_redis(), key) |
| | | if val is None: |
| | | return None |
| | | return json.loads(val) |
| | |
| | | |
| | | def __add_buy1_code(self, code): |
| | | key = "buy1_volumn_codes" |
| | | self.__get_redis().sadd(key, code) |
| | | self.__get_redis().expire(key, 10) |
| | | RedisUtils.sadd( self.__get_redis(), key, code) |
| | | RedisUtils.expire(self.__get_redis(), key, 10) |
| | | |
| | | # 获取当前正在监听的代码 |
| | | |
| | | def get_current_codes(self): |
| | | key = "buy1_volumn_codes" |
| | | return self.__get_redis().smembers(key) |
| | | return RedisUtils.smembers(self.__get_redis(), key) |
| | | |
| | | def save_recod(self, code, data): |
| | | _str = json.dumps(data) |