SPB Git forge
1commits 1branches 0releases
189.0 KBsize
maindefault branch
4 h agolast push
Python 54.7% TypeScript 42.5% SQL 1.9%
1.2 KB · 29 lines python
Raw Blame History
1import os23import numpy as np4import pandas as pd5import pytest67os.environ.setdefault("KTRADE_DATABASE_URL", "postgresql://ktrade:ktrade@127.0.0.1:5432/ktrade_test")8os.environ.setdefault("KTRADE_REDIS_URL", "redis://127.0.0.1:6379/15")9os.environ.setdefault("KTRADE_SECRET_KEY", "test-secret")10os.environ.setdefault("KTRADE_LOG_JSON", "false")111213def synthetic_candles(n: int = 2000, seed: int = 1, interval_min: int = 60, start_ts: int = 1_700_000_000, drift: float = 0.0002, vol: float = 0.01) -> pd.DataFrame:14    rng = np.random.default_rng(seed)15    r = rng.normal(drift, vol, n)16    close = 30000 * np.exp(np.cumsum(r))17    open_ = np.concatenate([[close[0]], close[:-1]]) * (1 + rng.normal(0, 0.0005, n))18    high = np.maximum(open_, close) * (1 + np.abs(rng.normal(0, 0.002, n)))19    low = np.minimum(open_, close) * (1 - np.abs(rng.normal(0, 0.002, n)))20    vol_ = np.abs(rng.normal(50, 10, n))21    df = pd.DataFrame({"ts": start_ts + np.arange(n) * interval_min * 60, "open": open_, "high": high, "low": low, "close": close, "vwap": (high + low + close) / 3, "volume": vol_, "count": rng.integers(10, 500, n)})22    df.attrs["interval_min"] = interval_min23    return df242526@pytest.fixture27def candles() -> pd.DataFrame:28    return synthetic_candles()29