Trading-Bot-M20 / tests /conftest.py
raghava4u's picture
Upload folder using huggingface_hub
d53dc44 verified
Raw History Blame Contribute Delete
4.04 kB
"""
tests/conftest.py — Shared fixtures for pytest.
"""
from __future__ import annotations
import datetime
import os
import sys
from pathlib import Path
import numpy as np
import pandas as pd
import pytest
# Ensure project root on path
ROOT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(ROOT))
# Force DRY_RUN for all tests
os.environ.setdefault("DRY_RUN", "true")
os.environ.setdefault("TRADING_MODE", "paper")
os.environ.setdefault("ALPACA_API_KEY", "test_key")
os.environ.setdefault("ALPACA_SECRET_KEY", "test_secret")
os.environ.setdefault("ALPACA_BASE_URL", "https://paper-api.alpaca.markets")
os.environ.setdefault("TELEGRAM_BOT_TOKEN", "000:TEST")
os.environ.setdefault("TELEGRAM_CHAT_ID", "0")
os.environ.setdefault("NEWS_API_KEY", "testkey")
os.environ.setdefault("UNIVERSE", "AAPL,MSFT,NVDA")
os.environ.setdefault("ENV_SCHEMA_VERSION", "2")
os.environ.setdefault("GPU_AVAILABLE", "false")
os.environ.setdefault("ALLOW_SHORT", "true")
os.environ.setdefault("ACCOUNT_BALANCE_ABOVE_25K", "true")
os.environ.setdefault("ALPACA_ACCOUNT_TYPE", "margin")
os.environ.setdefault("ALLOW_OVERNIGHT_POSITIONS", "false")
os.environ.setdefault("DB_BACKEND", "sqlite")
@pytest.fixture
def sample_5m_bars():
"""Generate 200 rows of realistic 5-minute bar data."""
np.random.seed(42)
n = 200
base = 150.0
timestamps = pd.date_range(
start="2024-06-01 09:30",
periods=n,
freq="5min",
tz="US/Eastern",
)
close = base + np.cumsum(np.random.randn(n) * 0.3)
high = close + np.abs(np.random.randn(n) * 0.2)
low = close - np.abs(np.random.randn(n) * 0.2)
open_ = close + np.random.randn(n) * 0.1
volume = np.random.randint(10000, 100000, n).astype(float)
vwap = (high + low + close) / 3.0
trade_count = np.random.randint(50, 500, n).astype(float)
df = pd.DataFrame({
"timestamp": timestamps,
"open": open_,
"high": high,
"low": low,
"close": close,
"volume": volume,
"vwap": vwap,
"trade_count": trade_count,
})
return df
@pytest.fixture
def sample_1h_bars():
"""Generate 100 rows of hourly bar data."""
np.random.seed(99)
n = 100
base = 150.0
timestamps = pd.date_range(
start="2024-05-01 09:30",
periods=n,
freq="1h",
tz="US/Eastern",
)
close = base + np.cumsum(np.random.randn(n) * 0.5)
high = close + np.abs(np.random.randn(n) * 0.3)
low = close - np.abs(np.random.randn(n) * 0.3)
open_ = close + np.random.randn(n) * 0.15
volume = np.random.randint(50000, 500000, n).astype(float)
vwap = (high + low + close) / 3.0
trade_count = np.random.randint(200, 2000, n).astype(float)
df = pd.DataFrame({
"timestamp": timestamps,
"open": open_,
"high": high,
"low": low,
"close": close,
"volume": volume,
"vwap": vwap,
"trade_count": trade_count,
})
return df
@pytest.fixture
def sample_1d_bars():
"""Generate 252 rows of daily bar data (1 year)."""
np.random.seed(7)
n = 252
base = 150.0
timestamps = pd.bdate_range(
start="2024-01-01",
periods=n,
)
timestamps = timestamps.tz_localize("US/Eastern")
close = base + np.cumsum(np.random.randn(n) * 1.5)
high = close + np.abs(np.random.randn(n) * 1.0)
low = close - np.abs(np.random.randn(n) * 1.0)
open_ = close + np.random.randn(n) * 0.5
volume = np.random.randint(1_000_000, 10_000_000, n).astype(float)
vwap = (high + low + close) / 3.0
trade_count = np.random.randint(1000, 10000, n).astype(float)
df = pd.DataFrame({
"timestamp": timestamps,
"open": open_,
"high": high,
"low": low,
"close": close,
"volume": volume,
"vwap": vwap,
"trade_count": trade_count,
})
return df