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
+3 -5
View File
@@ -1,14 +1,12 @@
from __future__ import annotations
from dataclasses import dataclass
from functools import partial
from typing import Any, Dict, List, Optional
import pandas as pd
from cvttpy_base.settings.cvtt_types import JsonDictT
from cvttpy_base.tools.base import NamedObject
from cvttpy_base.tools.logger import Log
from cvttpy_tools.settings.cvtt_types import JsonDictT
from cvttpy_tools.tools.base import NamedObject
from cvttpy_tools.tools.logger import Log
from pt_strategy.live.ti_sender import TradingInstructionsSender
from pt_strategy.model_data_policy import ModelDataPolicy
from pt_strategy.pt_market_data import RealTimeMarketData
+9 -14
View File
@@ -1,21 +1,16 @@
from __future__ import annotations
from functools import partial
from typing import Any, Dict, List, Optional
from typing import Dict, List
import pandas as pd
from cvttpy_base.tools.app import App
from cvttpy_base.tools.config import Config
from cvttpy_base.settings.cvtt_types import JsonDictT
from cvttpy_base.tools.base import NamedObject
from cvttpy_base.tools.logger import Log
from cvtt_client.mkt_data import (
CvttPricerWebSockClient,
CvttPricesSubscription,
MessageTypeT,
SubscriptionIdT,
)
from cvtt_client.mkt_data import (CvttPricerWebSockClient,
CvttPricesSubscription, MessageTypeT,
SubscriptionIdT)
from cvttpy_tools.settings.cvtt_types import JsonDictT
from cvttpy_tools.tools.app import App
from cvttpy_tools.tools.base import NamedObject
from cvttpy_tools.tools.config import Config
from cvttpy_tools.tools.logger import Log
from pt_strategy.live.live_strategy import PtLiveStrategy
from pt_strategy.trading_pair import TradingPair
+10 -9
View File
@@ -1,14 +1,15 @@
from enum import Enum
from typing import Dict, Any, Tuple
import time
from enum import Enum
from typing import Tuple
# import aiohttp
from cvttpy_base.tools.app import App
from cvttpy_base.tools.base import NamedObject
from cvttpy_base.tools.config import Config
from cvttpy_base.tools.logger import Log
from cvttpy_base.tools.web.rest_client import REST_RequestProcessor
from cvttpy_base.tools.timeutils import NanoPerSec
from cvttpy_base.tools.timer import Timer
from cvttpy_tools.tools.app import App
from cvttpy_tools.tools.base import NamedObject
from cvttpy_tools.tools.config import Config
from cvttpy_tools.tools.logger import Log
from cvttpy_tools.tools.timer import Timer
from cvttpy_tools.tools.timeutils import NanoPerSec
from cvttpy_tools.tools.web.rest_client import REST_RequestProcessor
class TradingInstructionsSender(NamedObject):
+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())
+3 -4
View File
@@ -1,12 +1,11 @@
from __future__ import annotations
from typing import Any, Dict, List, Optional
import pandas as pd
from cvttpy_base.settings.cvtt_types import JsonDictT
from cvttpy_tools.settings.cvtt_types import JsonDictT
from tools.data_loader import load_market_data
from pt_strategy.trading_pair import TradingPair
class PtMarketData():
config_: Dict[str, Any]