Add trades-generator
This commit is contained in:
+36
-3
@@ -3,7 +3,7 @@ import json
|
|||||||
import logging
|
import logging
|
||||||
import re
|
import re
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
from datetime import timedelta
|
from datetime import datetime, timedelta, timezone
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from unittest.mock import MagicMock, Mock, PropertyMock
|
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.freqtradebot import FreqtradeBot
|
||||||
from freqtrade.persistence import LocalTrade, Order, Trade, init_db
|
from freqtrade.persistence import LocalTrade, Order, Trade, init_db
|
||||||
from freqtrade.resolvers import ExchangeResolver
|
from freqtrade.resolvers import ExchangeResolver
|
||||||
from freqtrade.util import dt_ts
|
from freqtrade.util import dt_now, dt_ts
|
||||||
from freqtrade.util.datetime_helpers import dt_now
|
|
||||||
from freqtrade.worker import Worker
|
from freqtrade.worker import Worker
|
||||||
from tests.conftest_trades import (leverage_trade, mock_trade_1, mock_trade_2, mock_trade_3,
|
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)
|
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()
|
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'):
|
def generate_test_data(timeframe: str, size: int, start: str = '2020-07-05'):
|
||||||
np.random.seed(42)
|
np.random.seed(42)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user