feat: add OI long-term collection script for cron-based data accumulation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
21in7
2026-03-04 20:24:14 +09:00
parent 448b3e016b
commit f2303e1863

64
scripts/collect_oi.py Normal file
View File

@@ -0,0 +1,64 @@
"""
OI 장기 수집 스크립트.
15분마다 cron 실행하여 Binance OI를 data/oi_history.parquet에 누적한다.
사용법:
python scripts/collect_oi.py
python scripts/collect_oi.py --symbol XRPUSDT
crontab 예시:
*/15 * * * * cd /path/to/cointrader && .venv/bin/python scripts/collect_oi.py >> logs/collect_oi.log 2>&1
"""
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
import argparse
from datetime import datetime, timezone
import pandas as pd
from binance.client import Client
from dotenv import load_dotenv
import os
load_dotenv()
OI_PATH = Path("data/oi_history.parquet")
def collect(symbol: str = "XRPUSDT"):
client = Client(
api_key=os.getenv("BINANCE_API_KEY", ""),
api_secret=os.getenv("BINANCE_API_SECRET", ""),
)
result = client.futures_open_interest(symbol=symbol)
oi_value = float(result["openInterest"])
ts = datetime.now(timezone.utc)
new_row = pd.DataFrame([{
"timestamp": ts,
"symbol": symbol,
"open_interest": oi_value,
}])
if OI_PATH.exists():
existing = pd.read_parquet(OI_PATH)
combined = pd.concat([existing, new_row], ignore_index=True)
else:
OI_PATH.parent.mkdir(parents=True, exist_ok=True)
combined = new_row
combined.to_parquet(OI_PATH, index=False)
print(f"[{ts.isoformat()}] OI={oi_value:.2f}{OI_PATH}")
def main():
parser = argparse.ArgumentParser(description="OI 장기 수집")
parser.add_argument("--symbol", default="XRPUSDT")
args = parser.parse_args()
collect(symbol=args.symbol)
if __name__ == "__main__":
main()