| | |
| | | |
| | | # 是否是仿真交易 |
| | | IS_SIMULATED_TRADE = False |
| | | |
| | | check_plate_list = {'无', 'ST摘帽', 'ST板块', '超跌', '次新股', '北交所', '科创板', |
| | | '年报增长', '年报预增', '并购重组', '股权转让', '送转填权', '高送转', '壳资源', |
| | | '资产管理', '举牌', |
| | | '专用设备', '创投'} |
| | |
| | | from log_module import log_export, async_log_util |
| | | from log_module.log import hx_logger_l2_transaction, logger_debug, logger_request_api, logger_system |
| | | from strategy import data_cache |
| | | from strategy.forbidden_plates_manager import ForbiddenPlatesManager |
| | | from strategy.kpl_data_manager import KPLMarketsSiftPlateLogManager, KPLMarketStockHeatLogManager |
| | | from strategy.trade_setting import TradeSetting |
| | | from trade import huaxin_trade_api, huaxin_trade_data_update |
| | |
| | | # (距离09:15:00的秒数, 时间, 强度) |
| | | fdatas.append((tool.trade_time_sub(data[0], "09:15:00"), data[0], data[1])) |
| | | response_data = json.dumps({"code": 0, "data": fdatas}) |
| | | elif url.path == "/get_place_order_records": |
| | | datas = data_cache.purchased_stocks_details_list |
| | | response_data = json.dumps({"code": 0, "data": datas}) |
| | | elif url.path == "/get_forbidden_plates": |
| | | datas = ForbiddenPlatesManager().list_plates() |
| | | # human 认为设置 fixed: 固定的 |
| | | response_data = json.dumps( |
| | | {"code": 0, "data": {"human": list(datas), "fixed": list(constant.check_plate_list)}}) |
| | | elif url.path == "/add_forbidden_plate": |
| | | plate = params_dict.get("plate") |
| | | ForbiddenPlatesManager().add_plate(plate) |
| | | response_data = json.dumps({"code": 0, "data": {}}) |
| | | elif url.path == "/remove_forbidden_plate": |
| | | plate = params_dict.get("plate") |
| | | ForbiddenPlatesManager().remove_plate(plate) |
| | | response_data = json.dumps({"code": 0, "data": {}}) |
| | | elif url.path == "/get_market_sift_plate_stock_dict": |
| | | # 获取开盘啦板块精选流入 |
| | | data = data_cache.market_sift_plate_stock_dict |
| | | response_data = json.dumps({"code": 0, "data": data}) |
| | | |
| | | self.send_response(200) |
| | | # 发给请求客户端的响应数据 |
| | |
| | | data_cache.bought_plate.extend(limit_up_plate_included_list) |
| | | logger_info( |
| | | f"【{k_line_data[0]['sec_name']}】交易成功!持仓集合:{data_cache.position_symbols_set}") |
| | | # 传给GUI显示 |
| | | purchased_stock_details = { |
| | | "name": k_line_data[0]['sec_name'], |
| | | "policy_name": "有概念有强度策略分支", |
| | |
| | | data_cache.bought_plate.extend(limit_up_plate_included_list) |
| | | logger_info( |
| | | f"【{k_line_data[0]['sec_name']}】交易成功!持仓集合:{data_cache.position_symbols_set}") |
| | | # 传给GUI显示 |
| | | purchased_stock_details = { |
| | | "name": k_line_data[0]['sec_name'], |
| | | "policy_name": "有概念无强度策略分支", |
| | | "plate_name": limit_up_plate_included, |
| | | "buy_time_trading_volume_ratio": ( |
| | | current_volume / k_line_data[0]['volume']), |
| | | } |
| | | data_cache.purchased_stocks_details_list.append(purchased_stock_details) |
| | | logger_info( |
| | | f"已成交股票详情列表:{data_cache.purchased_stocks_details_list} ") |
| | | ''' |
| | | 无概念 有强度视界 |
| | | ''' |
| | | if len(limit_up_plate_included) == 0: |
| | | # logger_info(f"【无概念】") |
| | | if len(limit_up_plate_included) == 0 or limit_up_plate_included.issubset( |
| | | check_plate_list) is True: |
| | | # logger_info(f"【无概念 或 概念在屏蔽概念组中】") |
| | | if strength_list_have_it is True: |
| | | logger_info( |
| | | f"【{k_line_data[0]['sec_name']}】--------------------------------------------------------------------------------------------------------[有强度视界]") |
| | |
| | | data_cache.bought_plate.extend(strength_plate) |
| | | logger_info( |
| | | f"【{k_line_data[0]['sec_name']}】交易成功!持仓集合:{data_cache.position_symbols_set}") |
| | | # 传给GUI显示 |
| | | purchased_stock_details = { |
| | | "name": k_line_data[0]['sec_name'], |
| | | "policy_name": "无概念有强度策略分支", |
| | | "plate_name": strength_plate, |
| | | "buy_time_trading_volume_ratio": ( |
| | | current_volume / k_line_data[0]['volume']), |
| | | } |
| | | data_cache.purchased_stocks_details_list.append( |
| | | purchased_stock_details) |
| | | logger_info( |
| | | f"已成交股票详情列表:{data_cache.purchased_stocks_details_list} ") |
| | | ''' |
| | | 无概念无强度 有小量换大涨幅度视界 |
| | | ''' |
New file |
| | |
| | | """ |
| | | 黑名单板块管理 |
| | | """ |
| | | from db import redis_manager_delegate as redis_manager |
| | | from db.redis_manager_delegate import RedisUtils |
| | | from utils import tool |
| | | |
| | | |
| | | @tool.singleton |
| | | class ForbiddenPlatesManager: |
| | | def __init__(self): |
| | | self.forbidden_plates = set() |
| | | self.__db = 1 |
| | | self.__redisManager = redis_manager.RedisManager(self.__db) |
| | | self.__load_forbidden_plates() |
| | | |
| | | def __load_forbidden_plates(self): |
| | | plates = RedisUtils.smembers(self.__redisManager.getRedis(), "forbidden_plates") |
| | | if plates: |
| | | self.forbidden_plates = set(plates) |
| | | |
| | | def add_plate(self, plate): |
| | | """ |
| | | 添加板块 |
| | | :param plate: |
| | | :return: |
| | | """ |
| | | if plate in self.forbidden_plates: |
| | | return |
| | | self.forbidden_plates.add(plate) |
| | | RedisUtils.sadd_async(self.__db, "forbidden_plates", plate) |
| | | RedisUtils.expire_async(self.__db, "forbidden_plates", tool.get_expire()) |
| | | |
| | | def remove_plate(self, plate): |
| | | """ |
| | | 移除板块 |
| | | :param plate: |
| | | :return: |
| | | """ |
| | | if plate not in self.forbidden_plates: |
| | | return |
| | | self.forbidden_plates.remove(plate) |
| | | RedisUtils.srem_async(self.__db, "forbidden_plates", plate) |
| | | RedisUtils.expire_async(self.__db, "forbidden_plates", tool.get_expire()) |
| | | |
| | | def list_plates(self): |
| | | """ |
| | | 列出所有板块 |
| | | :return: |
| | | """ |
| | | return self.forbidden_plates |
| | | |
| | | def is_plate_forbidden(self, plate): |
| | | """ |
| | | 判断板块是否被禁止 |
| | | :param plate: |
| | | :return: |
| | | """ |
| | | return plate in self.forbidden_plates |
| | | |
| | | |
| | | if __name__ == '__main__': |
| | | print(ForbiddenPlatesManager().list_plates()) |