File size: 2,580 Bytes
10150dc 92bf44e 10150dc 92bf44e 10150dc | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | """
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()
|