Files
crypto_trader/tests/fixtures/sample_data.py

82 lines
1.9 KiB
Python
Raw Normal View History

"""Sample data generators for testing."""
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
from faker import Faker
fake = Faker()
def generate_ohlcv_data(
symbol: str = "BTC/USD",
periods: int = 100,
start_price: float = 50000.0,
timeframe: str = "1h"
) -> pd.DataFrame:
"""Generate sample OHLCV data.
Args:
symbol: Trading pair
periods: Number of periods
start_price: Starting price
timeframe: Data timeframe
Returns:
DataFrame with OHLCV data
"""
dates = pd.date_range(
start=datetime.now() - timedelta(hours=periods),
periods=periods,
freq=timeframe
)
# Generate realistic price movement
prices = [start_price]
for i in range(1, periods):
change = np.random.randn() * 0.02 # 2% volatility
prices.append(prices[-1] * (1 + change))
return pd.DataFrame({
'timestamp': dates,
'open': prices,
'high': [p * 1.01 for p in prices],
'low': [p * 0.99 for p in prices],
'close': prices,
'volume': [1000.0 + np.random.randn() * 100 for _ in range(periods)]
})
def generate_trade_data(
symbol: str = "BTC/USD",
count: int = 10
) -> list:
"""Generate sample trade data.
Args:
symbol: Trading pair
count: Number of trades
Returns:
List of trade dictionaries
"""
trades = []
base_price = 50000.0
for i in range(count):
trades.append({
'order_id': f'trade_{i}',
'symbol': symbol,
'side': 'buy' if i % 2 == 0 else 'sell',
'type': 'market',
'price': base_price + np.random.randn() * 100,
'amount': 0.01,
'cost': 500.0,
'fee': 0.5,
'status': 'filled',
'timestamp': datetime.now() - timedelta(hours=count-i)
})
return trades