move parse_ticker_dataframe outside Analyze class

This commit is contained in:
Janne Sinivirta 2018-07-10 13:04:37 +03:00
parent 85e6c9585a
commit f6b8c2b40f
5 changed files with 37 additions and 37 deletions

View File

@ -17,6 +17,32 @@ from freqtrade.strategy.resolver import IStrategy
logger = logging.getLogger(__name__)
def parse_ticker_dataframe(ticker: list) -> DataFrame:
"""
Analyses the trend for the given ticker history
:param ticker: See exchange.get_ticker_history
:return: DataFrame
"""
cols = ['date', 'open', 'high', 'low', 'close', 'volume']
frame = DataFrame(ticker, columns=cols)
frame['date'] = to_datetime(frame['date'],
unit='ms',
utc=True,
infer_datetime_format=True)
# group by index and aggregate results to eliminate duplicate ticks
frame = frame.groupby(by='date', as_index=False, sort=True).agg({
'open': 'first',
'high': 'max',
'low': 'min',
'close': 'last',
'volume': 'max',
})
frame.drop(frame.tail(1).index, inplace=True) # eliminate partial candle
return frame
class SignalType(Enum):
"""
Enum to distinguish between buy and sell signals
@ -38,39 +64,13 @@ class Analyze(object):
self.config = config
self.strategy = strategy
@staticmethod
def parse_ticker_dataframe(ticker: list) -> DataFrame:
"""
Analyses the trend for the given ticker history
:param ticker: See exchange.get_ticker_history
:return: DataFrame
"""
cols = ['date', 'open', 'high', 'low', 'close', 'volume']
frame = DataFrame(ticker, columns=cols)
frame['date'] = to_datetime(frame['date'],
unit='ms',
utc=True,
infer_datetime_format=True)
# group by index and aggregate results to eliminate duplicate ticks
frame = frame.groupby(by='date', as_index=False, sort=True).agg({
'open': 'first',
'high': 'max',
'low': 'min',
'close': 'last',
'volume': 'max',
})
frame.drop(frame.tail(1).index, inplace=True) # eliminate partial candle
return frame
def analyze_ticker(self, ticker_history: List[Dict]) -> DataFrame:
"""
Parses the given ticker history and returns a populated DataFrame
add several TA indicators and buy signal to it
:return DataFrame with ticker data and indicator data
"""
dataframe = self.parse_ticker_dataframe(ticker_history)
dataframe = parse_ticker_dataframe(ticker_history)
dataframe = self.strategy.populate_indicators(dataframe)
dataframe = self.strategy.populate_buy_trend(dataframe)
dataframe = self.strategy.populate_sell_trend(dataframe)
@ -227,5 +227,5 @@ class Analyze(object):
"""
Creates a dataframe and populates indicators for given ticker data
"""
return {pair: self.strategy.populate_indicators(self.parse_ticker_dataframe(pair_data))
return {pair: self.strategy.populate_indicators(parse_ticker_dataframe(pair_data))
for pair, pair_data in tickerdata.items()}

View File

@ -12,7 +12,7 @@ from jsonschema import validate
from telegram import Chat, Message, Update
from freqtrade import constants
from freqtrade.analyze import Analyze
from freqtrade.analyze import parse_ticker_dataframe
from freqtrade.exchange import Exchange
from freqtrade.freqtradebot import FreqtradeBot
@ -616,7 +616,7 @@ def tickers():
@pytest.fixture
def result():
with open('freqtrade/tests/testdata/UNITTEST_BTC-1m.json') as data_file:
return Analyze.parse_ticker_dataframe(json.load(data_file))
return parse_ticker_dataframe(json.load(data_file))
# FIX:
# Create an fixture/function

View File

@ -3,14 +3,14 @@ import json
import pytest
from pandas import DataFrame
from freqtrade.analyze import Analyze
from freqtrade.analyze import parse_ticker_dataframe
from freqtrade.strategy.default_strategy import DefaultStrategy
@pytest.fixture
def result():
with open('freqtrade/tests/testdata/ETH_BTC-1m.json') as data_file:
return Analyze.parse_ticker_dataframe(json.load(data_file))
return parse_ticker_dataframe(json.load(data_file))
def test_default_strategy_structure():

View File

@ -10,7 +10,7 @@ from unittest.mock import MagicMock
import arrow
from pandas import DataFrame
from freqtrade.analyze import Analyze
from freqtrade.analyze import Analyze, parse_ticker_dataframe
from freqtrade.arguments import TimeRange
from freqtrade.optimize.__init__ import load_tickerdata_file
from freqtrade.tests.conftest import get_patched_exchange, log_has
@ -21,7 +21,7 @@ _ANALYZE = Analyze({}, DefaultStrategy())
def test_dataframe_correct_length(result):
dataframe = Analyze.parse_ticker_dataframe(result)
dataframe = parse_ticker_dataframe(result)
assert len(result.index) - 1 == len(dataframe.index) # last partial candle removed
@ -145,7 +145,7 @@ def test_parse_ticker_dataframe(ticker_history):
columns = ['date', 'open', 'high', 'low', 'close', 'volume']
# Test file with BV data
dataframe = Analyze.parse_ticker_dataframe(ticker_history)
dataframe = parse_ticker_dataframe(ticker_history)
assert dataframe.columns.tolist() == columns

View File

@ -7,7 +7,7 @@ Unit test file for misc.py
import datetime
from unittest.mock import MagicMock
from freqtrade.analyze import Analyze
from freqtrade.analyze import Analyze, parse_ticker_dataframe
from freqtrade.misc import (common_datearray, datesarray_to_datetimearray,
file_dump_json, format_ms_time, shorten_date)
from freqtrade.optimize.__init__ import load_tickerdata_file
@ -29,7 +29,7 @@ def test_datesarray_to_datetimearray(ticker_history):
Test datesarray_to_datetimearray() function
:return: None
"""
dataframes = Analyze.parse_ticker_dataframe(ticker_history)
dataframes = parse_ticker_dataframe(ticker_history)
dates = datesarray_to_datetimearray(dataframes['date'])
assert isinstance(dates[0], datetime.datetime)