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

View File

@ -3,7 +3,6 @@
"ms-python.python", "ms-python.python",
"ms-python.pylance", "ms-python.pylance",
"ms-python.black-formatter", "ms-python.black-formatter",
"ms-python.flake8",
"ms-python.mypy-type-checker", "ms-python.mypy-type-checker",
"ms-python.isort" "ms-python.isort"
] ]

View File

@ -1,13 +1,8 @@
{ {
"folders": [ "folders": [
{ {
"path": ".." "path": ".."
}, }
{ ],
"path": "../../cvttpy_base" "settings": {}
}
],
"settings": {
"workbench.colorTheme": "Dracula Theme"
}
} }

View File

@ -3,20 +3,21 @@ from __future__ import annotations
from functools import partial from functools import partial
from typing import Dict, List from typing import Dict, List
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 CvttAppConfig
from cvttpy_tools.tools.logger import Log
from pt_strategy.live.live_strategy import PtLiveStrategy
from pt_strategy.live.pricer_md_client import PtMktDataClient
from pt_strategy.live.ti_sender import TradingInstructionsSender
# import sys # import sys
# print("PYTHONPATH directories:") # print("PYTHONPATH directories:")
# for path in sys.path: # for path in sys.path:
# print(path) # print(path)
from cvttpy_base.tools.app import App
from cvttpy_base.tools.base import NamedObject
from cvttpy_base.tools.logger import Log
from cvttpy_base.tools.config import CvttAppConfig
from cvttpy_base.settings.cvtt_types import JsonDictT
from pt_strategy.live.live_strategy import PtLiveStrategy
from pt_strategy.live.pricer_md_client import PtMktDataClient
from pt_strategy.live.ti_sender import TradingInstructionsSender
# from cvtt_client.mkt_data import (CvttPricerWebSockClient, # from cvtt_client.mkt_data import (CvttPricerWebSockClient,
# CvttPricesSubscription, MessageTypeT, # CvttPricesSubscription, MessageTypeT,

View File

@ -1,21 +1,17 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import argparse
from ast import Sub
import asyncio import asyncio
from functools import partial
import json import json
import logging
import uuid import uuid
from dataclasses import dataclass from dataclasses import dataclass
from typing import Callable, Coroutine, Dict, List, Optional from functools import partial
from typing import Callable, Coroutine, Dict, Optional
import websockets import websockets
from cvttpy_tools.settings.cvtt_types import JsonDictT
from cvttpy_tools.tools.logger import Log
from websockets.asyncio.client import ClientConnection from websockets.asyncio.client import ClientConnection
from cvttpy_base.settings.cvtt_types import JsonDictT
from cvttpy_base.tools.logger import Log
MessageTypeT = str MessageTypeT = str
SubscriptionIdT = str SubscriptionIdT = str
MessageT = Dict MessageT = Dict

View File

@ -1,14 +1,12 @@
from __future__ import annotations from __future__ import annotations
from dataclasses import dataclass from dataclasses import dataclass
from functools import partial
from typing import Any, Dict, List, Optional from typing import Any, Dict, List, Optional
import pandas as pd import pandas as pd
from cvttpy_base.settings.cvtt_types import JsonDictT from cvttpy_tools.settings.cvtt_types import JsonDictT
from cvttpy_base.tools.base import NamedObject from cvttpy_tools.tools.base import NamedObject
from cvttpy_base.tools.logger import Log from cvttpy_tools.tools.logger import Log
from pt_strategy.live.ti_sender import TradingInstructionsSender from pt_strategy.live.ti_sender import TradingInstructionsSender
from pt_strategy.model_data_policy import ModelDataPolicy from pt_strategy.model_data_policy import ModelDataPolicy
from pt_strategy.pt_market_data import RealTimeMarketData from pt_strategy.pt_market_data import RealTimeMarketData

View File

@ -1,21 +1,16 @@
from __future__ import annotations from __future__ import annotations
from functools import partial from functools import partial
from typing import Any, Dict, List, Optional from typing import Dict, List
import pandas as pd from cvtt_client.mkt_data import (CvttPricerWebSockClient,
from cvttpy_base.tools.app import App CvttPricesSubscription, MessageTypeT,
from cvttpy_base.tools.config import Config SubscriptionIdT)
from cvttpy_base.settings.cvtt_types import JsonDictT from cvttpy_tools.settings.cvtt_types import JsonDictT
from cvttpy_base.tools.base import NamedObject from cvttpy_tools.tools.app import App
from cvttpy_base.tools.logger import Log from cvttpy_tools.tools.base import NamedObject
from cvttpy_tools.tools.config import Config
from cvtt_client.mkt_data import ( from cvttpy_tools.tools.logger import Log
CvttPricerWebSockClient,
CvttPricesSubscription,
MessageTypeT,
SubscriptionIdT,
)
from pt_strategy.live.live_strategy import PtLiveStrategy from pt_strategy.live.live_strategy import PtLiveStrategy
from pt_strategy.trading_pair import TradingPair from pt_strategy.trading_pair import TradingPair

View File

@ -1,14 +1,15 @@
from enum import Enum
from typing import Dict, Any, Tuple
import time import time
from enum import Enum
from typing import Tuple
# import aiohttp # import aiohttp
from cvttpy_base.tools.app import App from cvttpy_tools.tools.app import App
from cvttpy_base.tools.base import NamedObject from cvttpy_tools.tools.base import NamedObject
from cvttpy_base.tools.config import Config from cvttpy_tools.tools.config import Config
from cvttpy_base.tools.logger import Log from cvttpy_tools.tools.logger import Log
from cvttpy_base.tools.web.rest_client import REST_RequestProcessor from cvttpy_tools.tools.timer import Timer
from cvttpy_base.tools.timeutils import NanoPerSec from cvttpy_tools.tools.timeutils import NanoPerSec
from cvttpy_base.tools.timer import Timer from cvttpy_tools.tools.web.rest_client import REST_RequestProcessor
class TradingInstructionsSender(NamedObject): class TradingInstructionsSender(NamedObject):

View File

@ -11,7 +11,7 @@ from pt_strategy.trading_pair import TradingPair
class OLSModel(PairsTradingModel): class OLSModel(PairsTradingModel):
zscore_model_: Optional[sm.regression.linear_model.RegressionResultsWrapper] model_: Optional[sm.regression.linear_model.RegressionResultsWrapper]
pair_predict_result_: Optional[pd.DataFrame] pair_predict_result_: Optional[pd.DataFrame]
zscore_df_: Optional[pd.DataFrame] zscore_df_: Optional[pd.DataFrame]
@ -42,11 +42,13 @@ class OLSModel(PairsTradingModel):
) )
X = sm.add_constant(symbol_b_px_series) X = sm.add_constant(symbol_b_px_series)
self.zscore_model_ = sm.OLS(symbol_a_px_series, X).fit() self.model_ = sm.OLS(symbol_a_px_series, X).fit()
assert self.zscore_model_ is not None assert self.model_ is not None
hedge_ratio = self.zscore_model_.params.iloc[1]
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()) return pd.DataFrame((spread - spread.mean()) / spread.std())

View File

@ -1,12 +1,11 @@
from __future__ import annotations from __future__ import annotations
from typing import Any, Dict, List, Optional from typing import Any, Dict, List, Optional
import pandas as pd import pandas as pd
from cvttpy_tools.settings.cvtt_types import JsonDictT
from cvttpy_base.settings.cvtt_types import JsonDictT
from tools.data_loader import load_market_data from tools.data_loader import load_market_data
from pt_strategy.trading_pair import TradingPair
class PtMarketData(): class PtMarketData():
config_: Dict[str, Any] config_: Dict[str, Any]