|
|
|
|
@ -10,6 +10,7 @@ from unittest.mock import MagicMock, Mock, PropertyMock
|
|
|
|
|
|
|
|
|
|
import arrow
|
|
|
|
|
import numpy as np
|
|
|
|
|
import pandas as pd
|
|
|
|
|
import pytest
|
|
|
|
|
from telegram import Chat, Message, Update
|
|
|
|
|
|
|
|
|
|
@ -19,6 +20,7 @@ from freqtrade.data.converter import ohlcv_to_dataframe
|
|
|
|
|
from freqtrade.edge import PairInfo
|
|
|
|
|
from freqtrade.enums import CandleType, MarginMode, RunMode, SignalDirection, TradingMode
|
|
|
|
|
from freqtrade.exchange import Exchange
|
|
|
|
|
from freqtrade.exchange.exchange import timeframe_to_minutes
|
|
|
|
|
from freqtrade.freqtradebot import FreqtradeBot
|
|
|
|
|
from freqtrade.persistence import LocalTrade, Order, Trade, init_db
|
|
|
|
|
from freqtrade.resolvers import ExchangeResolver
|
|
|
|
|
@ -82,6 +84,26 @@ def get_args(args):
|
|
|
|
|
return Arguments(args).get_parsed_arg()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def generate_test_data(timeframe: str, size: int, start: str = '2020-07-05'):
|
|
|
|
|
np.random.seed(42)
|
|
|
|
|
tf_mins = timeframe_to_minutes(timeframe)
|
|
|
|
|
|
|
|
|
|
base = np.random.normal(20, 2, size=size)
|
|
|
|
|
|
|
|
|
|
date = pd.date_range(start, periods=size, freq=f'{tf_mins}min', tz='UTC')
|
|
|
|
|
df = pd.DataFrame({
|
|
|
|
|
'date': date,
|
|
|
|
|
'open': base,
|
|
|
|
|
'high': base + np.random.normal(2, 1, size=size),
|
|
|
|
|
'low': base - np.random.normal(2, 1, size=size),
|
|
|
|
|
'close': base + np.random.normal(0, 1, size=size),
|
|
|
|
|
'volume': np.random.normal(200, size=size)
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
df = df.dropna()
|
|
|
|
|
return df
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Source: https://stackoverflow.com/questions/29881236/how-to-mock-asyncio-coroutines
|
|
|
|
|
# TODO: This should be replaced with AsyncMock once support for python 3.7 is dropped.
|
|
|
|
|
def get_mock_coro(return_value=None, side_effect=None):
|
|
|
|
|
|