From 88545d882ca7df3b52586b0058ad9bf94fc0fe2e Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 30 Jun 2019 09:42:10 +0200 Subject: [PATCH] Use FTPlots class in plot-scripts --- scripts/plot_dataframe.py | 36 +++++------------------------- scripts/plot_profit.py | 46 +++++++-------------------------------- 2 files changed, 14 insertions(+), 68 deletions(-) diff --git a/scripts/plot_dataframe.py b/scripts/plot_dataframe.py index a0f4ef778..431c6239c 100755 --- a/scripts/plot_dataframe.py +++ b/scripts/plot_dataframe.py @@ -14,19 +14,16 @@ Example of usage: """ import logging import sys -from pathlib import Path from typing import Any, Dict, List import pandas as pd from freqtrade.arguments import ARGS_PLOT_DATAFRAME, Arguments -from freqtrade.data import history -from freqtrade.data.btanalysis import extract_trades_of_period, load_trades +from freqtrade.data.btanalysis import extract_trades_of_period from freqtrade.optimize import setup_configuration -from freqtrade.plot.plotting import (generate_candlestick_graph, +from freqtrade.plot.plotting import (FTPlots, generate_candlestick_graph, store_plot_file, generate_plot_filename) -from freqtrade.resolvers import ExchangeResolver, StrategyResolver from freqtrade.state import RunMode logger = logging.getLogger(__name__) @@ -57,38 +54,17 @@ def analyse_and_plot_pairs(config: Dict[str, Any]): -Generate plot files :return: None """ - exchange = ExchangeResolver(config.get('exchange', {}).get('name'), config).exchange - - strategy = StrategyResolver(config).strategy - if "pairs" in config: - pairs = config["pairs"].split(',') - else: - pairs = config["exchange"]["pair_whitelist"] - - # Set timerange to use - timerange = Arguments.parse_timerange(config["timerange"]) - - tickers = history.load_data( - datadir=Path(str(config.get("datadir"))), - pairs=pairs, - ticker_interval=config['ticker_interval'], - refresh_pairs=config.get('refresh_pairs', False), - timerange=timerange, - exchange=exchange, - live=config.get("live", False), - ) - - trades = load_trades(config) + plot = FTPlots(config) pair_counter = 0 - for pair, data in tickers.items(): + for pair, data in plot.tickers.items(): pair_counter += 1 logger.info("analyse pair %s", pair) tickers = {} tickers[pair] = data - dataframe = generate_dataframe(strategy, tickers, pair) + dataframe = generate_dataframe(plot.strategy, tickers, pair) - trades_pair = trades.loc[trades['pair'] == pair] + trades_pair = plot.trades.loc[plot.trades['pair'] == pair] trades_pair = extract_trades_of_period(dataframe, trades_pair) fig = generate_candlestick_graph( diff --git a/scripts/plot_profit.py b/scripts/plot_profit.py index f28763077..cd507100f 100755 --- a/scripts/plot_profit.py +++ b/scripts/plot_profit.py @@ -6,7 +6,6 @@ Use `python plot_profit.py --help` to display the command line arguments """ import logging import sys -from pathlib import Path from typing import Any, Dict, List import pandas as pd @@ -14,11 +13,9 @@ import plotly.graph_objs as go from plotly import tools from freqtrade.arguments import ARGS_PLOT_PROFIT, Arguments -from freqtrade.data import history -from freqtrade.data.btanalysis import create_cum_profit, load_trades +from freqtrade.data.btanalysis import create_cum_profit from freqtrade.optimize import setup_configuration -from freqtrade.plot.plotting import store_plot_file -from freqtrade.resolvers import ExchangeResolver +from freqtrade.plot.plotting import FTPlots, store_plot_file from freqtrade.state import RunMode logger = logging.getLogger(__name__) @@ -31,41 +28,16 @@ def plot_profit(config: Dict[str, Any]) -> None: But should be somewhat proportional, and therefor useful in helping out to find a good algorithm. """ + plot = FTPlots(config) - exchange = ExchangeResolver(config.get('exchange', {}).get('name'), config).exchange - - # Take pairs from the cli otherwise switch to the pair in the config file - if "pairs" in config: - pairs = config["pairs"].split(',') - else: - pairs = config["exchange"]["pair_whitelist"] - - # We need to use the same pairs and the same ticker_interval - # as used in backtesting / trading - # to match the tickerdata against the results - timerange = Arguments.parse_timerange(config["timerange"]) - - tickers = history.load_data( - datadir=Path(str(config.get("datadir"))), - pairs=pairs, - ticker_interval=config['ticker_interval'], - refresh_pairs=config.get('refresh_pairs', False), - timerange=timerange, - exchange=exchange, - live=config.get("live", False), - ) - - # Load the profits results - trades = load_trades(config) - - trades = trades[trades['pair'].isin(pairs)] + trades = plot.trades[plot.trades['pair'].isin(plot.pairs)] # Create an average close price of all the pairs that were involved. # this could be useful to gauge the overall market trend # Combine close-values for all pairs, rename columns to "pair" - df_comb = pd.concat([tickers[pair].set_index('date').rename( - {'close': pair}, axis=1)[pair] for pair in tickers], axis=1) + df_comb = pd.concat([plot.tickers[pair].set_index('date').rename( + {'close': pair}, axis=1)[pair] for pair in plot.tickers], axis=1) df_comb['mean'] = df_comb.mean(axis=1) # Add combined cumulative profit @@ -89,7 +61,7 @@ def plot_profit(config: Dict[str, Any]) -> None: fig.append_trace(avgclose, 1, 1) fig.append_trace(profit, 2, 1) - for pair in pairs: + for pair in plot.pairs: profit_col = f'cum_profit_{pair}' df_comb = create_cum_profit(df_comb, trades[trades['pair'] == pair], profit_col) @@ -100,9 +72,7 @@ def plot_profit(config: Dict[str, Any]) -> None: ) fig.append_trace(pair_profit, 3, 1) - store_plot_file(fig, - filename='freqtrade-profit-plot.html', - auto_open=True) + store_plot_file(fig, filename='freqtrade-profit-plot.html', auto_open=True) def plot_parse_args(args: List[str]) -> Dict[str, Any]: