Update project
This commit is contained in:
265
backend/app/api/analysis_schemas.py
Normal file
265
backend/app/api/analysis_schemas.py
Normal file
@ -0,0 +1,265 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Literal
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
SecurityType = Literal["stock", "index", "etf", "unknown"]
|
||||
CycleName = Literal["week", "day", "15m", "30m", "60m", "90m", "120m"]
|
||||
ResonanceLevel = Literal["normal", "medium", "strong", "very_strong"]
|
||||
ResonanceType = Literal["time", "space", "spacetime", "trend", "abc"]
|
||||
SignalBias = Literal["bullish", "bearish", "neutral"]
|
||||
ToolMode = Literal["auto", "manual_ready"]
|
||||
ToolType = Literal["fibonacci_ruler", "extension_ruler", "wave_ruler", "trend_line", "horizontal_line", "range_measure"]
|
||||
MarkerKind = Literal["support", "resistance", "current", "trigger", "target"]
|
||||
|
||||
|
||||
class SymbolInfo(BaseModel):
|
||||
query: str
|
||||
code: str
|
||||
name: str
|
||||
market: str
|
||||
security_type: SecurityType
|
||||
secid: str
|
||||
|
||||
|
||||
class SnapshotInfo(BaseModel):
|
||||
latest_price: float | None = None
|
||||
change_percent: float | None = None
|
||||
updated_at: str | None = None
|
||||
source_name: str
|
||||
|
||||
|
||||
class MaValues(BaseModel):
|
||||
ma5: float | None = None
|
||||
ma13: float | None = None
|
||||
ma21: float | None = None
|
||||
ma34: float | None = None
|
||||
ma55: float | None = None
|
||||
ma89: float | None = None
|
||||
|
||||
|
||||
class MacdValues(BaseModel):
|
||||
dif: float | None = None
|
||||
dea: float | None = None
|
||||
histogram: float | None = None
|
||||
|
||||
|
||||
class RsiValues(BaseModel):
|
||||
rsi5: float | None = None
|
||||
rsi13: float | None = None
|
||||
rsi21: float | None = None
|
||||
|
||||
|
||||
class IndicatorSnapshot(BaseModel):
|
||||
macd: MacdValues
|
||||
rsi: RsiValues
|
||||
signal_summary: str
|
||||
|
||||
|
||||
class CycleSummary(BaseModel):
|
||||
cycle: CycleName
|
||||
close: float | None = None
|
||||
trend_label: str
|
||||
ma_status: str
|
||||
volume_status: str
|
||||
ma_values: MaValues
|
||||
indicator_snapshot: IndicatorSnapshot
|
||||
|
||||
|
||||
class AbcPoint(BaseModel):
|
||||
label: Literal["A", "B", "C"]
|
||||
timestamp: str
|
||||
price: float
|
||||
k_index: int
|
||||
|
||||
|
||||
class AbcStructure(BaseModel):
|
||||
cycle: CycleName
|
||||
direction: Literal["bullish", "bearish", "neutral"]
|
||||
status: str
|
||||
a_point: AbcPoint | None = None
|
||||
b_point: AbcPoint | None = None
|
||||
c_point: AbcPoint | None = None
|
||||
reasoning: list[str]
|
||||
|
||||
|
||||
class FibonacciLevel(BaseModel):
|
||||
ratio: float
|
||||
label: str
|
||||
value: float
|
||||
distance_to_price: float | None = None
|
||||
|
||||
|
||||
class FibonacciSpace(BaseModel):
|
||||
cycle: CycleName
|
||||
anchor_start_label: str
|
||||
anchor_start_time: str
|
||||
anchor_start_price: float
|
||||
anchor_end_label: str
|
||||
anchor_end_time: str
|
||||
anchor_end_price: float
|
||||
levels: list[FibonacciLevel]
|
||||
current_position_summary: str
|
||||
|
||||
|
||||
class FibonacciTime(BaseModel):
|
||||
cycle: Literal["15m", "30m", "60m", "90m", "120m"]
|
||||
start_point_time: str
|
||||
start_point_label: str
|
||||
current_count: int
|
||||
current_hit: list[int]
|
||||
next_key_counts: list[int]
|
||||
next_window_summary: str
|
||||
|
||||
|
||||
class TimeSequenceTrack(BaseModel):
|
||||
track_type: Literal["major", "minor"]
|
||||
cycle: Literal["15m", "30m", "60m", "90m", "120m"]
|
||||
start_point_time: str
|
||||
start_point_label: str
|
||||
current_count: int
|
||||
current_hit: list[int]
|
||||
next_key_counts: list[int]
|
||||
next_window_summary: str
|
||||
|
||||
|
||||
class TimeSequenceBundle(BaseModel):
|
||||
major: TimeSequenceTrack | None = None
|
||||
minor: TimeSequenceTrack | None = None
|
||||
|
||||
|
||||
class ResonanceItem(BaseModel):
|
||||
level: ResonanceLevel
|
||||
type: ResonanceType
|
||||
cycles: list[str]
|
||||
summary: str
|
||||
bias: SignalBias
|
||||
|
||||
|
||||
class ConclusionSummary(BaseModel):
|
||||
stage: str
|
||||
bias: SignalBias
|
||||
confidence: int
|
||||
headline: str
|
||||
summary: str
|
||||
tags: list[str]
|
||||
|
||||
|
||||
class AlertItem(BaseModel):
|
||||
level: ResonanceLevel
|
||||
trigger_type: str
|
||||
title: str
|
||||
summary: str
|
||||
action: str
|
||||
|
||||
|
||||
class EvidenceItem(BaseModel):
|
||||
title: str
|
||||
detail: str
|
||||
cycles: list[str]
|
||||
score: int
|
||||
|
||||
|
||||
class StrategyScenario(BaseModel):
|
||||
key: Literal["A", "B", "C"]
|
||||
title: str
|
||||
trigger_condition: str
|
||||
system_view: str
|
||||
user_action: str
|
||||
next_watch: str
|
||||
|
||||
|
||||
class MonitoringTask(BaseModel):
|
||||
title: str
|
||||
cadence: str
|
||||
focus: str
|
||||
trigger_condition: str
|
||||
|
||||
|
||||
class ToolPreset(BaseModel):
|
||||
name: str
|
||||
cycle: CycleName
|
||||
tool_type: ToolType
|
||||
mode: ToolMode
|
||||
anchors: list[str]
|
||||
summary: str
|
||||
|
||||
|
||||
class AnalysisReportResponse(BaseModel):
|
||||
symbol: SymbolInfo
|
||||
snapshot: SnapshotInfo
|
||||
cycles: list[CycleSummary]
|
||||
abc_structures: list[AbcStructure]
|
||||
fibonacci_space: list[FibonacciSpace]
|
||||
fibonacci_time: list[FibonacciTime]
|
||||
resonance: list[ResonanceItem]
|
||||
conclusion_summary: ConclusionSummary
|
||||
alerts: list[AlertItem]
|
||||
evidence_chain: list[EvidenceItem]
|
||||
strategy_scenarios: list[StrategyScenario]
|
||||
monitoring_tasks: list[MonitoringTask]
|
||||
tool_presets: list[ToolPreset]
|
||||
tomorrow_strategy: list[str]
|
||||
follow_strategy: list[str]
|
||||
signal_conclusion: list[str]
|
||||
calculation_steps: list[str]
|
||||
|
||||
|
||||
class ChartCandle(BaseModel):
|
||||
timestamp: str
|
||||
open: float
|
||||
close: float
|
||||
high: float
|
||||
low: float
|
||||
volume: float
|
||||
ma5: float | None = None
|
||||
ma13: float | None = None
|
||||
ma21: float | None = None
|
||||
ma34: float | None = None
|
||||
ma55: float | None = None
|
||||
ma89: float | None = None
|
||||
dif: float | None = None
|
||||
dea: float | None = None
|
||||
macd_histogram: float | None = None
|
||||
rsi5: float | None = None
|
||||
rsi13: float | None = None
|
||||
rsi21: float | None = None
|
||||
|
||||
|
||||
class ChartTimeMarker(BaseModel):
|
||||
track_type: Literal["major", "minor"] = "major"
|
||||
target_count: int
|
||||
current_count: int
|
||||
candle_index: int | None = None
|
||||
reached: bool
|
||||
label: str
|
||||
|
||||
|
||||
class ChartPriceMarker(BaseModel):
|
||||
label: str
|
||||
value: float
|
||||
kind: MarkerKind
|
||||
emphasis: ResonanceLevel
|
||||
|
||||
|
||||
class ChartToolLayer(BaseModel):
|
||||
name: str
|
||||
tool_type: ToolType
|
||||
mode: ToolMode
|
||||
summary: str
|
||||
|
||||
|
||||
class AnalysisChartResponse(BaseModel):
|
||||
symbol: SymbolInfo
|
||||
cycle: CycleName
|
||||
candles: list[ChartCandle]
|
||||
abc_structure: AbcStructure
|
||||
fibonacci_space: FibonacciSpace
|
||||
fibonacci_time: FibonacciTime | None = None
|
||||
time_sequences: TimeSequenceBundle | None = None
|
||||
time_markers: list[ChartTimeMarker]
|
||||
price_markers: list[ChartPriceMarker]
|
||||
tool_layers: list[ChartToolLayer]
|
||||
signal_tags: list[str]
|
||||
Reference in New Issue
Block a user