| """ |
| MarketMind — Entry Point. |
| |
| Run a multi-agent market simulation. |
| |
| Usage: |
| python run_simulation.py # offline mode, 100 ticks |
| python run_simulation.py --ticks 200 # offline, 200 ticks |
| python run_simulation.py --llm # vLLM mode (requires server running) |
| python run_simulation.py --llm --url http://host:8000/v1 |
| """ |
|
|
| import argparse |
| import sys |
|
|
| from engine.simulation import SimulationEngine, SimulationConfig |
| from agents.momentum_agent import MomentumAgent |
| from agents.mean_reversion_agent import MeanReversionAgent |
| from agents.fundamental_agent import FundamentalAgent |
| from agents.market_maker_agent import MarketMakerAgent |
| from agents.noise_trader import NoiseTrader |
|
|
|
|
| def build_default_agents() -> list: |
| """ |
| Default agent composition: the baseline 5-agent mix. |
| Per spec Experiment A: 2 momentum + 1 mean-reversion + 1 fundamental + 1 noise. |
| Plus 1 market maker for liquidity. |
| """ |
| return [ |
| MomentumAgent("momentum_1"), |
| MomentumAgent("momentum_2"), |
| MeanReversionAgent("meanrev_1"), |
| FundamentalAgent("fundamental_1", fair_value=100.0), |
| MarketMakerAgent("marketmaker_1"), |
| NoiseTrader("noise_1"), |
| ] |
|
|
|
|
| def main(): |
| parser = argparse.ArgumentParser(description="MarketMind Simulation") |
| parser.add_argument("--ticks", type=int, default=100, help="Number of simulation ticks") |
| parser.add_argument("--price", type=float, default=100.0, help="Initial price") |
| parser.add_argument("--llm", action="store_true", help="Use vLLM inference (requires server)") |
| parser.add_argument("--url", type=str, default="http://localhost:8000/v1", help="vLLM server URL") |
| parser.add_argument("--model", type=str, default="Qwen/Qwen2.5-7B-Instruct", help="Model name") |
| parser.add_argument("--api-key", type=str, default="EMPTY", help="API Key for Hugging Face Serverless or other secured endpoints") |
| parser.add_argument("--output", type=str, default="output", help="Output directory for CSVs") |
| parser.add_argument("--seed", type=int, default=42, help="Random seed for reproducibility") |
| args = parser.parse_args() |
|
|
| config = SimulationConfig( |
| num_ticks=args.ticks, |
| initial_price=args.price, |
| use_llm=args.llm, |
| vllm_base_url=args.url, |
| vllm_model=args.model, |
| vllm_api_key=args.api_key, |
| output_dir=args.output, |
| seed=args.seed, |
| ) |
|
|
| agents = build_default_agents() |
|
|
| engine = SimulationEngine(agents, config) |
| engine.run() |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|