Skip to content

Commit 70188fc

Browse files
Fix dataclass field ordering in event_driven.py and format code with ruff
1 parent c7bd4bc commit 70188fc

22 files changed

Lines changed: 72 additions & 83 deletions

File tree

meridianalgo/advanced_risk.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -677,7 +677,7 @@ def extreme_value_analysis(
677677

678678
# Calculate extreme quantiles
679679
extreme_var = threshold - (scale_param / shape_param) * (
680-
((len(returns) / len(excesses) * (1 - 0.01)) ** (-shape_param) - 1)
680+
(len(returns) / len(excesses) * (1 - 0.01)) ** (-shape_param) - 1
681681
)
682682

683683
else: # GEV method

meridianalgo/api.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,6 @@ def get_market_data(
310310
return api.get_market_data(symbols, start_date, end_date)
311311

312312

313-
314313
def optimize_portfolio(
315314
returns: pd.DataFrame, method: str = "sharpe", **kwargs
316315
) -> Dict[str, float]:

meridianalgo/backtesting/event_driven.py

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,12 @@ def __lt__(self, other):
4545
class MarketDataEvent(Event):
4646
"""Market data event."""
4747

48-
symbol: str
49-
open_price: float
50-
high_price: float
51-
low_price: float
52-
close_price: float
53-
volume: int
48+
symbol: str = ""
49+
open_price: float = 0.0
50+
high_price: float = 0.0
51+
low_price: float = 0.0
52+
close_price: float = 0.0
53+
volume: int = 0
5454
bid_price: Optional[float] = None
5555
ask_price: Optional[float] = None
5656

@@ -74,9 +74,9 @@ def __post_init__(self):
7474
class SignalEvent(Event):
7575
"""Trading signal event."""
7676

77-
symbol: str
78-
signal_type: str # 'BUY', 'SELL', 'HOLD'
79-
strength: float # Signal strength (0-1)
77+
symbol: str = ""
78+
signal_type: str = "" # 'BUY', 'SELL', 'HOLD'
79+
strength: float = 0.0 # Signal strength (0-1)
8080
metadata: Dict[str, Any] = field(default_factory=dict)
8181

8282
def __post_init__(self):
@@ -136,7 +136,7 @@ class Order:
136136
class OrderEvent(Event):
137137
"""Order event."""
138138

139-
order: Order
139+
order: Order = None
140140

141141
def __post_init__(self):
142142
self.event_type = EventType.ORDER
@@ -171,7 +171,7 @@ class Fill:
171171
class FillEvent(Event):
172172
"""Fill event."""
173173

174-
fill: Fill
174+
fill: Fill = None
175175

176176
def __post_init__(self):
177177
self.event_type = EventType.FILL
@@ -198,7 +198,6 @@ def __init__(
198198
latency_model: str = "fixed",
199199
base_latency: float = 0.001,
200200
): # 1ms
201-
202201
self.spread_model = spread_model
203202
self.base_spread = base_spread
204203
self.impact_model = impact_model
@@ -694,7 +693,6 @@ def __init__(
694693
portfolio: Portfolio,
695694
market_simulator: MarketSimulator = None,
696695
):
697-
698696
self.data_handler = data_handler
699697
self.strategy = strategy
700698
self.portfolio = portfolio

meridianalgo/computing/distributed.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,6 @@ def __init__(
297297
redis_db: int = 0,
298298
default_ttl: int = 3600,
299299
):
300-
301300
self.redis_host = redis_host
302301
self.redis_port = redis_port
303302
self.redis_db = redis_db

meridianalgo/data/processing.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,6 @@ def _check_ohlc_consistency(self, data: pd.DataFrame) -> pd.DataFrame:
160160
col in data.columns.get_level_values(0)
161161
for col in ["Open", "High", "Low", "Close"]
162162
):
163-
164163
high = data[("High", symbol)]
165164
low = data[("Low", symbol)]
166165
data[("Open", symbol)]

meridianalgo/diversification.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -437,12 +437,8 @@ def calculate_alternative_portfolio_allocation(
437437
Portfolio allocation results
438438
"""
439439
# Calculate risk-adjusted returns
440-
(traditional_returns.mean() * 252) / (
441-
traditional_returns.std() * np.sqrt(252)
442-
)
443-
(alternative_returns.mean() * 252) / (
444-
alternative_returns.std() * np.sqrt(252)
445-
)
440+
(traditional_returns.mean() * 252) / (traditional_returns.std() * np.sqrt(252))
441+
(alternative_returns.mean() * 252) / (alternative_returns.std() * np.sqrt(252))
446442

447443
# Optimize allocation (simplified)
448444
n_alternatives = len(alternative_returns.columns)

meridianalgo/fixed_income/options.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -495,9 +495,9 @@ class OptionPortfolio:
495495
"""Option portfolio analytics."""
496496

497497
def __init__(self):
498-
self.positions: List[Tuple[Option, float, str]] = (
499-
[]
500-
) # (option, quantity, model)
498+
self.positions: List[
499+
Tuple[Option, float, str]
500+
] = [] # (option, quantity, model)
501501

502502
def add_position(
503503
self, option: Option, quantity: float, model: str = "black_scholes"
@@ -865,9 +865,9 @@ def price_rainbow_option(
865865
for _ in range(n_steps):
866866
# Generate correlated random numbers
867867
z1 = np.random.normal(0, 1)
868-
z2 = correlation * z1 + np.sqrt(
869-
1 - correlation**2
870-
) * np.random.normal(0, 1)
868+
z2 = correlation * z1 + np.sqrt(1 - correlation**2) * np.random.normal(
869+
0, 1
870+
)
871871

872872
dW1 = z1 * np.sqrt(dt)
873873
dW2 = z2 * np.sqrt(dt)
@@ -964,9 +964,9 @@ class VolatilitySurface:
964964
"""Implied volatility surface construction and analysis."""
965965

966966
def __init__(self):
967-
self.data_points: List[Tuple[float, float, float, float]] = (
968-
[]
969-
) # (strike, expiry, price, vol)
967+
self.data_points: List[
968+
Tuple[float, float, float, float]
969+
] = [] # (strike, expiry, price, vol)
970970
self.surface = None
971971

972972
def add_market_data(

meridianalgo/machine_learning/deployment.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -708,7 +708,7 @@ def check_retraining_triggers(self, model_name: str) -> bool:
708708
try:
709709
active_version, _ = self.registry.get_active_model(model_name)
710710
performance = self.monitor.get_model_performance(
711-
active_version, hours_back=24
711+
active_version, hours_back=24
712712
)
713713
except Exception:
714714
return False

meridianalgo/machine_learning/feature_engineering.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,7 @@ def generate_features(self, data: pd.DataFrame, **kwargs) -> pd.DataFrame:
8989
data["High"].values
9090
data["Low"].values
9191
close = data["Close"].values
92-
(
93-
data["Volume"].values if "Volume" in data.columns else np.ones_like(close)
94-
)
92+
(data["Volume"].values if "Volume" in data.columns else np.ones_like(close))
9593
data["Open"].values if "Open" in data.columns else close
9694

9795
# Moving Averages

meridianalgo/machine_learning/models.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,9 @@
2323
warnings.warn("PyTorch not available. Deep learning models will be limited.")
2424

2525
try:
26-
from sklearn.ensemble import (GradientBoostingRegressor,
27-
RandomForestRegressor)
26+
from sklearn.ensemble import GradientBoostingRegressor, RandomForestRegressor
2827
from sklearn.linear_model import ElasticNet, Lasso, LinearRegression, Ridge
29-
from sklearn.metrics import (mean_absolute_error, mean_squared_error,
30-
r2_score)
28+
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
3129
from sklearn.preprocessing import StandardScaler
3230
from sklearn.svm import SVR
3331

@@ -656,7 +654,7 @@ def fit(self, X: np.ndarray, y: np.ndarray, **kwargs) -> "EnsembleModel":
656654
"""Fit all models in the ensemble."""
657655

658656
for i, model in enumerate(self.models):
659-
logger.info(f"Training model {i+1}/{len(self.models)}: {model.name}")
657+
logger.info(f"Training model {i + 1}/{len(self.models)}: {model.name}")
660658
model.fit(X, y, **kwargs)
661659

662660
self.is_fitted = True

0 commit comments

Comments
 (0)