63 lines
2.0 KiB
Python
63 lines
2.0 KiB
Python
from __future__ import annotations
|
|
|
|
import argparse
|
|
import asyncio
|
|
import logging
|
|
import os
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
PACKAGE_PARENT = Path(__file__).resolve().parents[2]
|
|
if str(PACKAGE_PARENT) not in sys.path:
|
|
sys.path.insert(0, str(PACKAGE_PARENT))
|
|
|
|
from strategy32.live.env import load_dotenv
|
|
from strategy32.live.runtime import run_monitor
|
|
|
|
|
|
def _default_env_candidates() -> list[Path]:
|
|
return [
|
|
Path(__file__).resolve().parents[1] / ".env",
|
|
Path("/Volumes/SSD/workspace/money-bot/strategy11/.env"),
|
|
Path("/Volumes/SSD/workspace/money-bot/strategy7/engine_a_mm/.env"),
|
|
Path("/Volumes/SSD/workspace/money-bot/strategy7/engine_aa_mm/.env"),
|
|
]
|
|
|
|
|
|
def parse_args() -> argparse.Namespace:
|
|
parser = argparse.ArgumentParser(description="Run Strategy32 live paper/advisory monitor")
|
|
parser.add_argument("--once", action="store_true", help="Run one cycle and exit")
|
|
parser.add_argument("--runtime-dir", type=str, default=os.getenv("STRATEGY32_RUNTIME_DIR", "runtime"))
|
|
parser.add_argument("--env-file", type=str, default="")
|
|
parser.add_argument("--log-level", type=str, default=os.getenv("STRATEGY32_LOG_LEVEL", "INFO"))
|
|
return parser.parse_args()
|
|
|
|
|
|
def main() -> None:
|
|
args = parse_args()
|
|
if args.env_file:
|
|
load_dotenv(args.env_file)
|
|
else:
|
|
for env_path in _default_env_candidates():
|
|
if env_path.exists():
|
|
load_dotenv(env_path)
|
|
break
|
|
|
|
runtime_dir = Path(args.runtime_dir)
|
|
runtime_dir.mkdir(parents=True, exist_ok=True)
|
|
handlers: list[logging.Handler] = [
|
|
logging.StreamHandler(),
|
|
logging.FileHandler(runtime_dir / "strategy32_live.log", encoding="utf-8"),
|
|
]
|
|
logging.basicConfig(
|
|
level=getattr(logging, args.log_level.upper(), logging.INFO),
|
|
format="%(asctime)s %(levelname)-5s %(name)s %(message)s",
|
|
datefmt="%Y-%m-%d %H:%M:%S",
|
|
handlers=handlers,
|
|
)
|
|
asyncio.run(run_monitor(once=args.once, runtime_dir=args.runtime_dir))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|