Aller au contenu

Accueil

Framework DeFi de production pour les Quants

PyPI version Python 3.12+ License: Apache-2.0 Discord Twitter

English | 中文 | Français | Español


Le SDK Almanak fournit un framework complet pour le développement, le test et le déploiement d'agents DeFi autonomes. Construit sur une architecture basée sur les intentions, les stratégies sont exprimées sous forme d'intentions de haut niveau avec un minimum de code.

Fonctionnalités

  • Architecture basée sur les intentions - Exprimez votre logique de trading sous forme d'intentions de haut niveau (Swap, LP, Borrow, etc.). Le framework gère la compilation et l'exécution.
  • Gestion d'état à trois niveaux - Persistance automatique avec les niveaux HOT/WARM/COLD pour la fiabilité.
  • Backtesting complet - Simulation PnL, paper trading sur des forks Anvil et balayage de paramètres.
  • Support multi-chaînes - Ethereum, Arbitrum, Optimism, Base, Avalanche, Polygon, BSC, Sonic, Plasma, Blast, Mantle, Berachain, et plus encore.
  • Intégration de protocoles - Uniswap V3, Aave V3, Morpho Blue, GMX V2, Pendle, Polymarket, Kraken, et plus encore.
  • Conception non-custodiale - Contrôle total de vos fonds via des comptes intelligents Safe.
  • Prêt pour la production - Alertes intégrées, détection de blocage, gestion d'urgence et déploiements canari.

Installation

pip install almanak

Le test sur fork Anvil (ci-dessous) nécessite Foundry :

curl -L https://foundry.paradigm.xyz | bash
foundryup

Démarrage rapide

# Créer une nouvelle stratégie à partir d'un modèle
almanak strat new

# L'exécuter sur un fork Anvil local -- pas besoin de portefeuille ni de clés API
cd my_strategy
almanak strat run --network anvil --once

Le test sur fork Anvil est le point de départ recommandé. Le SDK démarre automatiquement un fork local, utilise un portefeuille pré-financé par défaut, et exécute votre stratégie sans aucune configuration. Consultez Premiers pas pour le guide complet.

Écrire une stratégie

Les stratégies implémentent la méthode decide(), qui reçoit un MarketSnapshot et retourne un Intent (ou None pour passer le cycle) :

from decimal import Decimal
from almanak.framework.intents import Intent
from almanak.framework.strategies import IntentStrategy, MarketSnapshot

class MyStrategy(IntentStrategy):
    """Une stratégie simple de retour à la moyenne."""

    def decide(self, market: MarketSnapshot) -> Intent | None:
        eth_price = market.price("ETH")
        usdc = market.balance("USDC")

        if eth_price < Decimal("2000") and usdc.balance_usd > Decimal("500"):
            return Intent.swap(
                from_token="USDC",
                to_token="ETH",
                amount_usd=Decimal("500"),
            )
        return Intent.hold(reason="En attente de meilleures conditions")

Architecture

almanak/
  framework/           # Framework de stratégie V2
    strategies/        # Classe de base IntentStrategy
    intents/           # Vocabulaire d'intentions et compilateur
    state/             # Gestion d'état à trois niveaux
    execution/         # Orchestration des transactions
    backtesting/       # PnL, paper trading, balayage de paramètres
    connectors/        # Adaptateurs de protocoles
    data/              # Oracles de prix, indicateurs
    alerting/          # Notifications Slack/Telegram
    services/          # Détection de blocage, gestion d'urgence
  gateway/             # Sidecar gRPC de la passerelle
  transaction_builder/ # Construction de transactions bas niveau
  core/                # Énumérations, modèles, utilitaires
  cli/                 # Interface en ligne de commande

Toutes les stratégies s'exécutent à travers une architecture passerelle exclusive pour la sécurité. Le sidecar passerelle détient tous les secrets et expose une API gRPC contrôlée. Les conteneurs de stratégie n'ont pas de secrets et pas d'accès direct à Internet.

Retours et demandes de fonctionnalités

Vous avez une idée, trouvé un bug ou souhaitez demander une fonctionnalité ? Rendez-vous sur notre Discord et publiez dans le canal approprié. Nous surveillons activement les retours et les utilisons pour façonner la feuille de route du SDK.

Prochaines étapes