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 from __future__ import annotations
import argparse import argparse
import importlib.resources
import time import time
from dataclasses import dataclass from dataclasses import dataclass
from datetime import UTC, datetime, timedelta 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.cerbero.client import CerberoClient
from multi_swarm_core.config import load_settings from multi_swarm_core.config import load_settings
from multi_swarm_core.data.cerbero_ohlcv import CerberoOHLCVLoader, OHLCVRequest from multi_swarm_core.data.cerbero_ohlcv import CerberoOHLCVLoader, OHLCVRequest
from multi_swarm_core.paper_trading.executor import PaperExecutor from strategy_crypto.backend import PaperExecutor, PaperRepository, Portfolio
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
PROJECT_ROOT = Path(__file__).resolve().parent.parent 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) @dataclass(frozen=True)
class AssetConfig: class AssetConfig:
symbol: str # es. "BTC-PERPETUAL" 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("--lookback-bars", type=int, default=500, help="Quante bar fetchare per indicatori")
p.add_argument( p.add_argument(
"--strategies-dir", "--strategies-dir",
default=str(PROJECT_ROOT / "strategies"), default=str(_default_strategies_dir()),
help="Cartella contenente btc_*.json e eth_*.json", help="Cartella contenente btc_*.json e eth_*.json (default: package strategy_crypto/strategies)",
) )
return p.parse_args() return p.parse_args()
@@ -77,9 +80,6 @@ def main() -> None:
args = parse_args() args = parse_args()
settings = load_settings() settings = load_settings()
# Inizializza schema (idempotente).
Repository(settings.db_path).init_schema()
token = ( token = (
settings.cerbero_mainnet_token.get_secret_value() settings.cerbero_mainnet_token.get_secret_value()
if settings.cerbero_mainnet_token if settings.cerbero_mainnet_token
@@ -105,7 +105,8 @@ def main() -> None:
fees_bp=args.fees_bp, fees_bp=args.fees_bp,
n_sleeves=len(assets), n_sleeves=len(assets),
) )
repo = PaperRepository(settings.db_path) repo = PaperRepository(settings.strategy_crypto_db_path)
repo.init_schema()
config = { config = {
"assets": [ "assets": [
{"symbol": a.symbol, "strategy": a.strategy_file.name, "exchange": a.exchange} {"symbol": a.symbol, "strategy": a.strategy_file.name, "exchange": a.exchange}