refactor(strategies): move JSON freezate sotto strategy_crypto + patch runner

- git mv strategies/{btc,eth}_*.json → src/strategy_crypto/strategy_crypto/strategies/
- Cancellata directory root strategies/ (ora package data del member strategy_crypto)
- I JSON sono inclusi nella wheel via force-include nel pyproject del member
- scripts/run_paper_trading.py:
  * Import paper_trading.* → strategy_crypto.backend
  * Default --strategies-dir letto da importlib.resources.files('strategy_crypto') / 'strategies'
  * PaperRepository(settings.strategy_crypto_db_path) + init_schema()
  * Rimosso Repository(settings.db_path).init_schema() (GA init non e' responsabilita' del paper)
- Verifica: importlib.resources trova i 2 JSON nel package

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Adriano Dal Pastro
2026-05-15 17:58:03 +00:00
parent 37bf64012b
commit 2b5da4d1fc
3 changed files with 11 additions and 10 deletions
+11 -10
View File
@@ -20,6 +20,7 @@ Esempio:
from __future__ import annotations
import argparse
import importlib.resources
import time
from dataclasses import dataclass
from datetime import UTC, datetime, timedelta
@@ -28,14 +29,16 @@ from pathlib import Path
from multi_swarm_core.cerbero.client import CerberoClient
from multi_swarm_core.config import load_settings
from multi_swarm_core.data.cerbero_ohlcv import CerberoOHLCVLoader, OHLCVRequest
from multi_swarm_core.paper_trading.executor import PaperExecutor
from multi_swarm_core.paper_trading.persistence import PaperRepository
from multi_swarm_core.paper_trading.portfolio import Portfolio
from multi_swarm_core.persistence.repository import Repository
from strategy_crypto.backend import PaperExecutor, PaperRepository, Portfolio
PROJECT_ROOT = Path(__file__).resolve().parent.parent
def _default_strategies_dir() -> Path:
"""Cartella JSON shippata col package strategy_crypto."""
return Path(str(importlib.resources.files("strategy_crypto") / "strategies"))
@dataclass(frozen=True)
class AssetConfig:
symbol: str # es. "BTC-PERPETUAL"
@@ -54,8 +57,8 @@ def parse_args() -> argparse.Namespace:
p.add_argument("--lookback-bars", type=int, default=500, help="Quante bar fetchare per indicatori")
p.add_argument(
"--strategies-dir",
default=str(PROJECT_ROOT / "strategies"),
help="Cartella contenente btc_*.json e eth_*.json",
default=str(_default_strategies_dir()),
help="Cartella contenente btc_*.json e eth_*.json (default: package strategy_crypto/strategies)",
)
return p.parse_args()
@@ -77,9 +80,6 @@ def main() -> None:
args = parse_args()
settings = load_settings()
# Inizializza schema (idempotente).
Repository(settings.db_path).init_schema()
token = (
settings.cerbero_mainnet_token.get_secret_value()
if settings.cerbero_mainnet_token
@@ -105,7 +105,8 @@ def main() -> None:
fees_bp=args.fees_bp,
n_sleeves=len(assets),
)
repo = PaperRepository(settings.db_path)
repo = PaperRepository(settings.strategy_crypto_db_path)
repo.init_schema()
config = {
"assets": [
{"symbol": a.symbol, "strategy": a.strategy_file.name, "exchange": a.exchange}