Compare commits
2 Commits
b060d988e7
...
f08254ec6a
Author | SHA1 | Date | |
---|---|---|---|
|
f08254ec6a | ||
|
aeeb639fe2 |
@ -1,33 +1,8 @@
|
||||
from datetime import datetime, timedelta
|
||||
from .taapi import TaapiClient
|
||||
from typing import List, Dict
|
||||
from .data import TickerData
|
||||
import yfinance as yf
|
||||
import pandas as pd
|
||||
from dataclasses import dataclass
|
||||
|
||||
|
||||
@dataclass
|
||||
class TickerData:
|
||||
name: str
|
||||
date: datetime
|
||||
open: float
|
||||
close: float
|
||||
low: float
|
||||
high: float
|
||||
avg: float
|
||||
volume: int
|
||||
|
||||
|
||||
@dataclass
|
||||
class TimeSeriesFeatures:
|
||||
"""Holds time-series data for a ticker with multiple lookback windows"""
|
||||
|
||||
ticker: str
|
||||
target_date: datetime
|
||||
current_day: TickerData
|
||||
vix_current: TickerData
|
||||
|
||||
past_30d: List[TickerData] # Previous 30 trading days
|
||||
|
||||
|
||||
class Client:
|
||||
@ -86,7 +61,6 @@ class Client:
|
||||
avg = (high + low) / 2.0
|
||||
|
||||
return TickerData(
|
||||
name=ticker,
|
||||
date=date,
|
||||
open=round(open_price, 2),
|
||||
high=round(high, 2),
|
||||
|
@ -1,4 +1,4 @@
|
||||
from dataclasses import dataclass
|
||||
from dataclasses import dataclass, field
|
||||
from datetime import datetime
|
||||
from typing import List
|
||||
|
||||
@ -11,15 +11,46 @@ class TickerData:
|
||||
low: float
|
||||
high: float
|
||||
avg: float
|
||||
volume: float
|
||||
volume: int
|
||||
|
||||
|
||||
@dataclass
|
||||
class TimeSeriesTickerData:
|
||||
ticker: str
|
||||
target_date: datetime
|
||||
current_day_data: TickerData
|
||||
past_30d_data: List[TickerData]
|
||||
series: List[TickerData] = field(default_factory=list)
|
||||
|
||||
@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
|
||||
|
Loading…
x
Reference in New Issue
Block a user