Local changes: Updated model training, removed debug instrumentation, and configuration improvements
This commit is contained in:
2
tests/fixtures/__init__.py
vendored
Normal file
2
tests/fixtures/__init__.py
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
"""Test fixtures and mocks."""
|
||||
|
||||
76
tests/fixtures/mock_exchange.py
vendored
Normal file
76
tests/fixtures/mock_exchange.py
vendored
Normal 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
81
tests/fixtures/sample_data.py
vendored
Normal 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
|
||||
|
||||
Reference in New Issue
Block a user