This commit is contained in:
lz_db
2025-12-05 13:25:26 +08:00
parent efbcb63cec
commit 64c993319a
8 changed files with 205 additions and 17 deletions

View File

@@ -1,7 +1,7 @@
from .base_sync import BaseSync
from loguru import logger
from typing import List, Dict
from sqlalchemy import text
from sqlalchemy import text, select, func, and_
from models.orm_models import StrategyKX
class AccountSyncBatch(BaseSync):
@@ -12,14 +12,9 @@ class AccountSyncBatch(BaseSync):
try:
logger.info(f"开始批量同步账户信息,共 {len(accounts)} 个账号")
# 测试
# res = await self.redis_client._get_account_info_from_redis(10140, 5548, 'mt5')
# print(res)
# return
# 收集所有账号的数据
all_account_data = await self.redis_client._collect_all_account_data(accounts)
if not all_account_data:
logger.info("无账户信息数据需要同步")
return
@@ -182,3 +177,44 @@ class AccountSyncBatch(BaseSync):
logger.error(f"批量查询现有记录失败: {e}")
return existing_records
async def networth(self, accounts: Dict[str, Dict]):
"""计算所有策略的净值"""
# 从accounts中获取所有策略的st_id
st_ids = set()
for account in accounts.values():
st_ids.add(account['st_id'])
stmt = select(
StrategyKX.st_id,
StrategyKX.time,
func.sum(StrategyKX.balance).label('balance_sum'),
func.sum(StrategyKX.profit).label('profit_sum'),
func.sum(StrategyKX.withdrawal).label('withdrawal_sum'),
func.sum(StrategyKX.deposit).label('deposit_sum'),
func.sum(StrategyKX.other).label('other_sum')
).where(
StrategyKX.st_id.in_(st_ids)
).group_by(
StrategyKX.st_id,
StrategyKX.time
).order_by(
StrategyKX.time.asc(),
StrategyKX.st_id.asc()
)
results = self.session.execute(stmt).all()
return [
{
'st_id': row.st_id,
'time': row.time,
'balance_sum': float(row.balance_sum) if row.balance_sum else 0.0,
'profit_sum': float(row.profit_sum) if row.profit_sum else 0.0,
'withdrawal_sum': float(row.withdrawal_sum) if row.withdrawal_sum else 0.0,
'deposit_sum': float(row.deposit_sum) if row.deposit_sum else 0.0,
'other_sum': float(row.other_sum) if row.other_sum else 0.0,
}
for row in results
]