""" 账户管理模块【管理账户下面的资金管理方法及仓位管理方法等】 """ 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)}】")