export_freqtrade_data.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from __future__ import annotations
  2. import argparse
  3. import json
  4. import sys
  5. from pathlib import Path
  6. ROOT_DIR = Path(__file__).resolve().parents[1]
  7. if str(ROOT_DIR) not in sys.path:
  8. sys.path.insert(0, str(ROOT_DIR))
  9. from scripts.explore_ultrashort import CANDLE_CACHE_DIR, load_cached_candles
  10. PAIR_FILENAMES = {
  11. "BTC-USDT-SWAP": "BTC_USDT_USDT",
  12. "ETH-USDT-SWAP": "ETH_USDT_USDT",
  13. }
  14. def export_ohlcv_json(*, symbol: str, bar: str, output_dir: Path, cache_dir: Path = CANDLE_CACHE_DIR) -> Path:
  15. candles, _ = load_cached_candles(cache_dir, symbol, bar)
  16. if not candles:
  17. raise RuntimeError(f"missing cached candles: {symbol} {bar}")
  18. output_dir.mkdir(parents=True, exist_ok=True)
  19. output_file = output_dir / f"{PAIR_FILENAMES[symbol]}-{bar}-futures.json"
  20. rows = [
  21. [candle.ts, candle.open, candle.high, candle.low, candle.close, candle.volume]
  22. for candle in candles
  23. ]
  24. output_file.write_text(json.dumps(rows, separators=(",", ":")), encoding="utf-8")
  25. return output_file
  26. def main() -> int:
  27. parser = argparse.ArgumentParser()
  28. parser.add_argument("--symbol", choices=tuple(PAIR_FILENAMES), default="BTC-USDT-SWAP")
  29. parser.add_argument("--bar", default="15m")
  30. parser.add_argument("--cache-dir", type=Path, default=CANDLE_CACHE_DIR)
  31. parser.add_argument("--output-dir", type=Path, default=Path("freqtrade/user_data/data/okx/futures"))
  32. args = parser.parse_args()
  33. output_file = export_ohlcv_json(
  34. symbol=args.symbol,
  35. bar=args.bar,
  36. cache_dir=args.cache_dir,
  37. output_dir=args.output_dir,
  38. )
  39. print(output_file)
  40. return 0
  41. if __name__ == "__main__":
  42. raise SystemExit(main())