Marketmind / run_simulation.py
ARKAISW's picture
Fix: Force Python 3.11 and Gradio 5.x to resolve audioop error on HF
92bf44e
"""
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()