From 5683f9e10e76c12a8bf1b91f84d3b07b3825e315 Mon Sep 17 00:00:00 2001 From: Gerald Lonlas Date: Sun, 3 Jun 2018 13:58:00 -0700 Subject: [PATCH] Remove hardcoded backtest-result.json in Plot scripts --- .gitignore | 1 + freqtrade/arguments.py | 13 +++++++------ scripts/plot_dataframe.py | 13 +++++-------- scripts/plot_profit.py | 33 +++++++++++++++++--------------- user_data/backtest_data/.gitkeep | 0 5 files changed, 31 insertions(+), 29 deletions(-) create mode 100644 user_data/backtest_data/.gitkeep diff --git a/.gitignore b/.gitignore index 219a9fb40..b52a31d8e 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ logfile.txt hyperopt_trials.pickle user_data/ freqtrade-plot.html +freqtrade-profit-plot.html # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/freqtrade/arguments.py b/freqtrade/arguments.py index a45dd20b3..c9cecb1f5 100644 --- a/freqtrade/arguments.py +++ b/freqtrade/arguments.py @@ -123,8 +123,8 @@ class Arguments(object): ) parser.add_argument( '-r', '--refresh-pairs-cached', - help='refresh the pairs files in tests/testdata with the latest data from the exchange. \ - Use it if you want to run your backtesting with up-to-date data.', + help='refresh the pairs files in tests/testdata with the latest data from the ' + 'exchange. Use it if you want to run your backtesting with up-to-date data.', action='store_true', dest='refresh_pairs', ) @@ -140,11 +140,12 @@ class Arguments(object): '--export-filename', help='Save backtest results to this filename \ requires --export to be set as well\ - Example --export-filename=backtest_today.json\ + Example --export-filename=user_data/backtest_data/backtest_today.json\ (default: %(default)s', type=str, - default='backtest-result.json', + default=os.path.join('user_data', 'backtest_data', 'backtest-result.json'), dest='exportfilename', + metavar='PATH', ) @staticmethod @@ -220,8 +221,8 @@ class Arguments(object): self.hyperopt_options(hyperopt_cmd) @staticmethod - def parse_timerange(text: Optional[str]) -> Optional[Tuple[Tuple, - Optional[int], Optional[int]]]: + def parse_timerange(text: Optional[str]) -> \ + Optional[Tuple[Tuple, Optional[int], Optional[int]]]: """ Parse the value of the argument --timerange to determine what is the range desired :param text: value from --timerange diff --git a/scripts/plot_dataframe.py b/scripts/plot_dataframe.py index 108c0b609..47ce0e746 100755 --- a/scripts/plot_dataframe.py +++ b/scripts/plot_dataframe.py @@ -13,18 +13,14 @@ Optional Cli parameters -db / --db-url: Show trades stored in database """ import logging +import os import sys from argparse import Namespace - -from typing import List - +from typing import Dict, List, Any +from sqlalchemy import create_engine from plotly import tools from plotly.offline import plot import plotly.graph_objs as go - -from typing import Dict, List, Any -from sqlalchemy import create_engine - from freqtrade.arguments import Arguments from freqtrade.analyze import Analyze from freqtrade import exchange @@ -35,6 +31,7 @@ from freqtrade.persistence import Trade logger = logging.getLogger(__name__) _CONF: Dict[str, Any] = {} + def plot_analyzed_dataframe(args: Namespace) -> None: """ Calls analyze() and plots the returned dataframe @@ -187,7 +184,7 @@ def plot_analyzed_dataframe(args: Namespace) -> None: fig['layout']['yaxis2'].update(title='Volume') fig['layout']['yaxis3'].update(title='MACD') - plot(fig, filename='freqtrade-plot.html') + plot(fig, filename=os.path.join('user_data', 'freqtrade-plot.html')) def plot_parse_args(args: List[str]) -> Namespace: diff --git a/scripts/plot_profit.py b/scripts/plot_profit.py index daa16ddc9..a5ac00169 100755 --- a/scripts/plot_profit.py +++ b/scripts/plot_profit.py @@ -8,9 +8,12 @@ Mandatory Cli parameters: Optional Cli parameters -c / --config: specify configuration file -s / --strategy: strategy to use ---timerange: specify what timerange of data to use. +-d / --datadir: path to pair backtest data +--timerange: specify what timerange of data to use +--export-filename: Specify where the backtest export is located. """ import logging +import os import sys import json from argparse import Namespace @@ -90,7 +93,18 @@ def plot_profit(args: Namespace) -> None: 'Impossible to load the strategy. Please check the file "user_data/strategies/%s.py"', config.get('strategy') ) - exit() + exit(0) + + # Load the profits results + try: + filename = args.exportfilename + with open(filename) as file: + data = json.load(file) + except FileNotFoundError: + logger.critical( + 'File "backtest-result.json" not found. This script require backtesting ' + 'results to run.\nPlease run a backtesting with the parameter --export.') + exit(0) # Take pairs from the cli otherwise switch to the pair in the config file if args.pair: @@ -140,18 +154,7 @@ def plot_profit(args: Namespace) -> None: num += 1 avgclose /= num - # Load the profits results - # And make an profits-growth array - - try: - filename = 'backtest-result.json' - with open(filename) as file: - data = json.load(file) - except FileNotFoundError: - logger.critical('File "backtest-result.json" not found. This script require backtesting ' - 'results to run.\nPlease run a backtesting with the parameter --export.') - exit(0) - + # make an profits-growth array pg = make_profit_array(data, num_iterations, min_date, tick_interval, filter_pairs) # @@ -184,7 +187,7 @@ def plot_profit(args: Namespace) -> None: ) fig.append_trace(pair_profit, 3, 1) - plot(fig, filename='freqtrade-profit-plot.html') + plot(fig, filename=os.path.join('user_data', 'freqtrade-profit-plot.html')) def define_index(min_date: int, max_date: int, interval: str) -> int: diff --git a/user_data/backtest_data/.gitkeep b/user_data/backtest_data/.gitkeep new file mode 100644 index 000000000..e69de29bb