initial cleaning after refactoring
This commit is contained in:
parent
1b6b5e5735
commit
b474752959
44
__DELETE__/configuration/vecm.cfg
Normal file
44
__DELETE__/configuration/vecm.cfg
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"market_data_loading": {
|
||||||
|
"CRYPTO": {
|
||||||
|
"data_directory": "./data/crypto",
|
||||||
|
"db_table_name": "md_1min_bars",
|
||||||
|
"instrument_id_pfx": "PAIR-",
|
||||||
|
},
|
||||||
|
"EQUITY": {
|
||||||
|
"data_directory": "./data/equity",
|
||||||
|
"db_table_name": "md_1min_bars",
|
||||||
|
"instrument_id_pfx": "STOCK-",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
# ====== Funding ======
|
||||||
|
"funding_per_pair": 2000.0,
|
||||||
|
|
||||||
|
# ====== Trading Parameters ======
|
||||||
|
"stat_model_price": "close", # "vwap"
|
||||||
|
"execution_price": {
|
||||||
|
"column": "vwap",
|
||||||
|
"shift": 1,
|
||||||
|
},
|
||||||
|
"dis-equilibrium_open_trshld": 2.0,
|
||||||
|
"dis-equilibrium_close_trshld": 1.0,
|
||||||
|
"training_minutes": 120, # TODO Remove this
|
||||||
|
"training_size": 120,
|
||||||
|
"fit_method_class": "pt_trading.vecm_rolling_fit.VECMRollingFit",
|
||||||
|
|
||||||
|
# ====== Stop Conditions ======
|
||||||
|
"stop_close_conditions": {
|
||||||
|
"profit": 2.0,
|
||||||
|
"loss": -0.5
|
||||||
|
}
|
||||||
|
|
||||||
|
# ====== End of Session Closeout ======
|
||||||
|
"close_outstanding_positions": true,
|
||||||
|
# "close_outstanding_positions": false,
|
||||||
|
"trading_hours": {
|
||||||
|
"timezone": "America/New_York",
|
||||||
|
"begin_session": "7:30:00",
|
||||||
|
"end_session": "18:30:00",
|
||||||
|
}
|
||||||
|
}
|
||||||
43
configuration/ols-exp.cfg
Normal file
43
configuration/ols-exp.cfg
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"market_data_loading": {
|
||||||
|
"CRYPTO": {
|
||||||
|
"data_directory": "./data/crypto",
|
||||||
|
"db_table_name": "md_1min_bars",
|
||||||
|
"instrument_id_pfx": "PAIR-",
|
||||||
|
},
|
||||||
|
"EQUITY": {
|
||||||
|
"data_directory": "./data/equity",
|
||||||
|
"db_table_name": "md_1min_bars",
|
||||||
|
"instrument_id_pfx": "STOCK-",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
# ====== Funding ======
|
||||||
|
"funding_per_pair": 2000.0,
|
||||||
|
# ====== Trading Parameters ======
|
||||||
|
"stat_model_price": "close",
|
||||||
|
"execution_price": {
|
||||||
|
"column": "vwap",
|
||||||
|
"shift": 1,
|
||||||
|
},
|
||||||
|
"dis-equilibrium_open_trshld": 2.0,
|
||||||
|
"dis-equilibrium_close_trshld": 0.5,
|
||||||
|
"training_size": 120,
|
||||||
|
"model_class": "pt_strategy.models.OLSModel",
|
||||||
|
"model_data_policy_class": "pt_strategy.model_data_policy.ExpandingWindowDataPolicy",
|
||||||
|
|
||||||
|
# ====== Stop Conditions ======
|
||||||
|
"stop_close_conditions": {
|
||||||
|
"profit": 2.0,
|
||||||
|
"loss": -0.5
|
||||||
|
}
|
||||||
|
|
||||||
|
# ====== End of Session Closeout ======
|
||||||
|
"close_outstanding_positions": true,
|
||||||
|
# "close_outstanding_positions": false,
|
||||||
|
"trading_hours": {
|
||||||
|
"timezone": "America/New_York",
|
||||||
|
"begin_session": "7:30:00",
|
||||||
|
"end_session": "18:30:00",
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -23,7 +23,7 @@
|
|||||||
"dis-equilibrium_open_trshld": 2.0,
|
"dis-equilibrium_open_trshld": 2.0,
|
||||||
"dis-equilibrium_close_trshld": 0.5,
|
"dis-equilibrium_close_trshld": 0.5,
|
||||||
"training_size": 120,
|
"training_size": 120,
|
||||||
"model_class": "pt_strategy.models.ZScoreOLSModel",
|
"model_class": "pt_strategy.models.OLSModel",
|
||||||
"model_data_policy_class": "pt_strategy.model_data_policy.RollingWindowDataPolicy",
|
"model_data_policy_class": "pt_strategy.model_data_policy.RollingWindowDataPolicy",
|
||||||
|
|
||||||
# ====== Stop Conditions ======
|
# ====== Stop Conditions ======
|
||||||
@ -25,7 +25,7 @@
|
|||||||
"dis-equilibrium_close_trshld": 1.0,
|
"dis-equilibrium_close_trshld": 1.0,
|
||||||
"training_size": 120,
|
"training_size": 120,
|
||||||
"model_class": "pt_strategy.models.VECMModel",
|
"model_class": "pt_strategy.models.VECMModel",
|
||||||
"model_data_policy_class": "pt_strategy.model_data_policy.RollingWindowDataPolicy",
|
"model_data_policy_class": "pt_strategy.model_data_policy.ExpandingWindowDataPolicy",
|
||||||
|
|
||||||
# ====== Stop Conditions ======
|
# ====== Stop Conditions ======
|
||||||
"stop_close_conditions": {
|
"stop_close_conditions": {
|
||||||
@ -23,9 +23,9 @@
|
|||||||
},
|
},
|
||||||
"dis-equilibrium_open_trshld": 2.0,
|
"dis-equilibrium_open_trshld": 2.0,
|
||||||
"dis-equilibrium_close_trshld": 1.0,
|
"dis-equilibrium_close_trshld": 1.0,
|
||||||
"training_minutes": 120, # TODO Remove this
|
|
||||||
"training_size": 120,
|
"training_size": 120,
|
||||||
"fit_method_class": "pt_trading.vecm_rolling_fit.VECMRollingFit",
|
"model_class": "pt_strategy.models.VECMModel",
|
||||||
|
"model_data_policy_class": "pt_strategy.model_data_policy.RollingWindowDataPolicy",
|
||||||
|
|
||||||
# ====== Stop Conditions ======
|
# ====== Stop Conditions ======
|
||||||
"stop_close_conditions": {
|
"stop_close_conditions": {
|
||||||
|
|||||||
@ -14,6 +14,8 @@ class DataParams:
|
|||||||
class ModelDataPolicy(ABC):
|
class ModelDataPolicy(ABC):
|
||||||
config_: Dict[str, Any]
|
config_: Dict[str, Any]
|
||||||
current_data_params_: DataParams
|
current_data_params_: DataParams
|
||||||
|
count_:int
|
||||||
|
|
||||||
|
|
||||||
def __init__(self, config: Dict[str, Any]):
|
def __init__(self, config: Dict[str, Any]):
|
||||||
self.config_ = config
|
self.config_ = config
|
||||||
@ -21,10 +23,12 @@ class ModelDataPolicy(ABC):
|
|||||||
training_size=config.get("training_size", 120),
|
training_size=config.get("training_size", 120),
|
||||||
training_start_index=0,
|
training_start_index=0,
|
||||||
)
|
)
|
||||||
|
self.count_ = 0
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def advance(self) -> DataParams:
|
def advance(self) -> DataParams:
|
||||||
...
|
self.count_ += 1
|
||||||
|
print(self.count_, end='\r')
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def create(config: Dict[str, Any]) -> ModelDataPolicy:
|
def create(config: Dict[str, Any]) -> ModelDataPolicy:
|
||||||
@ -43,9 +47,8 @@ class RollingWindowDataPolicy(ModelDataPolicy):
|
|||||||
self.count_ = 1
|
self.count_ = 1
|
||||||
|
|
||||||
def advance(self) -> DataParams:
|
def advance(self) -> DataParams:
|
||||||
|
super().advance()
|
||||||
self.current_data_params_.training_start_index += 1
|
self.current_data_params_.training_start_index += 1
|
||||||
print(self.count_, end='\r')
|
|
||||||
self.count_ += 1
|
|
||||||
return self.current_data_params_
|
return self.current_data_params_
|
||||||
|
|
||||||
|
|
||||||
@ -54,6 +57,7 @@ class ExpandingWindowDataPolicy(ModelDataPolicy):
|
|||||||
super().__init__(config)
|
super().__init__(config)
|
||||||
|
|
||||||
def advance(self) -> DataParams:
|
def advance(self) -> DataParams:
|
||||||
|
super().advance()
|
||||||
self.current_data_params_.training_size += 1
|
self.current_data_params_.training_size += 1
|
||||||
return self.current_data_params_
|
return self.current_data_params_
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,7 @@ from pt_strategy.pt_model import PairsTradingModel, Prediction
|
|||||||
from pt_strategy.trading_pair import TradingPair
|
from pt_strategy.trading_pair import TradingPair
|
||||||
|
|
||||||
|
|
||||||
class ZScoreOLSModel(PairsTradingModel):
|
class OLSModel(PairsTradingModel):
|
||||||
zscore_model_: Optional[sm.regression.linear_model.RegressionResultsWrapper]
|
zscore_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]
|
||||||
@ -67,10 +67,9 @@ class VECMModel(PairsTradingModel):
|
|||||||
disequilibrium = (predicted_df[pair.colnames()] @ vecm_fit.beta)[0][0]
|
disequilibrium = (predicted_df[pair.colnames()] @ vecm_fit.beta)[0][0]
|
||||||
scaled_disequilibrium = (disequilibrium - self.training_mu_) / self.training_std_
|
scaled_disequilibrium = (disequilibrium - self.training_mu_) / self.training_std_
|
||||||
return Prediction(
|
return Prediction(
|
||||||
tstamp_=pair.market_data_.index[-1],
|
tstamp=pair.market_data_.iloc[-1]["tstamp"],
|
||||||
disequilibrium_=disequilibrium,
|
disequilibrium=disequilibrium,
|
||||||
scaled_disequilibrium_=scaled_disequilibrium,
|
scaled_disequilibrium=scaled_disequilibrium,
|
||||||
pair_=pair,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
def _fit_VECM(self, pair: TradingPair) -> VECMResults: # type: ignore
|
def _fit_VECM(self, pair: TradingPair) -> VECMResults: # type: ignore
|
||||||
|
|||||||
@ -82,6 +82,8 @@ class ResearchMarketData(PtMarketData):
|
|||||||
)
|
)
|
||||||
self.origin_mkt_data_df_ = pd.concat([self.origin_mkt_data_df_, md_df])
|
self.origin_mkt_data_df_ = pd.concat([self.origin_mkt_data_df_, md_df])
|
||||||
|
|
||||||
|
self.origin_mkt_data_df_ = self.origin_mkt_data_df_.sort_values(by="tstamp")
|
||||||
|
self.origin_mkt_data_df_ = self.origin_mkt_data_df_.dropna().reset_index(drop=True)
|
||||||
self._set_market_data()
|
self._set_market_data()
|
||||||
|
|
||||||
def _set_market_data(self, ) -> None:
|
def _set_market_data(self, ) -> None:
|
||||||
|
|||||||
@ -4,7 +4,7 @@ from datetime import date, datetime
|
|||||||
from typing import Any, Dict, List, Optional, Tuple
|
from typing import Any, Dict, List, Optional, Tuple
|
||||||
|
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
from pt_trading.trading_pair import TradingPair
|
from pt_strategy.trading_pair import TradingPair
|
||||||
|
|
||||||
|
|
||||||
# Recommended replacement adapters and converters for Python 3.12+
|
# Recommended replacement adapters and converters for Python 3.12+
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user