nqs_sdk.core.simulation module¶
- class nqs_sdk.core.simulation.Simulation(protocols, config, namespace=None)[source]¶
Bases:
object
Main orchestrator for running simulations.
This class serves as the primary interface for users to configure, build, and execute simulations involving multiple DeFi protocols. It handles the coordination between protocol factories, configuration loading, and simulation execution.
Protocols and configuration are provided during initialization, and the simulation can be run multiple times with different parameters.
- protocols¶
List of protocol factories or protocol factory adapters that define the DeFi protocols to simulate
- config¶
Configuration data (file path, dict, or YAML/JSON content)
- simulator¶
Internal rust-based simulator instance (built lazily)
- __init__(protocols, config, namespace=None)[source]¶
Initialize a new simulation with specified protocols and configuration.
- Parameters:
protocols (
Union
[ProtocolFactory
,ProtocolFactoryAdapter
,List
[ProtocolFactory
|ProtocolFactoryAdapter
]]) – Single ProtocolFactory or ProtocolFactoryAdapter, or list of ProtocolFactorys or ProtocolFactoryAdapters defining the protocols to include in the simulationconfig (
Union
[str
,dict
,Path
]) – Configuration for the simulation. Can be: - Path to a YAML/JSON configuration file - Dictionary containing configuration parameters - String containing YAML/JSON configuration content
Example
>>> from nqs_sdk import Simulation >>> from nqs_sdk.protocols import UniswapV3Factory >>> from nqs_sdk_extension.protocols import CompoundV2Factory >>> uniswap = UniswapV3Factory() >>> compound = CompoundV2Factory() >>> sim = Simulation([uniswap, compound], "config.yaml")
- get_protocol(protocol_id)[source]¶
Retrieve a protocol instance by its identifier.
- Parameters:
protocol_id (
str
) – Unique identifier for the protocol (e.g., “uniswap_v3”)- Return type:
Any
- Returns:
The protocol instance corresponding to the given ID
- Raises:
RuntimeError – If simulation hasn’t been built yet
KeyError – If protocol_id doesn’t exist in the simulation
Example
>>> uniswap_protocol = sim.get_protocol("uniswap_v3") >>> current_price = uniswap_protocol.get_current_price()
- run()[source]¶
Execute the simulation and return results.
This method runs the entire simulation from start to end block/timestamp, processing all transactions and collecting metrics along the way.
- Returns:
- Object containing all simulation data including:
Protocol states at each block
Agent portfolio values over time
Transaction logs and fees
Observable metrics and KPIs
- Return type:
SimulationResults
- Raises:
RuntimeError – If simulation hasn’t been built yet
Example
>>> results = sim.run() >>> portfolio_value = results.get_agent_metric("alice", "total_holding")