This commit is contained in:
2025-05-29 21:11:37 -04:00
parent 73b7fa1aaf
commit da6ccf2bfb
4 changed files with 297 additions and 139 deletions
+9 -4
View File
@@ -1,5 +1,5 @@
from typing import List, Optional
from typing import Any, Dict, List, Optional
import pandas as pd
from statsmodels.tsa.vector_ar.vecm import VECM
@@ -16,6 +16,8 @@ class TradingPair:
testing_df_: Optional[pd.DataFrame]
vecm_fit_: Optional[VECM]
user_data_: Dict[str, Any]
def __init__(self, market_data: pd.DataFrame, symbol_a: str, symbol_b: str, price_column: str):
self.symbol_a_ = symbol_a
@@ -23,12 +25,13 @@ class TradingPair:
self.price_column_ = price_column
self.market_data_ = self._transform_dataframe(market_data)[["tstamp"] + self.colnames()]
self.training_mu_ = None
self.training_std_ = None
self.training_df_ = None
self.testing_df_ = None
self.vecm_fit_ = None
self.user_data_ = {}
def _transform_dataframe(self, df: pd.DataFrame):
# Select only the columns we need
@@ -57,7 +60,9 @@ class TradingPair:
return result_df
def get_datasets(self, training_minutes: int, training_start_index: int = 0, testing_size: Optional[int] = None) -> None:
self.training_df_ = self.market_data_.iloc[training_start_index:training_minutes - 1, :].copy()
testing_start_index = training_start_index + training_minutes
self.training_df_ = self.market_data_.iloc[training_start_index:testing_start_index, :].copy()
self.training_df_ = self.training_df_.dropna().reset_index(drop=True)
testing_start_index = training_start_index + training_minutes
@@ -101,7 +106,7 @@ class TradingPair:
return False
pass
print('*' * 80 + '\n' + f"**************** {self} IS COINTEGRATED ****************\n" + '*' * 80)
# print('*' * 80 + '\n' + f"**************** {self} IS COINTEGRATED ****************\n" + '*' * 80)
self.fit_VECM()
diseq_series = self.training_df_[self.colnames()] @ self.vecm_fit_.beta
self.training_mu_ = diseq_series.mean().iloc[0]