from __future__ import annotations import argparse import json import sys from pathlib import Path ROOT_DIR = Path(__file__).resolve().parents[1] if str(ROOT_DIR) not in sys.path: sys.path.insert(0, str(ROOT_DIR)) from scripts.explore_ultrashort import CANDLE_CACHE_DIR, load_cached_candles PAIR_FILENAMES = { "BTC-USDT-SWAP": "BTC_USDT_USDT", "ETH-USDT-SWAP": "ETH_USDT_USDT", } def export_ohlcv_json(*, symbol: str, bar: str, output_dir: Path, cache_dir: Path = CANDLE_CACHE_DIR) -> Path: candles, _ = load_cached_candles(cache_dir, symbol, bar) if not candles: raise RuntimeError(f"missing cached candles: {symbol} {bar}") output_dir.mkdir(parents=True, exist_ok=True) output_file = output_dir / f"{PAIR_FILENAMES[symbol]}-{bar}-futures.json" rows = [ [candle.ts, candle.open, candle.high, candle.low, candle.close, candle.volume] for candle in candles ] output_file.write_text(json.dumps(rows, separators=(",", ":")), encoding="utf-8") return output_file def main() -> int: parser = argparse.ArgumentParser() parser.add_argument("--symbol", choices=tuple(PAIR_FILENAMES), default="BTC-USDT-SWAP") parser.add_argument("--bar", default="15m") parser.add_argument("--cache-dir", type=Path, default=CANDLE_CACHE_DIR) parser.add_argument("--output-dir", type=Path, default=Path("freqtrade/user_data/data/okx/futures")) args = parser.parse_args() output_file = export_ohlcv_json( symbol=args.symbol, bar=args.bar, cache_dir=args.cache_dir, output_dir=args.output_dir, ) print(output_file) return 0 if __name__ == "__main__": raise SystemExit(main())