spb/crypto-trade-bot
Public
Python 54.7%
TypeScript 42.5%
SQL 1.9%
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