This commit is contained in:
Ramon Bastiaans
2018-02-08 12:39:01 +00:00
committed by GitHub
22 changed files with 1207 additions and 101 deletions

View File

@@ -6,12 +6,12 @@ from typing import Dict, Tuple
import arrow
from pandas import DataFrame, Series
from tabulate import tabulate
from freqtrade import OperationalException
import freqtrade.misc as misc
import freqtrade.optimize as optimize
from freqtrade import exchange
from freqtrade.analyze import populate_buy_trend, populate_sell_trend
from freqtrade.exchange import Bittrex
from freqtrade.main import should_sell
from freqtrade.persistence import Trade
from freqtrade.strategy.strategy import Strategy
@@ -105,16 +105,21 @@ def backtest(args) -> DataFrame:
sell_profit_only: sell if profit only
use_sell_signal: act on sell-signal
stoploss: use stoploss
exchange_name: which exchange to use
:return: DataFrame
"""
processed = args['processed']
max_open_trades = args.get('max_open_trades', 0)
realistic = args.get('realistic', True)
record = args.get('record', None)
exchange_name = args.get('exchange_name', None)
records = []
trades = []
trade_count_lock: dict = {}
exchange._API = Bittrex({'key': '', 'secret': ''})
exchange_class = exchange.Exchanges[exchange_name.upper()].value
exchange._API = exchange_class({'key': '', 'secret': ''})
for pair, pair_data in processed.items():
pair_data['buy'], pair_data['sell'] = 0, 0
ticker = populate_sell_trend(populate_buy_trend(pair_data))
@@ -167,8 +172,6 @@ def start(args):
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
)
exchange._API = Bittrex({'key': '', 'secret': ''})
logger.info('Using config: %s ...', args.config)
config = misc.load_config(args.config)
@@ -184,6 +187,15 @@ def start(args):
logger.info('Using ticker_interval: %d ...', strategy.ticker_interval)
exchange_name = config['exchange']['name']
try:
exchange_class = exchange.Exchanges[exchange_name.upper()].value
except KeyError:
raise OperationalException('Exchange {} is not supported'.format(
exchange_name))
exchange._API = exchange_class({'key': '', 'secret': ''})
data = {}
pairs = config['exchange']['pair_whitelist']
if args.live:
@@ -227,7 +239,8 @@ def start(args):
'sell_profit_only': sell_profit_only,
'use_sell_signal': use_sell_signal,
'stoploss': strategy.stoploss,
'record': args.export
'record': args.export,
'exchange_name': exchange_name
})
logger.info(
'\n==================================== BACKTESTING REPORT ====================================\n%s', # noqa

View File

@@ -19,10 +19,10 @@ from hyperopt.mongoexp import MongoTrials
from pandas import DataFrame
import freqtrade.vendor.qtpylib.indicators as qtpylib
from freqtrade import OperationalException
# Monkey patch config
from freqtrade import main # noqa; noqa
from freqtrade import exchange, misc, optimize
from freqtrade.exchange import Bittrex
from freqtrade.misc import load_config
from freqtrade.optimize import backtesting
from freqtrade.optimize.backtesting import backtest
@@ -401,7 +401,8 @@ def optimizer(params):
results = backtest({'stake_amount': OPTIMIZE_CONFIG['stake_amount'],
'processed': PROCESSED,
'stoploss': params['stoploss']})
'stoploss': params['stoploss'],
'exchange_name': _CONFIG['exchange']['name']})
result_explanation = format_results(results)
total_profit = results.profit_percent.sum()
@@ -445,12 +446,10 @@ def format_results(results: DataFrame):
def start(args):
global TOTAL_TRIES, PROCESSED, TRIALS, _CURRENT_TRIES
global TOTAL_TRIES, PROCESSED, TRIALS, _CURRENT_TRIES, _CONFIG
TOTAL_TRIES = args.epochs
exchange._API = Bittrex({'key': '', 'secret': ''})
# Initialize logger
logging.basicConfig(
level=args.loglevel,
@@ -458,18 +457,27 @@ def start(args):
)
logger.info('Using config: %s ...', args.config)
config = load_config(args.config)
pairs = config['exchange']['pair_whitelist']
_CONFIG = load_config(args.config)
pairs = _CONFIG['exchange']['pair_whitelist']
exchange_name = _CONFIG['exchange']['name']
try:
exchange_class = exchange.Exchanges[exchange_name.upper()].value
except KeyError:
raise OperationalException('Exchange {} is not supported'.format(
exchange_name))
exchange._API = exchange_class({'key': '', 'secret': ''})
# If -i/--ticker-interval is use we override the configuration parameter
# (that will override the strategy configuration)
if args.ticker_interval:
config.update({'ticker_interval': args.ticker_interval})
_CONFIG.update({'ticker_interval': args.ticker_interval})
# init the strategy to use
config.update({'strategy': args.strategy})
_CONFIG.update({'strategy': args.strategy})
strategy = Strategy()
strategy.init(config)
strategy.init(_CONFIG)
timerange = misc.parse_timerange(args.timerange)
data = optimize.load_data(args.datadir, pairs=pairs,