| | |
| | | |
| | | from log_module import async_log_util |
| | | from log_module.log import logger_redis_debug, logger_system |
| | | from utils import constant, middle_api_protocol |
| | | from utils import constant, middle_api_protocol, tool |
| | | |
| | | config = constant.REDIS_CONFIG |
| | | |
| | |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | | fdatas = load_latest_market_info("2024-05-29") |
| | | fdatas = load_big_buy_order() |
| | | print(fdatas) |
| | | |
| | | pass |
| | |
| | | import time |
| | | |
| | | from code_attribute import target_codes_manager, gpcode_manager, code_market_manager, history_k_data_util |
| | | from db.redis_manager_delegate import RedisUtils |
| | | from huaxin_client import l2_client_for_cb, trade_client_for_cb |
| | | from huaxin_client.client_network import SendResponseSkManager |
| | | from log_module import async_log_util, log_export |
| | |
| | | from third_data.kpl_data_manager import PullTask, KPLCodeJXBlockManager, KPLLimitUpDataRecordManager |
| | | from trade import huaxin_trade_api, huaxin_trade_data_update, huaxin_sell_util, backtest_trade |
| | | from trade.buy_strategy import BuyStrategyDataManager |
| | | from trade.trade_manager import CodeTradeStateManager |
| | | from utils import middle_api_protocol, outside_api_command_manager, constant, tool, huaxin_util, socket_util, sell_util, \ |
| | | output_util, l2_huaxin_util, output_data_util |
| | | |
| | |
| | | # print("下单:", huaxin_trade_api.order(1, "127075", 10, 140.5, blocking=True)) |
| | | |
| | | |
| | | __deal_codes = set() |
| | | |
| | | |
| | | def read_l2_results(trade_call_back_queue): |
| | | while True: |
| | |
| | | async_log_util.info(logger_trade, f"正股涨停,准备买入可转债:{result}") |
| | | # 获取可以买的代码 |
| | | code, trade_time = result[0], result[1] |
| | | if code in __deal_codes: |
| | | if CodeTradeStateManager().get_trade_state(code) == CodeTradeStateManager.TRADE_STATE_ALREADY_BUY: |
| | | async_log_util.info(logger_trade, f"已经下单过:{result}") |
| | | continue |
| | | # 获取股票代码的可转债代码 |
| | |
| | | async_log_util.info(logger_trade, f"准备下单:{cb_code}-{buy_price}") |
| | | # 买入20股 |
| | | result = huaxin_trade_api.order(1, cb_code, 20, buy_price, blocking=True) |
| | | __deal_codes.add(code) |
| | | async_log_util.info(logger_trade, f"可转债下单结果:{result}") |
| | | huaxin_trade_data_update.add_position_list() |
| | | huaxin_trade_data_update.add_money_list() |
| | |
| | | threading.Thread(target=read_l2_results, args=(trade_call_back_queue,), daemon=True).start() |
| | | # ===========异步日志持久化========== |
| | | threading.Thread(target=async_log_util.run_sync, daemon=True).start() |
| | | # ===========Redis缓存====================== |
| | | threading.Thread(target=RedisUtils.run_loop, daemon=True).start() |
| | | # 运行L2数据监听队列 |
| | | queue_market = multiprocessing.Queue() |
| | | threading.Thread(target=__read_market_data, args=(queue_market,), daemon=True).start() |
| | |
| | | from third_data import kpl_api, kpl_data_manager, kpl_block_util, kpl_util |
| | | from third_data.kpl_data_manager import KPLCodeJXBlockManager |
| | | from trade import huaxin_trade_api |
| | | from trade.trade_manager import CodeTradeStateManager |
| | | from utils import output_data_util, tool |
| | | |
| | | if __name__ == "__main__": |
| | | results = kpl_api.getLimitUpInfoNew() |
| | | datas = kpl_util.parseLimitUpData(results) |
| | | kpl_data_manager.KPLLimitUpDataRecordManager.save_record(tool.get_now_date(), datas) |
| | | print(output_data_util.load_code_detail_info("300398")) |
| | | code = "000333" |
| | | CodeTradeStateManager().set_trade_state(code, CodeTradeStateManager.TRADE_STATE_ALREADY_BUY) |
| | | print(CodeTradeStateManager().get_trade_state(code)) |
| | | print(CodeTradeStateManager().get_trade_state("000222")) |
| | |
| | | from log_module.log import hx_logger_trade_debug, logger_system |
| | | from records import huaxin_trade_record_manager |
| | | from trade import huaxin_trade_api |
| | | from trade.trade_manager import CodeTradeStateManager |
| | | |
| | | from utils import huaxin_util, tool |
| | | import concurrent.futures |
| | |
| | | print("成交响应:", dataJSON) |
| | | if dataJSON["code"] == 0: |
| | | datas = dataJSON["data"] |
| | | # 今日成交了的票就不下单了 |
| | | for d in datas: |
| | | if d["volume"] > 0 and int(d["direction"]) == 0: |
| | | CodeTradeStateManager().set_trade_state(d["securityID"], |
| | | CodeTradeStateManager.TRADE_STATE_ALREADY_BUY) |
| | | huaxin_trade_record_manager.DealRecordManager.add(datas) |
| | | # 持仓股 |
| | | elif type_ == "position_list": |
New file |
| | |
| | | """ |
| | | 交易管理 |
| | | """ |
| | | from db.redis_manager_delegate import RedisManager, RedisUtils |
| | | from utils import constant, tool |
| | | |
| | | |
| | | class CodeTradeStateManager: |
| | | TRADE_STATE_ALREADY_BUY = 1 |
| | | TRADE_STATE_NOT_BUY = 0 |
| | | |
| | | __instance = None |
| | | __redisManager = RedisManager() |
| | | __trade_state_cache = {} |
| | | |
| | | def __new__(cls, *args, **kwargs): |
| | | if not cls.__instance: |
| | | cls.__instance = super(CodeTradeStateManager, cls).__new__(cls, *args, **kwargs) |
| | | cls.__load_datas() |
| | | return cls.__instance |
| | | |
| | | @classmethod |
| | | def __load_datas(cls): |
| | | keys = cls.__get_redis().keys("trade_state-*") |
| | | for k in keys: |
| | | code = k.split("-")[1] |
| | | val = cls.__get_redis().get(k) |
| | | val = int(val) |
| | | cls.__trade_state_cache[code] = val |
| | | |
| | | @classmethod |
| | | def __get_redis(cls): |
| | | return cls.__redisManager.getRedis() |
| | | |
| | | # 设置交易状态 |
| | | def set_trade_state(self, code, state): |
| | | self.__trade_state_cache[code] = state |
| | | RedisUtils.setex_async(constant.REDIS_DB, f"trade_state-{code}", tool.get_expire(), state) |
| | | |
| | | # 获取交易状态 |
| | | def get_trade_state(self, code): |
| | | state = self.__trade_state_cache.get(code) |
| | | if state is None: |
| | | return self.TRADE_STATE_NOT_BUY |
| | | return state |
| | |
| | | if not big_orders: |
| | | big_orders = [] |
| | | fresults["bigOrderDealCount"] = len(big_orders) |
| | | fresults["bigOrderDealMoney"] = sum([x[2] for x in big_orders]) |
| | | fresults["bigOrderDealMoney"] = output_util.money_desc(sum([x[2] for x in big_orders])) |
| | | return fresults |