"""
|
账户管理模块【管理账户下面的资金管理方法及仓位管理方法等】
|
"""
|
# import time
|
# import datetime
|
# import decimal
|
from trade import huaxin_trade_api
|
|
# import logging
|
# import threading
|
# 引入全局变量模块
|
from strategy import data_cache
|
|
# 引入日志模块
|
from strategy.logging_config import get_logger
|
# 获取logger实例
|
logger = get_logger()
|
|
|
# 资金管理函数
|
def finance_management():
|
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'] # 上日结存
|
print(f"可用资金==={data_cache.usefulMoney}")
|
print(f"冻结的资金==={frozenCash}")
|
print(f"可取资金==={fetchLimit}")
|
print(f"上日结存==={preDeposit}")
|
|
# finance_management()
|
|
# 构造循环请求资金管理线程
|
# def finance_management_process():
|
# while True:
|
# try:
|
# # now_start = time.time()
|
# # print(f"finance_management开始{now_start}")
|
# finance_management()
|
# # now_end = time.time()
|
# # print(f"finance_management完成一下{now_end}")
|
# except Exception as error:
|
# print(f"获取资金管理线程报错An error occurred: {error}")
|
# finally:
|
# time.sleep(1)
|
|
|
# 仓位管理函数
|
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:
|
# 当前持仓
|
# print(f"当前持仓=={securityName}")
|
if availablePosition != 0: # 如果可用资金不等于0 昨日收盘价获取到非0值时(不知名原因导致有些票会获取到0值导致后续公式报错,阻止intraday_growth函数正常运行)
|
# print(f"持仓可用股{symbol}")
|
logger.info(f"今日持仓可用==={securityName}")
|
data_cache.available_symbols_set.add(securityID)
|
else:
|
# 新增持仓
|
logger.info(f"今日新增持仓==={securityName}")
|
data_cache.addition_position_symbols_set.add(securityID)
|
# todo 自主的计算持仓数量 管用 还是 服务端即时查询同步有用 有待验证
|
logger.info(f"今日可用持仓数量====================================【{len(data_cache.available_symbols_set)}】")
|
logger.info(f"今日新增持仓数量====================================【{len(data_cache.addition_position_symbols_set)}】")
|
|
|
# position_management()
|
|
# # 构造循环请求仓位管理线程
|
# def position_management_process():
|
# while True:
|
# try:
|
# # now_start = time.time()
|
# # print(f"position_management开始{now_start}")
|
# position_management()
|
# # now_end = time.time()
|
# # print(f"position_management完成一下{now_end}")
|
# except Exception as error:
|
# print(f"获取仓位管理线程报错An error occurred: {error}")
|
# finally:
|
# time.sleep(1)
|