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