Administrator
2024-06-12 6c5e549ae07867e5482eadd2b648b68a88491ce2
bug修复
6个文件已修改
1个文件已添加
75 ■■■■ 已修改文件
db/redis_manager_delegate.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
log_module/log_export.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
main.py 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
test/test_api.py 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/huaxin_trade_data_update.py 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/trade_manager.py 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/output_data_util.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
db/redis_manager_delegate.py
@@ -9,7 +9,7 @@
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
log_module/log_export.py
@@ -142,7 +142,7 @@
if __name__ == "__main__":
    fdatas = load_latest_market_info("2024-05-29")
    fdatas = load_big_buy_order()
    print(fdatas)
    pass
main.py
@@ -8,6 +8,7 @@
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
@@ -16,6 +17,7 @@
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
@@ -258,8 +260,6 @@
    # 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:
@@ -269,7 +269,7 @@
                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
                # 获取股票代码的可转债代码
@@ -282,7 +282,6 @@
                    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()
@@ -380,6 +379,8 @@
    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()
test/test_api.py
@@ -4,10 +4,11 @@
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"))
trade/huaxin_trade_data_update.py
@@ -13,6 +13,7 @@
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
@@ -84,6 +85,11 @@
                        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":
trade/trade_manager.py
New file
@@ -0,0 +1,45 @@
"""
交易管理
"""
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
utils/output_data_util.py
@@ -58,5 +58,5 @@
    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