rebuild(stage-12): deliver private review workflows
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
from typing import Any
|
||||
|
||||
ACTIONS = {"buy": "买入", "sell": "卖出", "add": "加仓", "trim": "减仓", "watch": "观察"}
|
||||
EMOTIONS = {
|
||||
"calm": "平静",
|
||||
"confident": "笃定",
|
||||
"hesitant": "犹豫",
|
||||
"anxious": "焦虑",
|
||||
"impulsive": "冲动",
|
||||
}
|
||||
|
||||
|
||||
def note(row) -> dict[str, Any] | None:
|
||||
return dict(row) if row is not None else None
|
||||
|
||||
|
||||
def trades(rows) -> list[dict[str, Any]]:
|
||||
result = []
|
||||
for row in rows:
|
||||
item = dict(row)
|
||||
item["tags"] = json.loads(str(item.pop("tags_json")))
|
||||
item["action_label"] = ACTIONS[str(item["action"])]
|
||||
item["emotion_label"] = EMOTIONS[str(item["emotion"])]
|
||||
result.append(item)
|
||||
return result
|
||||
|
||||
|
||||
def trade_summary(items: list[dict[str, Any]]) -> dict[str, Any]:
|
||||
realized = [
|
||||
item for item in items if item["pnl_amount"] is not None or item["pnl_pct"] is not None
|
||||
]
|
||||
wins = sum(
|
||||
float(item["pnl_pct"] if item["pnl_pct"] is not None else item["pnl_amount"]) > 0
|
||||
for item in realized
|
||||
)
|
||||
amounts = [float(item["pnl_amount"]) for item in items if item["pnl_amount"] is not None]
|
||||
positions = [float(item["position_pct"]) for item in items if item["position_pct"] is not None]
|
||||
return {
|
||||
"total": len(items),
|
||||
"realized": len(realized),
|
||||
"win_rate": round(wins / len(realized) * 100, 1) if realized else None,
|
||||
"pnl_amount": round(sum(amounts), 2) if amounts else None,
|
||||
"average_position": round(sum(positions) / len(positions), 1) if positions else None,
|
||||
}
|
||||
|
||||
|
||||
def alert(row, today: str) -> dict[str, Any]:
|
||||
item = dict(row)
|
||||
item["is_read"] = bool(item["is_read"])
|
||||
item["due"] = str(item["available_date"]) <= today
|
||||
return item
|
||||
Reference in New Issue
Block a user