refactor(data): restructure TimeSeriesTickerData to use series list and add helper methods
This commit is contained in:
parent
b060d988e7
commit
aeeb639fe2
@ -1,4 +1,4 @@
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass, field
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
@ -11,15 +11,46 @@ class TickerData:
|
|||||||
low: float
|
low: float
|
||||||
high: float
|
high: float
|
||||||
avg: float
|
avg: float
|
||||||
volume: float
|
volume: int
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class TimeSeriesTickerData:
|
class TimeSeriesTickerData:
|
||||||
ticker: str
|
ticker: str
|
||||||
target_date: datetime
|
series: List[TickerData] = field(default_factory=list)
|
||||||
current_day_data: TickerData
|
|
||||||
past_30d_data: List[TickerData]
|
@staticmethod
|
||||||
|
def build_time_series_ticker_data(
|
||||||
|
ticker: str, all_data: List[TickerData]
|
||||||
|
):
|
||||||
|
ordered = sorted({d.date: d for d in all_data}.values(), key=lambda d: d.date)
|
||||||
|
|
||||||
|
return TimeSeriesTickerData(
|
||||||
|
ticker=ticker,
|
||||||
|
series=ordered,
|
||||||
|
)
|
||||||
|
|
||||||
|
def get_by_date(self, dt: datetime) -> TickerData | None:
|
||||||
|
for d in self.series:
|
||||||
|
if d.date == dt:
|
||||||
|
return d
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
def get_latest(self) -> TickerData | None:
|
||||||
|
if not self.series:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return self.series[-1]
|
||||||
|
|
||||||
|
def get_range(self, start_date: datetime, end_date: datetime) -> List[TickerData]:
|
||||||
|
return [d for d in self.series if start_date <= d.date <= end_date]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def target_date_data(self) -> TickerData | None:
|
||||||
|
"""Return the most recent TickerData (by convention, the target date tick)."""
|
||||||
|
return self.get_latest()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
|
Loading…
x
Reference in New Issue
Block a user