fixed OLS model

This commit is contained in:
Oleg Sheynin
2025-08-21 00:46:28 +00:00
parent 0423a7d34f
commit 7d137a1a0e
9 changed files with 50 additions and 64 deletions
+7 -5
View File
@@ -11,7 +11,7 @@ from pt_strategy.trading_pair import TradingPair
class OLSModel(PairsTradingModel):
zscore_model_: Optional[sm.regression.linear_model.RegressionResultsWrapper]
model_: Optional[sm.regression.linear_model.RegressionResultsWrapper]
pair_predict_result_: Optional[pd.DataFrame]
zscore_df_: Optional[pd.DataFrame]
@@ -42,11 +42,13 @@ class OLSModel(PairsTradingModel):
)
X = sm.add_constant(symbol_b_px_series)
self.zscore_model_ = sm.OLS(symbol_a_px_series, X).fit()
assert self.zscore_model_ is not None
hedge_ratio = self.zscore_model_.params.iloc[1]
self.model_ = sm.OLS(symbol_a_px_series, X).fit()
assert self.model_ is not None
spread = symbol_a_px_series - hedge_ratio * symbol_b_px_series
# alternate way would be to use models residuals (will give identical results)
# alpha, beta = self.model_.params
# spread = symbol_a_px_series - (alpha + beta * symbol_b_px_series)
spread = self.model_.resid
return pd.DataFrame((spread - spread.mean()) / spread.std())