fixed OLS model
This commit is contained in:
@@ -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())
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user