From 267f2e352ea298f4bda88053c89974a203dff344 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 23 Jan 2024 19:22:38 +0100 Subject: [PATCH] Add trades-generator --- tests/conftest.py | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index c717f84ba..8534cc34d 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -3,7 +3,7 @@ import json import logging import re from copy import deepcopy -from datetime import timedelta +from datetime import datetime, timedelta, timezone from pathlib import Path from typing import Optional from unittest.mock import MagicMock, Mock, PropertyMock @@ -22,8 +22,7 @@ from freqtrade.exchange import Exchange, timeframe_to_minutes, timeframe_to_seco from freqtrade.freqtradebot import FreqtradeBot from freqtrade.persistence import LocalTrade, Order, Trade, init_db from freqtrade.resolvers import ExchangeResolver -from freqtrade.util import dt_ts -from freqtrade.util.datetime_helpers import dt_now +from freqtrade.util import dt_now, dt_ts from freqtrade.worker import Worker from tests.conftest_trades import (leverage_trade, mock_trade_1, mock_trade_2, mock_trade_3, mock_trade_4, mock_trade_5, mock_trade_6, short_trade) @@ -106,6 +105,40 @@ def get_args(args): return Arguments(args).get_parsed_arg() +def generate_trades_history(n_rows, start_date: Optional[datetime] = None, days=5): + np.random.seed(42) + if not start_date: + start_date = datetime(2020, 1, 1, tzinfo=timezone.utc) + + # Generate random data + end_date = start_date + timedelta(days=days) + _start_timestamp = start_date.timestamp() + _end_timestamp = pd.to_datetime(end_date).timestamp() + + random_timestamps_in_seconds = np.random.uniform(_start_timestamp, _end_timestamp, n_rows) + timestamp = pd.to_datetime(random_timestamps_in_seconds, unit='s') + + id = [f'a{np.random.randint(1e6, 1e7-1)}cd{np.random.randint(100, 999)}' for _ in range(n_rows)] + + side = np.random.choice(['buy', 'sell'], n_rows) + + # Initial price and subsequent changes + initial_price = 0.019626 + price_changes = np.random.normal(0, initial_price * 0.05, n_rows) + price = np.cumsum(np.concatenate(([initial_price], price_changes)))[:n_rows] + + amount = np.random.uniform(0.011, 20, n_rows) + cost = price * amount + + # Create DataFrame + df = pd.DataFrame({'timestamp': timestamp, 'id': id, 'type': None, 'side': side, + 'price': price, 'amount': amount, 'cost': cost}) + df['date'] = pd.to_datetime(df['timestamp'], unit='ms', utc=True) + df = df.sort_values('timestamp').reset_index(drop=True) + assert list(df.columns) == constants.DEFAULT_TRADES_COLUMNS + ['date'] + return df + + def generate_test_data(timeframe: str, size: int, start: str = '2020-07-05'): np.random.seed(42)