Local changes: Updated model training, removed debug instrumentation, and configuration improvements

This commit is contained in:
kfox
2025-12-26 01:15:43 -05:00
commit cc60da49e7
388 changed files with 57127 additions and 0 deletions

2
tests/fixtures/__init__.py vendored Normal file
View File

@@ -0,0 +1,2 @@
"""Test fixtures and mocks."""

76
tests/fixtures/mock_exchange.py vendored Normal file
View File

@@ -0,0 +1,76 @@
"""Mock exchange adapter for testing."""
from unittest.mock import Mock, AsyncMock
from src.exchanges.base import BaseExchange
class MockExchange(BaseExchange):
"""Mock exchange adapter for testing."""
def __init__(self, name: str = "mock_exchange", **kwargs):
super().__init__(name, "mock_key", "mock_secret")
self.is_connected = True
self._mock_responses = {}
async def connect(self):
"""Mock connection."""
self.is_connected = True
async def disconnect(self):
"""Mock disconnection."""
self.is_connected = False
async def fetch_balance(self):
"""Mock balance fetch."""
return self._mock_responses.get('balance', {
'USD': {'free': 1000.0, 'used': 0.0, 'total': 1000.0}
})
async def place_order(self, symbol, side, order_type, amount, price=None, params=None):
"""Mock order placement."""
return self._mock_responses.get('order', {
'id': 'mock_order_123',
'status': 'filled',
'filled': amount,
'price': price or 50000.0
})
async def cancel_order(self, order_id, symbol=None):
"""Mock order cancellation."""
return {'id': order_id, 'status': 'canceled'}
async def fetch_order_status(self, order_id, symbol=None):
"""Mock order status fetch."""
return self._mock_responses.get('order_status', {
'id': order_id,
'status': 'filled'
})
async def fetch_ohlcv(self, symbol, timeframe, since=None, limit=None):
"""Mock OHLCV fetch."""
return self._mock_responses.get('ohlcv', [])
async def subscribe_ohlcv(self, symbol, timeframe, callback):
"""Mock OHLCV subscription."""
pass
async def subscribe_trades(self, symbol, callback):
"""Mock trades subscription."""
pass
async def subscribe_order_book(self, symbol, callback):
"""Mock order book subscription."""
pass
async def fetch_open_orders(self, symbol=None):
"""Mock open orders fetch."""
return self._mock_responses.get('open_orders', [])
async def fetch_positions(self, symbol=None):
"""Mock positions fetch."""
return self._mock_responses.get('positions', [])
async def fetch_markets(self):
"""Mock markets fetch."""
return self._mock_responses.get('markets', [])

81
tests/fixtures/sample_data.py vendored Normal file
View File

@@ -0,0 +1,81 @@
"""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