| | |
| | | from trade.sell import sell_manager |
| | | from trade.sell.sell_rule_manager import TradeRuleManager, SellRule |
| | | from trade.trade_manager import TradeTargetCodeModeManager, AutoCancelSellModeManager |
| | | from settings.trade_setting import MarketSituationManager |
| | | from settings.trade_setting import MarketSituationManager, TradeBlockBuyModeManager |
| | | from utils import socket_util, data_export_util, tool, huaxin_util, output_util, global_util |
| | | from servers import server_util |
| | | |
| | |
| | | count = history_k_data_manager.update_history_k_bars() |
| | | self.send_response({"code": 0, "data": {"count": count}, "msg": f"需要更新K线代码数量:{count}"}, client_id, |
| | | request_id) |
| | | elif ctype == "get_buy_block_mode": |
| | | # 获取买入板块的模式 |
| | | can_buy_unique_block = TradeBlockBuyModeManager().can_buy_unique_block() |
| | | self.send_response({"code": 0, "data": {"unique_block": 1 if can_buy_unique_block else 0 }, "msg": f""}, client_id, |
| | | request_id) |
| | | |
| | | elif ctype == "add_buy_unique_block_mode": |
| | | # 添加独苗买入模式 |
| | | TradeBlockBuyModeManager().add_unique_block() |
| | | self.send_response({"code": 0, "data": {}, "msg": f""}, |
| | | client_id, |
| | | request_id) |
| | | |
| | | |
| | | |
| | | except Exception as e: |
| | | logging.exception(e) |
| | | self.send_response({"code": 1, "msg": f"数据处理出错:{e}"}, client_id, request_id) |
| | |
| | | |
| | | from trade.trade_manager import TradeTargetCodeModeManager, AccountAvailableMoneyManager |
| | | |
| | | from settings.trade_setting import MarketSituationManager |
| | | from settings.trade_setting import MarketSituationManager, TradeBlockBuyModeManager |
| | | |
| | | import concurrent.futures |
| | | |
| | |
| | | if place_order_count > 0: |
| | | return True, False, "之前下过单" |
| | | if not can_buy_result[0]: |
| | | if place_order_count <= 0 or can_buy_result[1]: |
| | | return False, True, f"非强势30分钟,不满足身位:{can_buy_result[2]}" |
| | | # 没有板块 |
| | | if can_buy_result[1]: |
| | | # 是独苗 |
| | | if not TradeBlockBuyModeManager().can_buy_unique_block(): |
| | | # 不能买独苗 |
| | | return False, True, f"非强势30分钟,不满足身位:{can_buy_result[2]}" |
| | | return True, False, can_buy_result[2] |
| | | |
| | | @classmethod |
| | |
| | | def get_situation_cache(self): |
| | | return self.__situation_cache |
| | | |
| | | |
| | | class TradeBlockBuyModeManager: |
| | | # 第一位:保留 第二位:保留 第三位:买独苗 第四位:传统 |
| | | # 0bxxxx |
| | | # 传统模式 |
| | | MODE_TRADITIONAL = 0b0001 |
| | | # 独苗模式 |
| | | MODE_UNIQUE_BLOCK = 0b0010 |
| | | |
| | | __REDIS_KEY = "trade_block_buy_mode" |
| | | __mode = int(MODE_TRADITIONAL) |
| | | |
| | | """ |
| | | 板块买入模式管理 |
| | | """ |
| | | __instance = None |
| | | __db = 2 |
| | | redisManager = redis_manager.RedisManager(2) |
| | | |
| | | def __new__(cls, *args, **kwargs): |
| | | if not cls.__instance: |
| | | cls.__instance = super(TradeBlockBuyModeManager, cls).__new__(cls, *args, **kwargs) |
| | | return cls.__instance |
| | | |
| | | @classmethod |
| | | def __load_data(cls): |
| | | val = cls.__get_redis().get(cls.__REDIS_KEY) |
| | | if val is not None: |
| | | cls.__mode = int(val) |
| | | |
| | | @classmethod |
| | | def __get_redis(cls): |
| | | return cls.redisManager.getRedis() |
| | | |
| | | def __set_mode(self, mode: int): |
| | | self.__mode = mode |
| | | RedisUtils.setex_async(self.__db, self.__REDIS_KEY, tool.get_expire(), mode) |
| | | |
| | | def get_mode(self): |
| | | return self.__mode |
| | | |
| | | def add_unique_block(self): |
| | | mode = int(self.__mode | self.MODE_UNIQUE_BLOCK) |
| | | self.__set_mode(mode) |
| | | |
| | | def remove_unique_block(self): |
| | | mode = int(self.__mode & ~self.MODE_UNIQUE_BLOCK) |
| | | self.__set_mode(mode) |
| | | |
| | | def can_buy_unique_block(self): |
| | | r = self.__mode & self.MODE_UNIQUE_BLOCK > 1 |
| | | return r > 0 |
| | | |
| | |
| | | import decimal |
| | | |
| | | import l2_data_util |
| | | from code_attribute.code_data_util import ZYLTGBUtil |
| | | from code_attribute.gpcode_manager import CodesNameManager |
| | | from huaxin_client import l1_subscript_codes_manager |
| | | from third_data.history_k_data_manager import HistoryKDataManager |
| | | from third_data.history_k_data_util import JueJinHttpApi, HistoryKDatasUtils |
| | | from utils import tool, init_data_util |
| | | from settings.trade_setting import TradeBlockBuyModeManager |
| | | |
| | | |
| | | def test_active_buy(): |
| | |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | | # codes = ["600859", "000333"] |
| | | # for code in codes: |
| | | # datas = init_data_util.get_volumns_by_code(code) |
| | | # HistoryKDataManager().save_history_bars(code, datas[0]['bob'].strftime("%Y-%m-%d"), datas, force=True) |
| | | codes = HistoryKDataManager().get_history_bars_codes("2024-07-02") |
| | | print(codes) |
| | | # print(count) |
| | | # print(HistoryKDataManager().get_history_bars(code, "2024-07-02")) |
| | | print(TradeBlockBuyModeManager().can_buy_unique_block(), bin(TradeBlockBuyModeManager().get_mode())) |
| | | print(TradeBlockBuyModeManager().add_unique_block()) |
| | | print(TradeBlockBuyModeManager().can_buy_unique_block(), bin(TradeBlockBuyModeManager().get_mode())) |
| | | print(TradeBlockBuyModeManager().remove_unique_block()) |
| | | print(TradeBlockBuyModeManager().can_buy_unique_block(), bin(TradeBlockBuyModeManager().get_mode())) |
| | |
| | | |
| | | latest_trade_delegate_data = [] |
| | | |
| | | |
| | | # 关闭购买入口 |
| | | # 开启购买入口 |
| | | class TradeStateManager: |