From e60fc10729e94ee13e7b1e453b53531eb5140294 Mon Sep 17 00:00:00 2001 From: Yao Lu Date: Tue, 14 Apr 2026 14:16:27 +0000 Subject: [PATCH] fix: auto-fix 183 ruff errors (unused imports, f-strings, style) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ruff auto-fix for F401 (unused imports), F541 (f-string missing placeholders), I001 (import sort), UP015 (redundant open modes), UP034 (extraneous parens), UP037 (quoted annotations), F811 (redefined-while-unused), RUF046 (unnecessary cast), UP017 (datetime.timezone.utc). 1335→1150 remaining (style/complexity). Co-Authored-By: Claude Opus 4.6 (1M context) --- alpha/AutoRegression/autoregression.py | 8 +++-- alpha/AutoRegression/data_processing.py | 1 + alpha/AutoregressionAlpha.py | 3 +- alpha/BollingerAlpha.py | 2 +- alpha/EventLstmAlpha.py | 6 ++-- alpha/MacdAlpha.py | 2 +- alpha/RsiAlpha.py | 2 +- alpha/SimpleEmaFactors.py | 3 +- alpha/interface.py | 2 ++ benchmark.py | 17 +++++----- benchmark_all.py | 5 ++- examples/pipeline_examples.py | 20 ++++++------ fix_utc_imports.py | 5 +-- pipeline/config.py | 6 ++-- pipeline/integrations.py | 5 +-- pipeline/orchestrator.py | 24 +++++++------- pipeline/results.py | 12 +++---- pipeline/verification.py | 10 +++--- polymarket/contracts.py | 1 - polymarket/data_builder.py | 17 +++++----- polymarket/event_model.py | 2 +- portfolio/PortfolioManagement.py | 3 +- strategy/AdaptiveMAStrategy.py | 5 +-- strategy/AdxStrengthStrategy.py | 3 +- strategy/AroonTrendStrategy.py | 3 +- strategy/AtrTrailingStopStrategy.py | 3 +- strategy/BbWidthExpansionStrategy.py | 3 +- strategy/BollingerBounceStrategy.py | 3 +- strategy/BopTrendStrategy.py | 3 +- strategy/BullishEngulfingStrategy.py | 3 +- strategy/CciMeanReversionStrategy.py | 3 +- strategy/ChaikinMoneyFlowStrategy.py | 3 +- strategy/CompositeScoreStrategy.py | 3 +- strategy/CoppockCurveStrategy.py | 3 +- strategy/DemaCrossStrategy.py | 3 +- strategy/DonchianBreakoutStrategy.py | 3 +- strategy/EmaCrossStrategy.py | 7 ++-- strategy/EmaRibbonStrategy.py | 3 +- strategy/FisherTransformStrategy.py | 5 +-- strategy/GoldenCrossStrategy.py | 3 +- strategy/HeikinAshiStrategy.py | 3 +- strategy/HigherHighStrategy.py | 3 +- strategy/IchimokuCloudStrategy.py | 7 ++-- strategy/IchimokuSimpleStrategy.py | 3 +- strategy/KeltnerChannelStrategy.py | 3 +- strategy/LinearRegressionStrategy.py | 3 +- strategy/MacdAdxStrategy.py | 7 ++-- strategy/MacdZeroCrossStrategy.py | 3 +- strategy/MlpSpeculativeStrategy.py | 9 ++++-- strategy/MomentumScoreStrategy.py | 3 +- strategy/MoneyFlowStrategy.py | 3 +- strategy/MultiFactorConfluenceStrategy.py | 5 +-- strategy/ObvTrendStrategy.py | 3 +- strategy/ParabolicSarStrategy.py | 3 +- .../PolymarketLogicalArbStrategy.py | 3 +- strategy/PolymarketMeanReversionStrategy.py | 2 +- strategy/PolymarketMomentumStrategy.py | 2 +- strategy/PpoMomentumStrategy.py | 3 +- strategy/PriceActionCandleStrategy.py | 4 +-- strategy/PriceChannelStrategy.py | 3 +- strategy/RSI_EMA_strategy.py | 7 ++-- strategy/RocMomentumStrategy.py | 3 +- strategy/RsiBollingerStrategy.py | 7 ++-- strategy/RsiDivergenceStrategy.py | 3 +- strategy/SqueezeMomentumStrategy.py | 4 +-- strategy/StochasticCciStrategy.py | 7 ++-- strategy/StochasticOversoldStrategy.py | 3 +- strategy/StochasticRsiStrategy.py | 3 +- strategy/SupertrendStrategy.py | 3 +- strategy/TemaStrategy.py | 3 +- strategy/TrendAtrStrategy.py | 4 +-- strategy/TripleEmaStrategy.py | 3 +- strategy/TrixSignalStrategy.py | 3 +- strategy/VolumeBreakoutStrategy.py | 4 +-- strategy/VortexStrategy.py | 3 +- strategy/VwapReversionStrategy.py | 3 +- strategy/WilliamsRStrategy.py | 3 +- strategy/ZScoreMeanReversionStrategy.py | 5 +-- strategy/__init__.py | 8 ++--- strategy/adaptive_trend/adaptive_trend.py | 16 +++++----- .../beta_factors_model.ipynb | 15 +++------ .../beta_factors_model.py | 18 +++++------ .../ml_utils/data_process.py | 6 ++-- .../ml_utils/ensemble.py | 6 ++-- .../ml_utils/labelling_algorithm.py | 1 + .../ml_utils/technical_analysis_tool.py | 4 +-- tests/test_alpha.py | 13 ++++---- tests/test_backtesting.py | 2 -- tests/test_data_integrity.py | 3 +- tests/test_pipeline.py | 32 +++++++++++-------- tests/test_polymarket/test_contracts.py | 1 - tests/test_polymarket/test_event_model.py | 3 +- tests/test_polymarket/test_settlement.py | 3 +- tests/test_portfolio_management.py | 1 + tests/test_workflow.py | 5 +-- user_data/run_custom.py | 4 +-- .../DualModelPolymarketPortfolio.py | 5 ++- user_data/strategies/ONS.py | 11 ++++--- user_data/strategies/best_single_asset.py | 2 +- user_data/strategies/exp_gradient.py | 11 ++++--- user_data/strategies/inv_vol.py | 11 ++++--- user_data/strategies/max_sharpe.py | 11 ++++--- user_data/strategies/min_var.py | 11 ++++--- user_data/strategies/polymarket_portfolio.py | 6 ++-- user_data/strategies/risk_parity.py | 11 ++++--- utils/download_polymarket_data.py | 4 --- utils/generate_polymarket_test_data.py | 6 ++-- utils/generate_test_data.py | 6 ++-- utils/test.py | 4 +-- workflow/cli_workflow.py | 4 +-- workflow/executor.py | 17 ++++------ 111 files changed, 334 insertions(+), 291 deletions(-) diff --git a/alpha/AutoRegression/autoregression.py b/alpha/AutoRegression/autoregression.py index 2b5b5e9..3a6b0f9 100644 --- a/alpha/AutoRegression/autoregression.py +++ b/alpha/AutoRegression/autoregression.py @@ -1,8 +1,10 @@ +from pathlib import Path + +import numpy as np import torch from torch import nn -from torch.utils.data import Dataset, DataLoader -import numpy as np -from pathlib import Path +from torch.utils.data import DataLoader, Dataset + class AR(nn.Module): def __init__(self, lag): diff --git a/alpha/AutoRegression/data_processing.py b/alpha/AutoRegression/data_processing.py index 51144f9..55405a5 100644 --- a/alpha/AutoRegression/data_processing.py +++ b/alpha/AutoRegression/data_processing.py @@ -1,6 +1,7 @@ import numpy as np import pandas as pd + def load_data(data_path: str = "./binance/BTC_USDT-5m.feather", start_date: str = "2021-01-01"): df = pd.read_feather(data_path) diff --git a/alpha/AutoregressionAlpha.py b/alpha/AutoregressionAlpha.py index 30fd58e..8f9aa68 100644 --- a/alpha/AutoregressionAlpha.py +++ b/alpha/AutoregressionAlpha.py @@ -1,8 +1,9 @@ import numpy as np import torch from pandas import DataFrame + +from alpha.AutoRegression.autoregression import build_train, trained_ar_model from alpha.interface import IAlpha -from alpha.AutoRegression.autoregression import trained_ar_model, build_train AR_MODEL_PATH = "./ar_model.pth" AR_LAG = 90 diff --git a/alpha/BollingerAlpha.py b/alpha/BollingerAlpha.py index f92dbce..cabd92a 100644 --- a/alpha/BollingerAlpha.py +++ b/alpha/BollingerAlpha.py @@ -6,9 +6,9 @@ """ import talib.abstract as ta +from freqtrade.strategy.parameters import IntParameter from alpha.interface import IAlpha -from freqtrade.strategy.parameters import IntParameter class BollingerAlpha(IAlpha): diff --git a/alpha/EventLstmAlpha.py b/alpha/EventLstmAlpha.py index 83dd69b..28fd881 100644 --- a/alpha/EventLstmAlpha.py +++ b/alpha/EventLstmAlpha.py @@ -1,8 +1,10 @@ -import torch import numpy as np +import torch +import torch.nn as nn from pandas import DataFrame + from alpha.interface import IAlpha -import torch.nn as nn + class EventLstmModel(nn.Module): def __init__(self): diff --git a/alpha/MacdAlpha.py b/alpha/MacdAlpha.py index c492960..3249a8f 100644 --- a/alpha/MacdAlpha.py +++ b/alpha/MacdAlpha.py @@ -5,9 +5,9 @@ """ import talib.abstract as ta +from freqtrade.strategy.parameters import IntParameter from alpha.interface import IAlpha -from freqtrade.strategy.parameters import IntParameter class MacdAlpha(IAlpha): diff --git a/alpha/RsiAlpha.py b/alpha/RsiAlpha.py index 4bfb3f1..140d931 100644 --- a/alpha/RsiAlpha.py +++ b/alpha/RsiAlpha.py @@ -5,9 +5,9 @@ """ import talib.abstract as ta +from freqtrade.strategy.parameters import IntParameter from alpha.interface import IAlpha -from freqtrade.strategy.parameters import IntParameter class RsiAlpha(IAlpha): diff --git a/alpha/SimpleEmaFactors.py b/alpha/SimpleEmaFactors.py index d17253b..d092c2b 100644 --- a/alpha/SimpleEmaFactors.py +++ b/alpha/SimpleEmaFactors.py @@ -1,7 +1,8 @@ import talib.abstract as ta +from freqtrade.strategy.parameters import IntParameter from alpha.interface import IAlpha -from freqtrade.strategy.parameters import IntParameter + class EmaAlpha(IAlpha): def __init__(self, dataframe, metadata): diff --git a/alpha/interface.py b/alpha/interface.py index 8652fe3..78df3d8 100644 --- a/alpha/interface.py +++ b/alpha/interface.py @@ -1,6 +1,8 @@ from abc import ABC, abstractmethod + from pandas import DataFrame + class IAlpha(ABC): def __init__(self, dataframe: DataFrame, metadata: dict = None): self.dataframe=dataframe diff --git a/benchmark.py b/benchmark.py index 49109e4..846ed99 100644 --- a/benchmark.py +++ b/benchmark.py @@ -14,12 +14,11 @@ python benchmark.py --export report.json # also write JSON results """ +import argparse +import json import os import sys -import json import time -import traceback -import argparse from concurrent.futures import ProcessPoolExecutor, as_completed from datetime import datetime from typing import Any, Dict, List, Optional, Tuple @@ -40,8 +39,8 @@ # --------------------------------------------------------------------------- try: from freqtrade.commands.optimize_commands import setup_optimize_configuration - from freqtrade.optimize.backtesting import Backtesting from freqtrade.enums import RunMode + from freqtrade.optimize.backtesting import Backtesting FREQTRADE_AVAILABLE = True except ImportError as e: FREQTRADE_AVAILABLE = False @@ -481,10 +480,11 @@ def run_alpha_smoke_test() -> Dict[str, Any]: t0 = time.time() try: import pandas as pd - from alpha.SimpleEmaFactors import EmaAlpha - from alpha.RsiAlpha import RsiAlpha - from alpha.MacdAlpha import MacdAlpha + from alpha.BollingerAlpha import BollingerAlpha + from alpha.MacdAlpha import MacdAlpha + from alpha.RsiAlpha import RsiAlpha + from alpha.SimpleEmaFactors import EmaAlpha # Load one pair's data filepath = os.path.join(DATA_DIR, "BTC_USDT-1d.feather") @@ -564,9 +564,10 @@ def run_data_integrity_check() -> Dict[str, Any]: } t0 = time.time() try: - import pandas as pd from pathlib import Path + import pandas as pd + data_path = Path(DATA_DIR) feather_files = sorted(data_path.glob("*.feather")) total = len(feather_files) diff --git a/benchmark_all.py b/benchmark_all.py index 513a728..5aa33e8 100755 --- a/benchmark_all.py +++ b/benchmark_all.py @@ -22,10 +22,9 @@ import os import sys import time -import traceback from concurrent.futures import ProcessPoolExecutor, as_completed from datetime import datetime -from typing import Any, Dict, List, Optional, Tuple +from typing import Any, Dict, List, Tuple # --------------------------------------------------------------------------- # Ensure project root is on sys.path @@ -433,8 +432,8 @@ def _run_single_backtest( ) -> Dict[str, Any]: """Run a single freqtrade backtest programmatically and return results.""" from freqtrade.commands.optimize_commands import setup_optimize_configuration - from freqtrade.optimize.backtesting import Backtesting from freqtrade.enums import RunMode + from freqtrade.optimize.backtesting import Backtesting config_path = os.path.join(PROJECT_ROOT, "user_data", "config.json") diff --git a/examples/pipeline_examples.py b/examples/pipeline_examples.py index bd4104b..5a8abb4 100644 --- a/examples/pipeline_examples.py +++ b/examples/pipeline_examples.py @@ -13,22 +13,22 @@ import sys from pathlib import Path -import pandas as pd + import numpy as np +import pandas as pd # Add project root to path PROJECT_ROOT = Path(__file__).parent.parent sys.path.insert(0, str(PROJECT_ROOT)) from pipeline.config import PipelineConfig, PresetConfigs -from pipeline.orchestrator import PortfolioPipeline, run_pipeline from pipeline.integrations import ( - FreqtradeIntegration, BatchPipelineRunner, - PresetPipelineRunner, + FreqtradeIntegration, PipelineComparator, + PresetPipelineRunner, ) - +from pipeline.orchestrator import run_pipeline # ============================================================================ # HELPER: Generate synthetic test data @@ -99,13 +99,13 @@ def example_2_custom_config(): from pipeline.config import ( AlphaConfig, - StrategyConfig, - PortfolioConfig, + AlphaType, BacktestConfig, DataConfig, - AlphaType, - StrategyType, PortfolioAlgorithm, + PortfolioConfig, + StrategyConfig, + StrategyType, ) # Build configuration programmatically @@ -212,7 +212,7 @@ def example_4_compare_pipelines(): # Print summary summary = runner.get_summary() - print(f"\nBatch Summary:") + print("\nBatch Summary:") print(f" Total runs: {summary['total_runs']}") print(f" Successful: {summary['successful']}") print(f" Failed: {summary['failed']}") diff --git a/fix_utc_imports.py b/fix_utc_imports.py index 6eb226e..483ae14 100644 --- a/fix_utc_imports.py +++ b/fix_utc_imports.py @@ -3,9 +3,10 @@ import os import re + def fix_utc_imports(filepath): """Fix UTC imports in a Python file for Python 3.10 compatibility.""" - with open(filepath, 'r', encoding='utf-8') as f: + with open(filepath, encoding='utf-8') as f: content = f.read() # Check if already fixed @@ -92,7 +93,7 @@ def fix_utc_imports(filepath): if file.endswith('.py'): filepath = os.path.join(root, file) try: - with open(filepath, 'r', encoding='utf-8') as f: + with open(filepath, encoding='utf-8') as f: content = f.read() if 'from datetime import' in content and 'UTC' in content: attempted += 1 diff --git a/pipeline/config.py b/pipeline/config.py index 9cca67f..e5e737e 100644 --- a/pipeline/config.py +++ b/pipeline/config.py @@ -11,10 +11,10 @@ import json import os -from dataclasses import dataclass, field, asdict +from dataclasses import asdict, dataclass, field +from enum import Enum from pathlib import Path from typing import Any, Dict, List, Optional -from enum import Enum class AlphaType(str, Enum): @@ -210,7 +210,7 @@ def from_yaml(cls, filepath: str | Path) -> PipelineConfig: raise ImportError("PyYAML required for YAML config support. " "Install with: pip install PyYAML") - with open(filepath, 'r') as f: + with open(filepath) as f: data = yaml.safe_load(f) return cls.from_dict(data) diff --git a/pipeline/integrations.py b/pipeline/integrations.py index 5e6d2a5..7b406dc 100644 --- a/pipeline/integrations.py +++ b/pipeline/integrations.py @@ -13,11 +13,12 @@ from __future__ import annotations import json +import logging import pickle from pathlib import Path -from typing import Dict, List, Any, Optional +from typing import Any, Dict, List + import pandas as pd -import logging logger = logging.getLogger(__name__) diff --git a/pipeline/orchestrator.py b/pipeline/orchestrator.py index ad1b94d..88347eb 100644 --- a/pipeline/orchestrator.py +++ b/pipeline/orchestrator.py @@ -14,34 +14,34 @@ from __future__ import annotations +import logging import os import sys import time -import logging from pathlib import Path -from typing import Dict, List, Optional, Tuple, Any -import pandas as pd +from typing import Dict, List + import numpy as np +import pandas as pd # Ensure project root is on path _PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) if _PROJECT_ROOT not in sys.path: sys.path.insert(0, _PROJECT_ROOT) -from pipeline.config import PipelineConfig, AlphaType, StrategyType -from pipeline.verification import PipelineVerification, ValidationResult +from pipeline.config import AlphaType, PipelineConfig, StrategyType from pipeline.results import PipelineResult, StageOutput - +from pipeline.verification import PipelineVerification from portfolio.PortfolioManagement import ( - load_pair_data, align_close_prices, - ema_cross_signals, + backtest_portfolio, + blend_strategy_weights, build_ema_position_series, calculate_ons_weights, - equal_weight_allocation, - blend_strategy_weights, - backtest_portfolio, compute_metrics, + ema_cross_signals, + equal_weight_allocation, + load_pair_data, ) logger = logging.getLogger(__name__) @@ -184,7 +184,7 @@ def run(self) -> PipelineResult: data_summary=metrics )) - logger.info(f"\nBacktest Results:") + logger.info("\nBacktest Results:") logger.info(f" Total return: {metrics['total_return_pct']:.2f}%") logger.info(f" Annualized return: {metrics['annualised_return_pct']:.2f}%") logger.info(f" Annualized Sharpe: {metrics['annualised_sharpe']:.4f}") diff --git a/pipeline/results.py b/pipeline/results.py index 563e532..073a26c 100644 --- a/pipeline/results.py +++ b/pipeline/results.py @@ -10,13 +10,11 @@ import json import logging -from dataclasses import dataclass, field, asdict +from dataclasses import asdict, dataclass, field from pathlib import Path -from typing import Dict, List, Any, Optional -from datetime import datetime -import pandas as pd -import numpy as np +from typing import Any, Dict, List, Optional +import pandas as pd logger = logging.getLogger(__name__) @@ -204,7 +202,7 @@ def to_html_report(self) -> str: "", "", "
", - f"

PortfolioBench Pipeline Report

", + "

PortfolioBench Pipeline Report

", f"

Pipeline: {summary['pipeline_name']}

", f"

Duration: {summary['duration_s']:.2f}s

", "
", @@ -325,7 +323,7 @@ def print_summary(self) -> None: print(f" [~] Skipped: {stages['skipped']}") if summary['metrics']: - print(f"\nMetrics:") + print("\nMetrics:") for key, value in summary['metrics'].items(): if value is not None: if isinstance(value, float): diff --git a/pipeline/verification.py b/pipeline/verification.py index 0d089df..598ac17 100644 --- a/pipeline/verification.py +++ b/pipeline/verification.py @@ -11,11 +11,11 @@ import logging from dataclasses import dataclass -from typing import Dict, List, Tuple, Any, Optional +from typing import Any, Dict, List + import numpy as np import pandas as pd - logger = logging.getLogger(__name__) @@ -209,7 +209,7 @@ def validate_alpha_signals( result = ValidationResult( name="alpha_columns_present", passed=True, - message=f"All expected alpha columns present", + message="All expected alpha columns present", details={"expected_columns": expected_columns} ) else: @@ -245,7 +245,7 @@ def validate_alpha_signals( result = ValidationResult( name="alpha_columns_no_nan", passed=False, - message=f"Found NaN values in alpha columns", + message="Found NaN values in alpha columns", details=nan_summary ) checks.append(result) @@ -408,7 +408,7 @@ def validate_portfolio_weights( result = ValidationResult( name="weight_concentration", passed=True, - message=f"Portfolio concentration metrics computed", + message="Portfolio concentration metrics computed", details={ "mean_hhi": round(hhi, 4), "n_assets": n_assets, diff --git a/polymarket/contracts.py b/polymarket/contracts.py index 3686f6a..6ad6bec 100644 --- a/polymarket/contracts.py +++ b/polymarket/contracts.py @@ -23,7 +23,6 @@ from dataclasses import dataclass, field from pathlib import Path - # --------------------------------------------------------------------------- # Pair naming helpers # --------------------------------------------------------------------------- diff --git a/polymarket/data_builder.py b/polymarket/data_builder.py index 5047858..e34f24e 100644 --- a/polymarket/data_builder.py +++ b/polymarket/data_builder.py @@ -19,7 +19,7 @@ from polymarket.contracts import ContractMetadata, load_contracts from polymarket.settlement import load_btc_hourly, verify_settlements -from polymarket.synthetic_prices import build_synthetic_ohlcv, _calibrate_sigma +from polymarket.synthetic_prices import _calibrate_sigma, build_synthetic_ohlcv def _pair_to_filename(pair: str, timeframe: str = "1h") -> str: @@ -136,7 +136,7 @@ def build_all_feathers( # For NO side: complement prices (close = 1 - yes_close), re-clamp if side == "no": - from polymarket.synthetic_prices import PRICE_FLOOR, PRICE_CEIL + from polymarket.synthetic_prices import PRICE_CEIL, PRICE_FLOOR ohlcv_df = ohlcv_df.copy() ohlcv_df["close"] = (1.0 - ohlcv_df["close"]).clip(PRICE_FLOOR, PRICE_CEIL) ohlcv_df["open"] = (1.0 - ohlcv_df["open"]).clip(PRICE_FLOOR, PRICE_CEIL) @@ -144,7 +144,8 @@ def build_all_feathers( ohlcv_df["low"] = (1.0 - ohlcv_df["high"]).clip(PRICE_FLOOR, PRICE_CEIL) # Patch settlement: NO settlement = 1.0 - YES settlement no_settlement = 1.0 - contract.settlement - from polymarket.synthetic_prices import PRICE_FLOOR as PF, PRICE_CEIL as PC + from polymarket.synthetic_prices import PRICE_CEIL as PC + from polymarket.synthetic_prices import PRICE_FLOOR as PF ohlcv_df.iloc[-1, ohlcv_df.columns.get_loc("close")] = PC if no_settlement == 1.0 else PF table = pa.Table.from_pandas(ohlcv_df, preserve_index=False) @@ -169,7 +170,7 @@ def build_event_training_data( day_of_week: int = 0, hour_utc: int = 17, relative_strikes: list[float] | None = None, -) -> "pd.DataFrame": +) -> pd.DataFrame: """Build and save the training dataset for the event-probability model. Constructs synthetic weekly BTC binary-event samples from ``btc_csv_path`` @@ -188,7 +189,6 @@ def build_event_training_data( Returns: The constructed samples DataFrame (also saved to ``output_path``). """ - import pandas as pd from polymarket.event_dataset import build_training_samples btc_df = load_btc_hourly(str(btc_csv_path)) @@ -235,7 +235,8 @@ def train_event_model( The trained model package dict. """ import pandas as pd - from polymarket.event_model import train, save_model + + from polymarket.event_model import save_model, train samples = pd.read_parquet(str(training_data_path)) # Ensure T is UTC-aware after parquet round-trip @@ -247,7 +248,7 @@ def train_event_model( model_package = train(samples, val_cutoff=val_cutoff, model_type=model_type) save_model(model_package, output_model_path) - print(f"\nModel metrics:") + print("\nModel metrics:") for split, m in model_package["metrics"].items(): if m: print( @@ -260,7 +261,7 @@ def train_event_model( def build_event_predictions( btc_csv_path: str | Path, model_path: str | Path, - contracts: "list[ContractMetadata]", + contracts: list[ContractMetadata], output_dir: str | Path, ) -> None: """Generate per-contract event probability CSVs for backtesting. diff --git a/polymarket/event_model.py b/polymarket/event_model.py index 65289b8..0fd0a53 100644 --- a/polymarket/event_model.py +++ b/polymarket/event_model.py @@ -193,7 +193,7 @@ def _compute_metrics(tag: str, X: np.ndarray, y: np.ndarray) -> dict: " %-6s AUC=%.4f Brier=%.4f Acc=%.4f n=%d", tag, auc, brier, acc, len(y), ) - return {"auc": auc, "brier": brier, "accuracy": acc, "n": int(len(y))} + return {"auc": auc, "brier": brier, "accuracy": acc, "n": len(y)} logger.info("Evaluation metrics:") metrics = { diff --git a/portfolio/PortfolioManagement.py b/portfolio/PortfolioManagement.py index 1a0fcaa..3832b03 100644 --- a/portfolio/PortfolioManagement.py +++ b/portfolio/PortfolioManagement.py @@ -15,9 +15,10 @@ import os import sys +from typing import Dict, List, Tuple + import numpy as np import pandas as pd -from typing import Dict, List, Tuple from scipy.optimize import minimize # --------------------------------------------------------------------------- diff --git a/strategy/AdaptiveMAStrategy.py b/strategy/AdaptiveMAStrategy.py index 1a003dd..5f7f76c 100644 --- a/strategy/AdaptiveMAStrategy.py +++ b/strategy/AdaptiveMAStrategy.py @@ -1,4 +1,5 @@ import numpy as np + """ AdaptiveMAStrategy — Kaufman Adaptive Moving Average (KAMA) crossover ===================================================================== @@ -14,9 +15,9 @@ Stop : 5% """ -from freqtrade.strategy import IStrategy, IntParameter, DecimalParameter -from pandas import DataFrame import talib.abstract as ta +from freqtrade.strategy import DecimalParameter, IntParameter, IStrategy +from pandas import DataFrame class AdaptiveMAStrategy(IStrategy): diff --git a/strategy/AdxStrengthStrategy.py b/strategy/AdxStrengthStrategy.py index 426cbf9..34efd55 100644 --- a/strategy/AdxStrengthStrategy.py +++ b/strategy/AdxStrengthStrategy.py @@ -1,7 +1,8 @@ """Strategy: ADX Strength Entry Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class AdxStrengthStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/AroonTrendStrategy.py b/strategy/AroonTrendStrategy.py index 7787e12..96426ed 100644 --- a/strategy/AroonTrendStrategy.py +++ b/strategy/AroonTrendStrategy.py @@ -1,7 +1,8 @@ """Strategy: Aroon Trend Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class AroonTrendStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/AtrTrailingStopStrategy.py b/strategy/AtrTrailingStopStrategy.py index f87fa09..726bf5a 100644 --- a/strategy/AtrTrailingStopStrategy.py +++ b/strategy/AtrTrailingStopStrategy.py @@ -1,7 +1,8 @@ """Strategy: ATR Trailing Stop Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class AtrTrailingStopStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/BbWidthExpansionStrategy.py b/strategy/BbWidthExpansionStrategy.py index 29b9208..656c8f3 100644 --- a/strategy/BbWidthExpansionStrategy.py +++ b/strategy/BbWidthExpansionStrategy.py @@ -1,7 +1,8 @@ """Strategy: Bollinger Band Width Expansion Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class BbWidthExpansionStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/BollingerBounceStrategy.py b/strategy/BollingerBounceStrategy.py index 8d66463..c3f207d 100644 --- a/strategy/BollingerBounceStrategy.py +++ b/strategy/BollingerBounceStrategy.py @@ -1,7 +1,8 @@ """Strategy 3: Bollinger Band Bounce""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class BollingerBounceStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/BopTrendStrategy.py b/strategy/BopTrendStrategy.py index 72b48af..aef16be 100644 --- a/strategy/BopTrendStrategy.py +++ b/strategy/BopTrendStrategy.py @@ -1,7 +1,8 @@ """Strategy: Balance of Power Trend Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class BopTrendStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/BullishEngulfingStrategy.py b/strategy/BullishEngulfingStrategy.py index 2068cb5..7690ea7 100644 --- a/strategy/BullishEngulfingStrategy.py +++ b/strategy/BullishEngulfingStrategy.py @@ -1,7 +1,8 @@ """Strategy: Bullish Engulfing Pattern Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class BullishEngulfingStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/CciMeanReversionStrategy.py b/strategy/CciMeanReversionStrategy.py index 7a8fb96..141ac99 100644 --- a/strategy/CciMeanReversionStrategy.py +++ b/strategy/CciMeanReversionStrategy.py @@ -1,7 +1,8 @@ """Strategy 6: CCI Mean Reversion""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class CciMeanReversionStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/ChaikinMoneyFlowStrategy.py b/strategy/ChaikinMoneyFlowStrategy.py index dfe398a..78a2a5b 100644 --- a/strategy/ChaikinMoneyFlowStrategy.py +++ b/strategy/ChaikinMoneyFlowStrategy.py @@ -1,7 +1,8 @@ """Strategy: Chaikin Money Flow Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class ChaikinMoneyFlowStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/CompositeScoreStrategy.py b/strategy/CompositeScoreStrategy.py index 1820fdb..a896eae 100644 --- a/strategy/CompositeScoreStrategy.py +++ b/strategy/CompositeScoreStrategy.py @@ -1,7 +1,8 @@ """Strategy 13: Composite Score Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class CompositeScoreStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/CoppockCurveStrategy.py b/strategy/CoppockCurveStrategy.py index 23aae97..20c0137 100644 --- a/strategy/CoppockCurveStrategy.py +++ b/strategy/CoppockCurveStrategy.py @@ -1,7 +1,8 @@ """Strategy: Coppock Curve Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class CoppockCurveStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/DemaCrossStrategy.py b/strategy/DemaCrossStrategy.py index b8f1fd7..5f7438c 100644 --- a/strategy/DemaCrossStrategy.py +++ b/strategy/DemaCrossStrategy.py @@ -1,7 +1,8 @@ """Strategy: Dema Cross Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class DemaCrossStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/DonchianBreakoutStrategy.py b/strategy/DonchianBreakoutStrategy.py index a168391..57dc64c 100644 --- a/strategy/DonchianBreakoutStrategy.py +++ b/strategy/DonchianBreakoutStrategy.py @@ -1,7 +1,8 @@ """Strategy 12: Donchian Channel Breakout""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class DonchianBreakoutStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/EmaCrossStrategy.py b/strategy/EmaCrossStrategy.py index 687107e..8126348 100644 --- a/strategy/EmaCrossStrategy.py +++ b/strategy/EmaCrossStrategy.py @@ -1,15 +1,14 @@ from datetime import datetime -from pandas import DataFrame from freqtrade.strategy import ( - IStrategy, IntParameter, + IStrategy, ) +from pandas import DataFrame +from technical import qtpylib from alpha.SimpleEmaFactors import EmaAlpha -from technical import qtpylib - class EmaCrossStrategy(IStrategy): """ diff --git a/strategy/EmaRibbonStrategy.py b/strategy/EmaRibbonStrategy.py index 4dab3ff..dd2af47 100644 --- a/strategy/EmaRibbonStrategy.py +++ b/strategy/EmaRibbonStrategy.py @@ -1,7 +1,8 @@ """Strategy: EMA Ribbon Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class EmaRibbonStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/FisherTransformStrategy.py b/strategy/FisherTransformStrategy.py index 3e473c1..bb19135 100644 --- a/strategy/FisherTransformStrategy.py +++ b/strategy/FisherTransformStrategy.py @@ -1,8 +1,9 @@ """Strategy: Fisher Transform Strategy""" +import numpy as np +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta -import numpy as np + class FisherTransformStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/GoldenCrossStrategy.py b/strategy/GoldenCrossStrategy.py index d8a37ac..ce06e39 100644 --- a/strategy/GoldenCrossStrategy.py +++ b/strategy/GoldenCrossStrategy.py @@ -1,7 +1,8 @@ """Strategy 2: Golden Cross Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class GoldenCrossStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/HeikinAshiStrategy.py b/strategy/HeikinAshiStrategy.py index d576a99..4c32b34 100644 --- a/strategy/HeikinAshiStrategy.py +++ b/strategy/HeikinAshiStrategy.py @@ -1,7 +1,8 @@ """Strategy: Heikin Ashi Trend Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class HeikinAshiStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/HigherHighStrategy.py b/strategy/HigherHighStrategy.py index 394529f..5bbc2e5 100644 --- a/strategy/HigherHighStrategy.py +++ b/strategy/HigherHighStrategy.py @@ -1,7 +1,8 @@ """Strategy: Higher Highs Higher Lows Structure""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class HigherHighStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/IchimokuCloudStrategy.py b/strategy/IchimokuCloudStrategy.py index c1bd02d..8476718 100644 --- a/strategy/IchimokuCloudStrategy.py +++ b/strategy/IchimokuCloudStrategy.py @@ -1,12 +1,11 @@ -import pandas as pd from datetime import datetime -from pandas import DataFrame +import pandas as pd from freqtrade.strategy import ( - IStrategy, IntParameter, + IStrategy, ) - +from pandas import DataFrame from technical import qtpylib diff --git a/strategy/IchimokuSimpleStrategy.py b/strategy/IchimokuSimpleStrategy.py index db98912..98dcc12 100644 --- a/strategy/IchimokuSimpleStrategy.py +++ b/strategy/IchimokuSimpleStrategy.py @@ -1,7 +1,8 @@ """Strategy: Simple Ichimoku Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class IchimokuSimpleStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/KeltnerChannelStrategy.py b/strategy/KeltnerChannelStrategy.py index 6f2e505..d80722c 100644 --- a/strategy/KeltnerChannelStrategy.py +++ b/strategy/KeltnerChannelStrategy.py @@ -1,7 +1,8 @@ """Strategy: Keltner Channel Breakout""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class KeltnerChannelStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/LinearRegressionStrategy.py b/strategy/LinearRegressionStrategy.py index 047db01..3b4149b 100644 --- a/strategy/LinearRegressionStrategy.py +++ b/strategy/LinearRegressionStrategy.py @@ -1,7 +1,8 @@ """Strategy: Linear Regression Slope Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class LinearRegressionStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/MacdAdxStrategy.py b/strategy/MacdAdxStrategy.py index d91452c..c795864 100644 --- a/strategy/MacdAdxStrategy.py +++ b/strategy/MacdAdxStrategy.py @@ -1,12 +1,11 @@ from datetime import datetime -from pandas import DataFrame +import talib.abstract as ta from freqtrade.strategy import ( - IStrategy, IntParameter, + IStrategy, ) - -import talib.abstract as ta +from pandas import DataFrame class MacdAdxStrategy(IStrategy): diff --git a/strategy/MacdZeroCrossStrategy.py b/strategy/MacdZeroCrossStrategy.py index 5fbdf73..6166af9 100644 --- a/strategy/MacdZeroCrossStrategy.py +++ b/strategy/MacdZeroCrossStrategy.py @@ -1,7 +1,8 @@ """Strategy 4: MACD Zero Cross""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class MacdZeroCrossStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/MlpSpeculativeStrategy.py b/strategy/MlpSpeculativeStrategy.py index 944bd4b..735eab5 100644 --- a/strategy/MlpSpeculativeStrategy.py +++ b/strategy/MlpSpeculativeStrategy.py @@ -1,11 +1,14 @@ import os + os.environ["CUDA_VISIBLE_DEVICES"] = "-1" +from freqtrade.strategy import IStrategy from pandas import DataFrame -from strategy.mlp_speculative_model.ml_utils.technical_analysis_tool import TecnicalAnalysis -from strategy.mlp_speculative_model.ml_utils.ensemble import sample_model + from strategy.mlp_speculative_model.ml_utils.data_process import DataProcess -from freqtrade.strategy import IStrategy +from strategy.mlp_speculative_model.ml_utils.ensemble import sample_model +from strategy.mlp_speculative_model.ml_utils.technical_analysis_tool import TecnicalAnalysis + class MlpSpeculativeStrategy(IStrategy): can_short = False diff --git a/strategy/MomentumScoreStrategy.py b/strategy/MomentumScoreStrategy.py index 35ca156..e4dea41 100644 --- a/strategy/MomentumScoreStrategy.py +++ b/strategy/MomentumScoreStrategy.py @@ -1,7 +1,8 @@ """Strategy: Momentum Score Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class MomentumScoreStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/MoneyFlowStrategy.py b/strategy/MoneyFlowStrategy.py index 307eaf3..95e6256 100644 --- a/strategy/MoneyFlowStrategy.py +++ b/strategy/MoneyFlowStrategy.py @@ -1,7 +1,8 @@ """Strategy 10: Money Flow Index""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class MoneyFlowStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/MultiFactorConfluenceStrategy.py b/strategy/MultiFactorConfluenceStrategy.py index 7a41a09..8730c9b 100644 --- a/strategy/MultiFactorConfluenceStrategy.py +++ b/strategy/MultiFactorConfluenceStrategy.py @@ -1,5 +1,6 @@ import numpy as np import pandas as pd + """ MultiFactorConfluenceStrategy — Multi-signal confluence scoring =============================================================== @@ -18,9 +19,9 @@ Suitable for: crypto, 4h timeframe — robust multi-asset design """ -from freqtrade.strategy import IStrategy, IntParameter -from pandas import DataFrame import talib.abstract as ta +from freqtrade.strategy import IntParameter, IStrategy +from pandas import DataFrame class MultiFactorConfluenceStrategy(IStrategy): diff --git a/strategy/ObvTrendStrategy.py b/strategy/ObvTrendStrategy.py index fcd3f9c..06fda78 100644 --- a/strategy/ObvTrendStrategy.py +++ b/strategy/ObvTrendStrategy.py @@ -1,7 +1,8 @@ """Strategy: On Balance Volume Trend""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class ObvTrendStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/ParabolicSarStrategy.py b/strategy/ParabolicSarStrategy.py index b702dd3..f5d4eeb 100644 --- a/strategy/ParabolicSarStrategy.py +++ b/strategy/ParabolicSarStrategy.py @@ -1,7 +1,8 @@ """Strategy 9: Parabolic SAR Trend Follow""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class ParabolicSarStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/PolymarketLogicalArb/PolymarketLogicalArbStrategy.py b/strategy/PolymarketLogicalArb/PolymarketLogicalArbStrategy.py index 2bbc7cd..83a9528 100644 --- a/strategy/PolymarketLogicalArb/PolymarketLogicalArbStrategy.py +++ b/strategy/PolymarketLogicalArb/PolymarketLogicalArbStrategy.py @@ -1,13 +1,12 @@ from __future__ import annotations +import re from datetime import datetime from pathlib import Path from typing import Dict, List, Optional, Tuple -import re import numpy as np import pandas as pd - from freqtrade.strategy import IStrategy """ diff --git a/strategy/PolymarketMeanReversionStrategy.py b/strategy/PolymarketMeanReversionStrategy.py index 93331d7..274b6da 100644 --- a/strategy/PolymarketMeanReversionStrategy.py +++ b/strategy/PolymarketMeanReversionStrategy.py @@ -8,9 +8,9 @@ rather than fundamental shifts (e.g., speculative events, sentiment spikes). """ -import pandas as pd from datetime import datetime +import pandas as pd from freqtrade.strategy import IStrategy from alpha.PolymarketFactors import PolymarketAlpha diff --git a/strategy/PolymarketMomentumStrategy.py b/strategy/PolymarketMomentumStrategy.py index 5ac83aa..a63bfb3 100644 --- a/strategy/PolymarketMomentumStrategy.py +++ b/strategy/PolymarketMomentumStrategy.py @@ -8,9 +8,9 @@ (e.g., election polls, economic forecasts). """ -import pandas as pd from datetime import datetime +import pandas as pd from freqtrade.strategy import IStrategy from alpha.PolymarketFactors import PolymarketAlpha diff --git a/strategy/PpoMomentumStrategy.py b/strategy/PpoMomentumStrategy.py index 5bed164..738fc08 100644 --- a/strategy/PpoMomentumStrategy.py +++ b/strategy/PpoMomentumStrategy.py @@ -1,7 +1,8 @@ """Strategy: PPO Momentum Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class PpoMomentumStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/PriceActionCandleStrategy.py b/strategy/PriceActionCandleStrategy.py index e99e19f..63cc067 100644 --- a/strategy/PriceActionCandleStrategy.py +++ b/strategy/PriceActionCandleStrategy.py @@ -12,9 +12,9 @@ Stop : 4% """ -from freqtrade.strategy import IStrategy, DecimalParameter -from pandas import DataFrame import talib.abstract as ta +from freqtrade.strategy import DecimalParameter, IStrategy +from pandas import DataFrame class PriceActionCandleStrategy(IStrategy): diff --git a/strategy/PriceChannelStrategy.py b/strategy/PriceChannelStrategy.py index ea7e08d..c15bfc7 100644 --- a/strategy/PriceChannelStrategy.py +++ b/strategy/PriceChannelStrategy.py @@ -1,7 +1,8 @@ """Strategy: Price Channel Trend Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class PriceChannelStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/RSI_EMA_strategy.py b/strategy/RSI_EMA_strategy.py index 2a120c8..d3dae19 100644 --- a/strategy/RSI_EMA_strategy.py +++ b/strategy/RSI_EMA_strategy.py @@ -1,10 +1,9 @@ # --- Do not remove these libs --- -from freqtrade.strategy import IStrategy -from pandas import DataFrame # -------------------------------- - import talib.abstract as ta +from freqtrade.strategy import IStrategy +from pandas import DataFrame class RSI_EMA_strategy(IStrategy): @@ -127,7 +126,7 @@ def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame dataframe.loc[ ( ((dataframe['rsi'] > 60) & (dataframe['rsi'].shift(1) <= 60)) - | ((dataframe['uptrend'] == False)) + | (dataframe['uptrend'] == False) ), 'exit_long'] = 1 return dataframe \ No newline at end of file diff --git a/strategy/RocMomentumStrategy.py b/strategy/RocMomentumStrategy.py index 6b33ec5..0379af0 100644 --- a/strategy/RocMomentumStrategy.py +++ b/strategy/RocMomentumStrategy.py @@ -1,7 +1,8 @@ """Strategy 8: Rate of Change Momentum""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class RocMomentumStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/RsiBollingerStrategy.py b/strategy/RsiBollingerStrategy.py index 3939e19..8c9830a 100644 --- a/strategy/RsiBollingerStrategy.py +++ b/strategy/RsiBollingerStrategy.py @@ -1,13 +1,12 @@ from datetime import datetime -from pandas import DataFrame +import talib.abstract as ta from freqtrade.strategy import ( - IStrategy, DecimalParameter, IntParameter, + IStrategy, ) - -import talib.abstract as ta +from pandas import DataFrame from technical import qtpylib diff --git a/strategy/RsiDivergenceStrategy.py b/strategy/RsiDivergenceStrategy.py index 545e93d..d5b2d7d 100644 --- a/strategy/RsiDivergenceStrategy.py +++ b/strategy/RsiDivergenceStrategy.py @@ -1,7 +1,8 @@ """Strategy: RSI Divergence Proxy Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class RsiDivergenceStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/SqueezeMomentumStrategy.py b/strategy/SqueezeMomentumStrategy.py index cadddee..1f59366 100644 --- a/strategy/SqueezeMomentumStrategy.py +++ b/strategy/SqueezeMomentumStrategy.py @@ -13,9 +13,9 @@ Stop : 5% """ -from freqtrade.strategy import IStrategy, IntParameter, DecimalParameter -from pandas import DataFrame import talib.abstract as ta +from freqtrade.strategy import DecimalParameter, IntParameter, IStrategy +from pandas import DataFrame class SqueezeMomentumStrategy(IStrategy): diff --git a/strategy/StochasticCciStrategy.py b/strategy/StochasticCciStrategy.py index 3d0ecc6..2224871 100644 --- a/strategy/StochasticCciStrategy.py +++ b/strategy/StochasticCciStrategy.py @@ -1,12 +1,11 @@ from datetime import datetime -from pandas import DataFrame +import talib.abstract as ta from freqtrade.strategy import ( - IStrategy, IntParameter, + IStrategy, ) - -import talib.abstract as ta +from pandas import DataFrame from technical import qtpylib diff --git a/strategy/StochasticOversoldStrategy.py b/strategy/StochasticOversoldStrategy.py index 5717c5d..8eb03d3 100644 --- a/strategy/StochasticOversoldStrategy.py +++ b/strategy/StochasticOversoldStrategy.py @@ -1,7 +1,8 @@ """Strategy 5: Stochastic Oversold Bounce""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class StochasticOversoldStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/StochasticRsiStrategy.py b/strategy/StochasticRsiStrategy.py index 6bbd9a8..463ec6c 100644 --- a/strategy/StochasticRsiStrategy.py +++ b/strategy/StochasticRsiStrategy.py @@ -1,7 +1,8 @@ """Strategy: Stochastic RSI Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class StochasticRsiStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/SupertrendStrategy.py b/strategy/SupertrendStrategy.py index 001d940..53b3795 100644 --- a/strategy/SupertrendStrategy.py +++ b/strategy/SupertrendStrategy.py @@ -1,7 +1,8 @@ """Strategy: Supertrend Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class SupertrendStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/TemaStrategy.py b/strategy/TemaStrategy.py index 01063de..52a0f69 100644 --- a/strategy/TemaStrategy.py +++ b/strategy/TemaStrategy.py @@ -1,7 +1,8 @@ """Strategy: TEMA Cross Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class TemaStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/TrendAtrStrategy.py b/strategy/TrendAtrStrategy.py index 91b07eb..cb8e107 100644 --- a/strategy/TrendAtrStrategy.py +++ b/strategy/TrendAtrStrategy.py @@ -10,9 +10,9 @@ Suitable for: crypto / stocks, 4h timeframe """ -from freqtrade.strategy import IStrategy, DecimalParameter, IntParameter -from pandas import DataFrame import talib.abstract as ta +from freqtrade.strategy import DecimalParameter, IntParameter, IStrategy +from pandas import DataFrame class TrendAtrStrategy(IStrategy): diff --git a/strategy/TripleEmaStrategy.py b/strategy/TripleEmaStrategy.py index 2c2d712..4d1f4f9 100644 --- a/strategy/TripleEmaStrategy.py +++ b/strategy/TripleEmaStrategy.py @@ -1,7 +1,8 @@ """Strategy 11: Triple EMA Trend""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class TripleEmaStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/TrixSignalStrategy.py b/strategy/TrixSignalStrategy.py index f8933f6..39937bd 100644 --- a/strategy/TrixSignalStrategy.py +++ b/strategy/TrixSignalStrategy.py @@ -1,7 +1,8 @@ """Strategy: Trix Signal Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class TrixSignalStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/VolumeBreakoutStrategy.py b/strategy/VolumeBreakoutStrategy.py index 2148dc7..09ccd11 100644 --- a/strategy/VolumeBreakoutStrategy.py +++ b/strategy/VolumeBreakoutStrategy.py @@ -8,9 +8,9 @@ Stop : 4% fixed + trailing after 3% profit """ -from freqtrade.strategy import IStrategy, IntParameter, DecimalParameter -from pandas import DataFrame import talib.abstract as ta +from freqtrade.strategy import DecimalParameter, IntParameter, IStrategy +from pandas import DataFrame class VolumeBreakoutStrategy(IStrategy): diff --git a/strategy/VortexStrategy.py b/strategy/VortexStrategy.py index c289876..1b27366 100644 --- a/strategy/VortexStrategy.py +++ b/strategy/VortexStrategy.py @@ -1,7 +1,8 @@ """Strategy: Vortex Indicator Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class VortexStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/VwapReversionStrategy.py b/strategy/VwapReversionStrategy.py index ec4400a..7cb543b 100644 --- a/strategy/VwapReversionStrategy.py +++ b/strategy/VwapReversionStrategy.py @@ -1,7 +1,8 @@ """Strategy: VWAP Reversion Strategy""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class VwapReversionStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/WilliamsRStrategy.py b/strategy/WilliamsRStrategy.py index af800c3..489c2b1 100644 --- a/strategy/WilliamsRStrategy.py +++ b/strategy/WilliamsRStrategy.py @@ -1,7 +1,8 @@ """Strategy 7: Williams %R Reversal""" +import talib.abstract as ta from freqtrade.strategy import IStrategy from pandas import DataFrame -import talib.abstract as ta + class WilliamsRStrategy(IStrategy): timeframe = "5m" diff --git a/strategy/ZScoreMeanReversionStrategy.py b/strategy/ZScoreMeanReversionStrategy.py index 8d464a2..d915195 100644 --- a/strategy/ZScoreMeanReversionStrategy.py +++ b/strategy/ZScoreMeanReversionStrategy.py @@ -1,4 +1,5 @@ import numpy as np + """ ZScoreMeanReversionStrategy — Statistical mean-reversion on Bollinger Z-score ============================================================================== @@ -12,9 +13,9 @@ Suitable for: crypto / US stocks, 4h or 1d timeframe """ -from freqtrade.strategy import IStrategy, DecimalParameter, IntParameter -from pandas import DataFrame import talib.abstract as ta +from freqtrade.strategy import DecimalParameter, IntParameter, IStrategy +from pandas import DataFrame class ZScoreMeanReversionStrategy(IStrategy): diff --git a/strategy/__init__.py b/strategy/__init__.py index 415dcef..c735aea 100644 --- a/strategy/__init__.py +++ b/strategy/__init__.py @@ -1,11 +1,11 @@ from strategy.EmaCrossStrategy import EmaCrossStrategy +from strategy.IchimokuCloudStrategy import IchimokuCloudStrategy from strategy.MacdAdxStrategy import MacdAdxStrategy +from strategy.MlpSpeculativeStrategy import MlpSpeculativeStrategy +from strategy.PolymarketMeanReversionStrategy import PolymarketMeanReversionStrategy +from strategy.PolymarketMomentumStrategy import PolymarketMomentumStrategy from strategy.RsiBollingerStrategy import RsiBollingerStrategy -from strategy.IchimokuCloudStrategy import IchimokuCloudStrategy from strategy.StochasticCciStrategy import StochasticCciStrategy -from strategy.PolymarketMomentumStrategy import PolymarketMomentumStrategy -from strategy.PolymarketMeanReversionStrategy import PolymarketMeanReversionStrategy -from strategy.MlpSpeculativeStrategy import MlpSpeculativeStrategy strategy_list = [ EmaCrossStrategy.__name__, diff --git a/strategy/adaptive_trend/adaptive_trend.py b/strategy/adaptive_trend/adaptive_trend.py index 2039a8f..8bf1e1d 100644 --- a/strategy/adaptive_trend/adaptive_trend.py +++ b/strategy/adaptive_trend/adaptive_trend.py @@ -1,15 +1,15 @@ # --- Do not remove these libs --- -from freqtrade.strategy import IStrategy +from datetime import timedelta +from pathlib import Path from typing import Optional -from pandas import DataFrame -# -------------------------------- -from freqtrade.strategy import DecimalParameter, IntParameter -import talib.abstract as ta -import pandas as pd import numpy as np -from pathlib import Path -from datetime import timedelta +import pandas as pd +import talib.abstract as ta + +# -------------------------------- +from freqtrade.strategy import DecimalParameter, IntParameter, IStrategy +from pandas import DataFrame class adaptive_trend(IStrategy): diff --git a/strategy/crypto_factors_regression/beta_factors_model.ipynb b/strategy/crypto_factors_regression/beta_factors_model.ipynb index d76266f..a7041ed 100644 --- a/strategy/crypto_factors_regression/beta_factors_model.ipynb +++ b/strategy/crypto_factors_regression/beta_factors_model.ipynb @@ -8,18 +8,14 @@ "outputs": [], "source": [ "# Import libraries\n", - "import pandas as pd\n", + "import joblib\n", + "import matplotlib.pyplot as plt\n", "import numpy as np\n", + "import pandas as pd\n", "import yfinance as yf\n", - "from sklearn.model_selection import train_test_split\n", - "from sklearn.preprocessing import MinMaxScaler\n", - "from sklearn.linear_model import LinearRegression, Ridge, Lasso\n", - "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.linear_model import Ridge\n", "from sklearn.pipeline import Pipeline\n", - "from pycoingecko import CoinGeckoAPI\n", - "import joblib\n", - "\n", - "import matplotlib.pyplot as plt" + "from sklearn.preprocessing import StandardScaler" ] }, { @@ -817,7 +813,6 @@ } ], "source": [ - "import matplotlib.pyplot as plt\n", "\n", "equity = (1 + df[\"strat_ret_net\"].fillna(0)).cumprod()\n", "buyhold = (1 + df[\"ret\"].fillna(0)).cumprod()\n", diff --git a/strategy/crypto_factors_regression/beta_factors_model.py b/strategy/crypto_factors_regression/beta_factors_model.py index f467bfe..9bdf618 100644 --- a/strategy/crypto_factors_regression/beta_factors_model.py +++ b/strategy/crypto_factors_regression/beta_factors_model.py @@ -1,16 +1,16 @@ # --- Do not remove these libs --- -from freqtrade.strategy import IStrategy -from pandas import DataFrame -# -------------------------------- - -from freqtrade.strategy import (DecimalParameter) +from datetime import timedelta +from pathlib import Path -import pandas as pd -import numpy as np import joblib -from pathlib import Path -from datetime import timedelta +import numpy as np +import pandas as pd + +# -------------------------------- +from freqtrade.strategy import DecimalParameter, IStrategy +from pandas import DataFrame + class beta_factors_model(IStrategy): diff --git a/strategy/mlp_speculative_model/ml_utils/data_process.py b/strategy/mlp_speculative_model/ml_utils/data_process.py index 1acd57e..f006f09 100644 --- a/strategy/mlp_speculative_model/ml_utils/data_process.py +++ b/strategy/mlp_speculative_model/ml_utils/data_process.py @@ -1,7 +1,9 @@ +import numpy as np import pandas as pd -from strategy.mlp_speculative_model.ml_utils.technical_analysis_tool import TecnicalAnalysis from sklearn.preprocessing import StandardScaler -import numpy as np + +from strategy.mlp_speculative_model.ml_utils.technical_analysis_tool import TecnicalAnalysis + features = [ "z_score", "rsi", diff --git a/strategy/mlp_speculative_model/ml_utils/ensemble.py b/strategy/mlp_speculative_model/ml_utils/ensemble.py index d6c67dd..b7bba9d 100644 --- a/strategy/mlp_speculative_model/ml_utils/ensemble.py +++ b/strategy/mlp_speculative_model/ml_utils/ensemble.py @@ -1,11 +1,13 @@ import os + os.environ["CUDA_VISIBLE_DEVICES"] = "-1" BASE_DIR = os.path.dirname(os.path.abspath(__file__)) file_path = os.path.join(BASE_DIR, "..", "models", "model_final_5_2.h5") -from sklearn.preprocessing import StandardScaler -from tensorflow import keras # type: ignore import numpy as np +from sklearn.preprocessing import StandardScaler +from tensorflow import keras # type: ignore + class SimpleModel: def __init__(self, path): diff --git a/strategy/mlp_speculative_model/ml_utils/labelling_algorithm.py b/strategy/mlp_speculative_model/ml_utils/labelling_algorithm.py index 4ecb63b..070cdae 100644 --- a/strategy/mlp_speculative_model/ml_utils/labelling_algorithm.py +++ b/strategy/mlp_speculative_model/ml_utils/labelling_algorithm.py @@ -1,4 +1,5 @@ import pandas as pd + from strategy.mlp_speculative_model.ml_utils.technical_analysis_tool import TecnicalAnalysis BUY = -1 diff --git a/strategy/mlp_speculative_model/ml_utils/technical_analysis_tool.py b/strategy/mlp_speculative_model/ml_utils/technical_analysis_tool.py index 74d0904..647a13b 100644 --- a/strategy/mlp_speculative_model/ml_utils/technical_analysis_tool.py +++ b/strategy/mlp_speculative_model/ml_utils/technical_analysis_tool.py @@ -1,5 +1,5 @@ -import pandas as pd import numpy as np +import pandas as pd import talib as talib BUY = -1 @@ -12,7 +12,7 @@ class TecnicalAnalysis: @staticmethod def compute_oscillators(data): log_return = np.log(data['close']) - np.log(data['close'].shift(1)) - data['z_score'] = (((log_return - log_return.rolling(20).mean()) / log_return.rolling(20).std())) + data['z_score'] = ((log_return - log_return.rolling(20).mean()) / log_return.rolling(20).std()) data['rsi'] = ((talib.RSI(data['close'])) / 100) upper_band, _, lower_band = talib.BBANDS(data['close'], nbdevup=2, nbdevdn=2, matype=0) data['boll'] = ((data['close'] - lower_band) / (upper_band - lower_band)) diff --git a/tests/test_alpha.py b/tests/test_alpha.py index efdcdc6..abf8121 100644 --- a/tests/test_alpha.py +++ b/tests/test_alpha.py @@ -6,13 +6,14 @@ talib = pytest.importorskip("talib", reason="TA-Lib C library not installed") -from alpha.interface import IAlpha, AlphaEvaluator -from alpha.SimpleEmaFactors import EmaAlpha -from alpha.RsiAlpha import RsiAlpha -from alpha.MacdAlpha import MacdAlpha -from alpha.BollingerAlpha import BollingerAlpha from alpha.AutoregressionAlpha import AutoregressionAlpha -from alpha.EventLstmAlpha import EventLstmAlpha # type: ignore +from alpha.BollingerAlpha import BollingerAlpha +from alpha.EventLstmAlpha import EventLstmAlpha # type: ignore +from alpha.interface import AlphaEvaluator, IAlpha +from alpha.MacdAlpha import MacdAlpha +from alpha.RsiAlpha import RsiAlpha +from alpha.SimpleEmaFactors import EmaAlpha + def _make_ohlcv(n=100): """Create a minimal synthetic OHLCV DataFrame.""" diff --git a/tests/test_backtesting.py b/tests/test_backtesting.py index 2e6fcf2..f105301 100644 --- a/tests/test_backtesting.py +++ b/tests/test_backtesting.py @@ -11,8 +11,6 @@ - Backtest accounting (initial capital, PnL tracking) """ -import os -import sys import numpy as np import pandas as pd diff --git a/tests/test_data_integrity.py b/tests/test_data_integrity.py index f827e77..11e2632 100644 --- a/tests/test_data_integrity.py +++ b/tests/test_data_integrity.py @@ -1,7 +1,8 @@ """Tests for data file integrity — verifies feather files have correct schema.""" -import os import glob +import os + import pandas as pd import pytest diff --git a/tests/test_pipeline.py b/tests/test_pipeline.py index 761254f..7ef07dc 100644 --- a/tests/test_pipeline.py +++ b/tests/test_pipeline.py @@ -11,33 +11,37 @@ - Integrations """ -import pytest -import tempfile import json + +# Configure path +import sys +import tempfile from pathlib import Path -from unittest.mock import Mock, patch +from unittest.mock import patch -import pandas as pd import numpy as np +import pandas as pd +import pytest -# Configure path -import sys _PROJECT_ROOT = Path(__file__).parent.parent if str(_PROJECT_ROOT) not in sys.path: sys.path.insert(0, str(_PROJECT_ROOT)) from pipeline.config import ( - PipelineConfig, AlphaConfig, StrategyConfig, PortfolioConfig, - BacktestConfig, DataConfig, AlphaType, StrategyType, PortfolioAlgorithm, - PresetConfigs + AlphaConfig, + AlphaType, + BacktestConfig, + PipelineConfig, + PortfolioAlgorithm, + PortfolioConfig, + PresetConfigs, + StrategyConfig, + StrategyType, ) +from pipeline.integrations import FreqtradeIntegration, PipelineComparator from pipeline.orchestrator import PortfolioPipeline -from pipeline.verification import PipelineVerification, ValidationResult from pipeline.results import PipelineResult, StageOutput -from pipeline.integrations import ( - FreqtradeIntegration, BatchPipelineRunner, PipelineComparator -) - +from pipeline.verification import PipelineVerification, ValidationResult # ============================================================================ # FIXTURES diff --git a/tests/test_polymarket/test_contracts.py b/tests/test_polymarket/test_contracts.py index d7d5350..ba58bbe 100644 --- a/tests/test_polymarket/test_contracts.py +++ b/tests/test_polymarket/test_contracts.py @@ -1,6 +1,5 @@ """Tests for polymarket.contracts — metadata loading and normalisation.""" -import json import tempfile from pathlib import Path diff --git a/tests/test_polymarket/test_event_model.py b/tests/test_polymarket/test_event_model.py index f2cb1b1..92509db 100644 --- a/tests/test_polymarket/test_event_model.py +++ b/tests/test_polymarket/test_event_model.py @@ -9,6 +9,7 @@ import pandas as pd import pytest +from polymarket.event_dataset import build_training_samples from polymarket.event_features import ( ALL_FEATURE_COLS, BTC_FEATURE_COLS, @@ -18,7 +19,6 @@ add_contract_features, build_feature_matrix, ) -from polymarket.event_dataset import build_training_samples from polymarket.event_model import ( load_model, predict_contract_probs, @@ -26,7 +26,6 @@ train, ) - # --------------------------------------------------------------------------- # Fixtures # --------------------------------------------------------------------------- diff --git a/tests/test_polymarket/test_settlement.py b/tests/test_polymarket/test_settlement.py index 0b512c5..805085c 100644 --- a/tests/test_polymarket/test_settlement.py +++ b/tests/test_polymarket/test_settlement.py @@ -2,7 +2,6 @@ from pathlib import Path -import pandas as pd import pytest from polymarket.contracts import load_contracts @@ -97,7 +96,7 @@ def test_all_contracts_match(self, jan20_contracts, btc_df): assert len(results) == 12 failures = [r for r in results if not r["match"]] assert failures == [], ( - f"Settlement mismatches:\n" + + "Settlement mismatches:\n" + "\n".join(f" {r['slug']}: outcome={r['outcome_prices_settlement']}, " f"btc={r['btc_derived_settlement']}" for r in failures) ) diff --git a/tests/test_portfolio_management.py b/tests/test_portfolio_management.py index e9ac6d2..2c924b2 100644 --- a/tests/test_portfolio_management.py +++ b/tests/test_portfolio_management.py @@ -1,6 +1,7 @@ """Tests for the standalone portfolio pipeline (portfolio/PortfolioManagement.py).""" import os + import numpy as np import pandas as pd import pytest diff --git a/tests/test_workflow.py b/tests/test_workflow.py index 8c99036..16aea22 100644 --- a/tests/test_workflow.py +++ b/tests/test_workflow.py @@ -25,16 +25,13 @@ if os.path.isdir(_LUMIDSTACK) and _LUMIDSTACK not in sys.path: sys.path.insert(0, _LUMIDSTACK) +from adapters.portbench.runner import LocalWorkflowRunner from workflow.executor import ( - ALPHA_REGISTRY, - SIGNAL_DISPATCH, handle_alpha, handle_portfolio, handle_strategy, register_all_handlers, ) -from adapters.portbench.runner import LocalWorkflowRunner - # --------------------------------------------------------------------------- # Helpers diff --git a/user_data/run_custom.py b/user_data/run_custom.py index bc2ddc4..5cab98e 100644 --- a/user_data/run_custom.py +++ b/user_data/run_custom.py @@ -1,8 +1,7 @@ -import sys import ccxt import ccxt.async_support import ccxt.pro -from freqtrade.exchange.common import SUPPORTED_EXCHANGES, MAP_EXCHANGE_CHILDCLASS +from freqtrade.exchange.common import MAP_EXCHANGE_CHILDCLASS, SUPPORTED_EXCHANGES CUSTOM_EXCHANGES = ['portfoliobench', 'polymarket'] @@ -23,5 +22,6 @@ MAP_EXCHANGE_CHILDCLASS[name] = name from freqtrade.main import main + if __name__ == '__main__': main() \ No newline at end of file diff --git a/user_data/strategies/DualModelPolymarketPortfolio.py b/user_data/strategies/DualModelPolymarketPortfolio.py index 9baf17c..8b323f4 100644 --- a/user_data/strategies/DualModelPolymarketPortfolio.py +++ b/user_data/strategies/DualModelPolymarketPortfolio.py @@ -39,12 +39,11 @@ import json import logging -from datetime import datetime, timezone +from datetime import UTC, datetime from pathlib import Path from typing import Optional import pandas as pd - from freqtrade.persistence import Trade from freqtrade.strategy import IStrategy @@ -57,7 +56,7 @@ SETTLE_YES = 0.999 SETTLE_NO = 0.001 -UTC = timezone.utc +UTC = UTC class DualModelPolymarketPortfolio(IStrategy): diff --git a/user_data/strategies/ONS.py b/user_data/strategies/ONS.py index cb180a9..2327541 100644 --- a/user_data/strategies/ONS.py +++ b/user_data/strategies/ONS.py @@ -1,11 +1,12 @@ +import logging +from datetime import datetime +from typing import Optional + import numpy as np import pandas as pd -from scipy.optimize import minimize -from freqtrade.strategy import IStrategy from freqtrade.persistence import Trade -from datetime import datetime -from typing import Optional -import logging +from freqtrade.strategy import IStrategy +from scipy.optimize import minimize # Initialize the logger logger = logging.getLogger(__name__) diff --git a/user_data/strategies/best_single_asset.py b/user_data/strategies/best_single_asset.py index 0ac1104..e51b43d 100644 --- a/user_data/strategies/best_single_asset.py +++ b/user_data/strategies/best_single_asset.py @@ -1,6 +1,6 @@ +import pandas as pd from freqtrade.strategy import IStrategy from pandas import DataFrame -import pandas as pd class BestSingleAssetPortfolio(IStrategy): diff --git a/user_data/strategies/exp_gradient.py b/user_data/strategies/exp_gradient.py index e37034e..ce25b96 100644 --- a/user_data/strategies/exp_gradient.py +++ b/user_data/strategies/exp_gradient.py @@ -1,11 +1,12 @@ +import logging +from datetime import datetime +from typing import Optional + +import numpy as np +import pandas as pd from freqtrade.persistence.trade_model import Trade from freqtrade.strategy import IStrategy from pandas import DataFrame -import pandas as pd -import numpy as np -from datetime import datetime -from typing import Optional -import logging logger = logging.getLogger(__name__) diff --git a/user_data/strategies/inv_vol.py b/user_data/strategies/inv_vol.py index d46f4d5..5dc4375 100644 --- a/user_data/strategies/inv_vol.py +++ b/user_data/strategies/inv_vol.py @@ -1,11 +1,12 @@ +import logging +from datetime import datetime +from typing import Optional + +import numpy as np +import pandas as pd from freqtrade.persistence.trade_model import Trade from freqtrade.strategy import IStrategy from pandas import DataFrame -import pandas as pd -import numpy as np -from datetime import datetime -from typing import Optional -import logging logger = logging.getLogger(__name__) diff --git a/user_data/strategies/max_sharpe.py b/user_data/strategies/max_sharpe.py index 11a49cc..0fea72d 100644 --- a/user_data/strategies/max_sharpe.py +++ b/user_data/strategies/max_sharpe.py @@ -1,12 +1,13 @@ +import logging +from datetime import datetime +from typing import Optional + +import numpy as np +import pandas as pd from freqtrade.persistence.trade_model import Trade from freqtrade.strategy import IStrategy from pandas import DataFrame -import pandas as pd -import numpy as np -from datetime import datetime -from typing import Optional from scipy.optimize import minimize -import logging logger = logging.getLogger(__name__) diff --git a/user_data/strategies/min_var.py b/user_data/strategies/min_var.py index b731e8b..5682e65 100644 --- a/user_data/strategies/min_var.py +++ b/user_data/strategies/min_var.py @@ -1,11 +1,12 @@ +import logging +from datetime import datetime +from typing import Optional + +import numpy as np +import pandas as pd from freqtrade.persistence.trade_model import Trade from freqtrade.strategy import IStrategy from pandas import DataFrame -import pandas as pd -import numpy as np -from datetime import datetime -from typing import Optional -import logging logger = logging.getLogger(__name__) diff --git a/user_data/strategies/polymarket_portfolio.py b/user_data/strategies/polymarket_portfolio.py index fd00164..53285cf 100644 --- a/user_data/strategies/polymarket_portfolio.py +++ b/user_data/strategies/polymarket_portfolio.py @@ -13,13 +13,13 @@ and sizes positions based on perceived edge vs market price. """ -import pandas as pd +import logging from datetime import datetime from typing import Optional -import logging -from freqtrade.strategy import IStrategy +import pandas as pd from freqtrade.persistence import Trade +from freqtrade.strategy import IStrategy logger = logging.getLogger(__name__) diff --git a/user_data/strategies/risk_parity.py b/user_data/strategies/risk_parity.py index c1c40f2..df6f192 100644 --- a/user_data/strategies/risk_parity.py +++ b/user_data/strategies/risk_parity.py @@ -1,12 +1,13 @@ +import logging +from datetime import datetime +from typing import Optional + +import numpy as np +import pandas as pd from freqtrade.persistence.trade_model import Trade from freqtrade.strategy import IStrategy from pandas import DataFrame -import pandas as pd -import numpy as np -from datetime import datetime -from typing import Optional from scipy.optimize import minimize -import logging logger = logging.getLogger(__name__) diff --git a/utils/download_polymarket_data.py b/utils/download_polymarket_data.py index 7c6b15b..bd1a375 100644 --- a/utils/download_polymarket_data.py +++ b/utils/download_polymarket_data.py @@ -14,14 +14,10 @@ """ import argparse -import json import logging -import sys import time -from datetime import datetime, timezone from pathlib import Path -import numpy as np import pandas as pd try: diff --git a/utils/generate_polymarket_test_data.py b/utils/generate_polymarket_test_data.py index 8e5b357..5d02991 100644 --- a/utils/generate_polymarket_test_data.py +++ b/utils/generate_polymarket_test_data.py @@ -14,11 +14,11 @@ python utils/generate_polymarket_test_data.py """ -import numpy as np -import pandas as pd -from pathlib import Path from datetime import datetime +from pathlib import Path +import numpy as np +import pandas as pd # --------------------------------------------------------------------------- # Event definitions for synthetic data diff --git a/utils/generate_test_data.py b/utils/generate_test_data.py index e37225e..56ea8d1 100644 --- a/utils/generate_test_data.py +++ b/utils/generate_test_data.py @@ -15,11 +15,11 @@ portbench generate-data # via CLI (recommended) python utils/generate_test_data.py # or directly """ -import pandas as pd -import numpy as np -from pathlib import Path from datetime import datetime +from pathlib import Path +import numpy as np +import pandas as pd # All tickers tracked in the repo (119 instruments) CRYPTO_TICKERS = [ diff --git a/utils/test.py b/utils/test.py index e819fa1..045f52a 100644 --- a/utils/test.py +++ b/utils/test.py @@ -1,7 +1,7 @@ -from multiprocessing import Pool from freqtrade.commands.optimize_commands import setup_optimize_configuration -from freqtrade.optimize.backtesting import Backtesting from freqtrade.enums import RunMode +from freqtrade.optimize.backtesting import Backtesting + from strategy import strategy_list diff --git a/workflow/cli_workflow.py b/workflow/cli_workflow.py index da61978..4bc606c 100644 --- a/workflow/cli_workflow.py +++ b/workflow/cli_workflow.py @@ -76,12 +76,12 @@ def run_workflow_cli( Backtest metrics dictionary. """ from adapters.portbench.runner import LocalWorkflowRunner - from workflow.executor import register_all_handlers from portfolio.PortfolioManagement import ( - load_pair_data, backtest_portfolio, compute_metrics, + load_pair_data, ) + from workflow.executor import register_all_handlers path = Path(workflow_file) if not path.is_file(): diff --git a/workflow/executor.py b/workflow/executor.py index 79495ee..2641990 100644 --- a/workflow/executor.py +++ b/workflow/executor.py @@ -14,9 +14,8 @@ def handler(stage_name: str, params: dict, context: dict) -> dict import os import sys -from typing import Any, Dict, List +from typing import Any, Dict -import numpy as np import pandas as pd # --------------------------------------------------------------------------- @@ -29,21 +28,17 @@ def handler(stage_name: str, params: dict, context: dict) -> dict if os.path.isdir(os.path.join(_FT_ROOT, "freqtrade")) and _FT_ROOT not in sys.path: sys.path.insert(0, _FT_ROOT) -from alpha.SimpleEmaFactors import EmaAlpha # noqa: E402 -from alpha.RsiAlpha import RsiAlpha # noqa: E402 -from alpha.MacdAlpha import MacdAlpha # noqa: E402 from alpha.BollingerAlpha import BollingerAlpha # noqa: E402 - +from alpha.MacdAlpha import MacdAlpha # noqa: E402 +from alpha.RsiAlpha import RsiAlpha # noqa: E402 +from alpha.SimpleEmaFactors import EmaAlpha # noqa: E402 from portfolio.PortfolioManagement import ( # noqa: E402 - load_pair_data, align_close_prices, - ema_cross_signals, + blend_strategy_weights, build_ema_position_series, calculate_ons_weights, + ema_cross_signals, equal_weight_allocation, - blend_strategy_weights, - backtest_portfolio, - compute_metrics, ) # ---------------------------------------------------------------------------