admin
2025-06-10 72e5e0a0a601aaf26f8363b44c452f5bf1c6d1b7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
"""
账户管理模块【管理账户下面的资金管理方法及仓位管理方法等】
"""
from log_module.log import logger_common, logger_debug
from strategy.order_methods import TodayBuyCodeManager
from trade import huaxin_trade_api
 
# 引入全局变量模块
from strategy import data_cache
 
# 获取logger实例
logger = logger_common
 
 
# 资金管理函数
def finance_management():
    try:
        account_finance = huaxin_trade_api.get_money()
        # logger.info(f"account_finance==={account_finance}")
 
        if account_finance is not None and account_finance['code'] == 0:
            data_cache.account_finance_dict = account_finance['data']
            logger.info(f"data_cache.account_finance_dict==={data_cache.account_finance_dict}")
            data_cache.usefulMoney = data_cache.account_finance_dict[0]['usefulMoney']  # 可用资金
            frozenCash = data_cache.account_finance_dict[0]['frozenCash']  # 冻结的资金
            fetchLimit = data_cache.account_finance_dict[0]['fetchLimit']  # 可取资金
            preDeposit = data_cache.account_finance_dict[0]['preDeposit']  # 上日结存
            logger.info(f"可用资金==={data_cache.usefulMoney}")
            logger.info(f"冻结的资金==={frozenCash}")
            logger.info(f"可取资金==={fetchLimit}")
            logger.info(f"上日结存==={preDeposit}")
    except Exception as e:
        logger_debug.exception(e)
 
 
# 仓位管理函数
def position_management():
    # 仓位查询函数
    account_positions = huaxin_trade_api.get_position_list()
    if account_positions is not None and account_positions['code'] == 0:
        logger.info(f"持仓数据的长度==={len(account_positions['data'])}")
        logger.info(f"持仓data==={account_positions['data']}")
        data_cache.account_positions_dict = account_positions['data']
        for i in data_cache.account_positions_dict:
            # logger.info(f"i={i}")
            # i={'investorID': '00044396', 'tradingDay': '20250214', 'securityName': '海南华铁', 'securityID': '603300', 'historyPos': 0, 'historyPosFrozen': 0, 'todayBSPos': 500, 'todayBSPosFrozen': 0, 'historyPosPrice': 7.945, 'totalPosCost': -80.25846370000727, 'prePosition': 11000, 'availablePosition': 0, 'currentPosition': 500, 'openPosCost': 4250.0, 'todayCommission': 79.6604637, 'todayTotalBuyAmount': 4250.0, 'todayTotalSellAmount': 91657.0}
            # symbol = i['symbol']  # 当前个股代码
            securityName = i['securityName']  # 当前个股名称
            securityID = i['securityID']  # 当前个股代码
            # symbol_code = symbol.split('.')[1]  # 将symbol转为纯数字编号
            historyPos = i['historyPos']  # 昨日仓位转入数量(昨仓)
            historyPosFrozen = i['historyPosFrozen']  # 昨仓冻结
            todayBSPos = i['todayBSPos']  # 今日买卖仓位转入转出数量
            todayBSPosFrozen = i['todayBSPosFrozen']  # 今买卖仓冻结
            historyPosPrice = i['historyPosPrice']  # 昨仓成本价
            totalPosCost = i['totalPosCost']  # 持仓成本
            prePosition = i['prePosition']  # 上次余额(盘中不变)
            currentPosition = i['currentPosition']  # 股份余额  (总持仓股份数量)
            availablePosition = i['availablePosition']  # 股份可用 (可用股份数量)
            openPosCost = i['openPosCost']  # 开仓成本(开仓资金)
            todayCommission = i['todayCommission']  # 今手续费
            todayTotalBuyAmount = i['todayTotalBuyAmount']  # 当日累计买入金额
            todayTotalSellAmount = i['todayTotalSellAmount']  # 当日累计卖出金额
 
            # print(f" 当前代码 = {i['symbol']}  持仓均价 = {i['vwap']}    持仓手数=={i['volume']}   可用金额=={i['available_now']} ")
            if currentPosition != 0:
                # 当前持仓 持仓代码集合
                data_cache.position_symbols_set.add(securityID)
                logger.info(f"当前持仓=={securityName}")
                # 如果 可用仓位等于0 且 昨仓冻结(挂单委托中)等于0  昨日收盘价获取到非0值时(不知名原因导致有些票会获取到0值导致后续公式报错,阻止intraday_growth函数正常运行)
                if availablePosition == 0 and historyPosFrozen == 0:
                    # 新增持仓
                    logger.info(f"今日新增持仓==={securityName}")
                    data_cache.addition_position_symbols_set.add(securityID)
                    TodayBuyCodeManager().add_deal_code(securityID)
                else:
                    data_cache.available_symbols_set.add(securityID)
                    if historyPosFrozen != 0:
                        logger.info(f"昨日持仓==={securityName}  挂单中》》 挂单数量:{historyPosFrozen}")
                    if availablePosition != 0:
                        logger.info(f"昨日持仓==={securityName}  持仓可用:{availablePosition}")
        # 及时查询持仓字典数据有用,整理持仓集合也有用。整理持仓集合就是仓位管理的一部分功能。
        logger.info(f"今日持仓集合====================================【{data_cache.position_symbols_set}】")
        logger.info(f"今日可用持仓数量====================================【{len(data_cache.available_symbols_set)}】")
        logger.info(
            f"今日新增持仓数量====================================【{len(data_cache.addition_position_symbols_set)}】")