53863559f4
Retarget git remote, install path, and deploy docs from crypto_monitor to crypto_monitor_user. Co-authored-by: Cursor <cursoragent@cursor.com>
55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
"""复盘表单:下单类型与开仓类型校验(三所共用)."""
|
|
from __future__ import annotations
|
|
|
|
from typing import Optional, Sequence, Tuple
|
|
|
|
from lib.strategy.strategy_trade_labels import (
|
|
JOURNAL_ORDER_TYPE_OPTIONS,
|
|
STRATEGY_ENTRY_REASON_OPTIONS,
|
|
normalize_journal_order_type,
|
|
)
|
|
from lib.trade.entry_model_lib import (
|
|
TRADE_STYLE_FALLBACK_ENTRY_REASONS,
|
|
normalize_review_entry_reason,
|
|
)
|
|
|
|
_LEGACY_JOURNAL_ENTRY_REASONS: Tuple[str, ...] = (
|
|
*TRADE_STYLE_FALLBACK_ENTRY_REASONS,
|
|
*STRATEGY_ENTRY_REASON_OPTIONS,
|
|
)
|
|
|
|
|
|
def normalize_journal_entry_reason(
|
|
raw: Optional[str],
|
|
allowed: Sequence[str],
|
|
*,
|
|
allow_legacy: bool = False,
|
|
) -> str:
|
|
s = normalize_review_entry_reason(raw, allowed)
|
|
if s:
|
|
return s
|
|
if not allow_legacy:
|
|
return ""
|
|
legacy = (raw or "").strip()
|
|
if legacy in _LEGACY_JOURNAL_ENTRY_REASONS:
|
|
return legacy
|
|
return ""
|
|
|
|
|
|
def journal_entry_reason_valid(raw: Optional[str], allowed: Sequence[str]) -> bool:
|
|
return bool(normalize_journal_entry_reason(raw, allowed, allow_legacy=False))
|
|
|
|
|
|
def journal_order_type_valid(raw: Optional[str]) -> bool:
|
|
return bool(normalize_journal_order_type(raw))
|
|
|
|
|
|
def normalize_journal_direction(raw: Optional[str]) -> str:
|
|
s = (raw or "").strip().lower()
|
|
if s in ("long", "buy", "多", "做多"):
|
|
return "long"
|
|
if s in ("short", "sell", "空", "做空"):
|
|
return "short"
|
|
# 兼容旧隐藏字段 direction_hint
|
|
return ""
|