progress
This commit is contained in:
parent
9d57d8b255
commit
73b7fa1aaf
@ -49,7 +49,7 @@ def run_all_pairs(config: Dict, datafile: str, price_column: str, bt_result: Bac
|
||||
pairs_trades = []
|
||||
strategy = StaticFitStrategy()
|
||||
for pair in _create_pairs(config):
|
||||
single_pair_trades = strategy.run_pair(pair=pair, bt_result=bt_result)
|
||||
single_pair_trades = strategy.run_pair(pair=pair, config=CONFIG, bt_result=bt_result)
|
||||
if single_pair_trades is not None and len(single_pair_trades) > 0:
|
||||
pairs_trades.append(single_pair_trades)
|
||||
# Check if result_list has any data before concatenating
|
||||
|
||||
@ -5,22 +5,10 @@ from typing import Dict, Optional
|
||||
|
||||
import pandas as pd
|
||||
|
||||
# ============= statsmodels ===================
|
||||
|
||||
from backtest_configs import CRYPTO_CONFIG
|
||||
from tools.trading_pair import TradingPair
|
||||
from results import BacktestResult
|
||||
|
||||
NanoPerMin = 1e9
|
||||
UNSET_FLOAT: float = sys.float_info.max
|
||||
UNSET_INT: int = sys.maxsize
|
||||
|
||||
|
||||
CONFIG = CRYPTO_CONFIG
|
||||
# CONFIG = EQT_CONFIG
|
||||
|
||||
|
||||
|
||||
|
||||
class PairsTradingStrategy(ABC):
|
||||
TRADES_COLUMNS = [
|
||||
@ -38,8 +26,8 @@ class PairsTradingStrategy(ABC):
|
||||
|
||||
class StaticFitStrategy(PairsTradingStrategy):
|
||||
|
||||
def run_pair(self, pair: TradingPair, bt_result: BacktestResult) -> Optional[pd.DataFrame]: # abstractmethod
|
||||
pair.get_datasets(training_minutes=CONFIG["training_minutes"])
|
||||
def run_pair(self, config: Dict, pair: TradingPair, bt_result: BacktestResult) -> Optional[pd.DataFrame]: # abstractmethod
|
||||
pair.get_datasets(training_minutes=config["training_minutes"])
|
||||
try:
|
||||
is_cointegrated = pair.train_pair()
|
||||
if not is_cointegrated:
|
||||
@ -55,7 +43,7 @@ class StaticFitStrategy(PairsTradingStrategy):
|
||||
print(f"{pair}: Prediction failed: {str(e)}")
|
||||
return None
|
||||
|
||||
pair_trades = self.create_trading_signals(pair=pair, config=CONFIG, result=bt_result)
|
||||
pair_trades = self.create_trading_signals(pair=pair, config=config, result=bt_result)
|
||||
|
||||
return pair_trades
|
||||
|
||||
@ -211,3 +199,42 @@ class StaticFitStrategy(PairsTradingStrategy):
|
||||
columns=self.TRADES_COLUMNS,
|
||||
)
|
||||
|
||||
class SlidingFitStrategy(PairsTradingStrategy):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.curr_training_start_idx_ = 0
|
||||
|
||||
def run_pair(self, config: Dict, pair: TradingPair, bt_result: BacktestResult) -> Optional[pd.DataFrame]:
|
||||
pair.user_data_['is_position_open'] = False
|
||||
training_minutes = config["training_minutes"]
|
||||
while True:
|
||||
pair.get_datasets(
|
||||
training_minutes=training_minutes,
|
||||
training_start_index=self.curr_training_start_idx_,
|
||||
testing_size=1
|
||||
)
|
||||
|
||||
if len(pair.training_df_) < training_minutes:
|
||||
print(f"{pair}: Not enough training data. Completing the job.")
|
||||
break
|
||||
|
||||
try:
|
||||
is_cointegrated = pair.train_pair()
|
||||
if not is_cointegrated:
|
||||
print(f"{pair} IS NOT COINTEGRATED")
|
||||
return None
|
||||
except Exception as e:
|
||||
print(f"{pair}: Training failed: {str(e)}")
|
||||
return None
|
||||
|
||||
try:
|
||||
pair.predict()
|
||||
except Exception as e:
|
||||
print(f"{pair}: Prediction failed: {str(e)}")
|
||||
return None
|
||||
|
||||
|
||||
pair_trades = self.create_trading_signals(pair=pair, config=config, result=bt_result)
|
||||
|
||||
return pair_trades
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user