diff --git a/freqtrade/aws/backtesting_lambda.py b/freqtrade/aws/backtesting_lambda.py index cd7db6e6f..4de73bb8f 100644 --- a/freqtrade/aws/backtesting_lambda.py +++ b/freqtrade/aws/backtesting_lambda.py @@ -46,18 +46,9 @@ def backtest(event, context): name = event['body']['name'] user = event['body']['user'] - till = datetime.datetime.today() - fromDate = till - datetime.timedelta(days=90) - + days = [90] if 'days' in event['body']: - fromDate = till - datetime.timedelta(days=event['body']['days']) - else: - if 'from' in event['body']: - fromDate = datetime.datetime.strptime(event['body']['from'], '%Y%m%d') - if 'till' in event['body']: - till = datetime.datetime.strptime(event['body']['till'], '%Y%m%d') - - timerange = (till - fromDate).days + days = event['body']['days'] # by default we refresh data refresh = True @@ -65,29 +56,24 @@ def backtest(event, context): if 'refresh' in event['body']: refresh = event['body']['refresh'] - print("time range between dates is: {} days".format(timerange)) - try: - print("schedule back testing from {} till {} for {} with {} vs {}".format(fromDate, till, name, - event['body'][ - 'stake_currency'], - event['body'][ - 'assets'])) - if "ticker" in event['body']: ticker = event['body']['ticker'] else: - ticker = '5m' + ticker = ['5m'] if "local" in event['body'] and event['body']['local']: print("running in local mode") - configuration = generate_configuration(fromDate, till, name, refresh, user, False) - - run_backtest(configuration, name, user, ticker, fromDate, till) + for x in days: + for y in ticker: + till = datetime.datetime.today() + fromDate = till - datetime.timedelta(days=x) + configuration = generate_configuration(fromDate, till, name, refresh, user, False) + run_backtest(configuration, name, user, y, fromDate, till) else: print("running in remote mode") - _submit_job(name, user, ticker, fromDate, till) + _submit_job(name, user, ticker, days) return { "statusCode": 200 @@ -102,7 +88,7 @@ def backtest(event, context): raise Exception("not a valid event: {}".format(event)) -def _submit_job(name, user, ticker, fromDate, till): +def _submit_job(name, user, ticker, days): """ submits a new task to the cluster @@ -143,15 +129,11 @@ def _submit_job(name, user, ticker, fromDate, till): }, { "name": "FREQ_TICKER", - "value": "{}".format(ticker) + "value": "{}".format(json.dumps(ticker)) }, { - "name": "FREQ_FROM", - "value": "{}".format(fromDate.strftime('%Y%m%d')) - }, - { - "name": "FREQ_TILL", - "value": "{}".format(till.strftime('%Y%m%d')) + "name": "FREQ_DAYS", + "value": "{}".format(json.dumps(days)) }, { "name": "FREQ_STRATEGY", @@ -407,34 +389,29 @@ def cron(event, context): for i in response['Items']: # fire a message to our queue - # we want to evaluate several time spans for the strategy - for day in [1, 7, 30, 90]: + message = { + "user": i['user'], + "name": i['name'], + "assets": i['assets'], + "stake_currency": i['stake_currency'], + "local": False, + "refresh": True, + "ticker": ['5m', '15m', '30m', '1h', '2h', '4h', '6h', '12h', '1d'], + "days": [1, 2, 3, 4, 5, 6, 7, 14, 30, 90] + } - # we want to evaluate several time intervals for each strategy - for interval in ['5m', '15m', '30m', '1h']: - message = { - "user": i['user'], - "name": i['name'], - "assets": i['assets'], - "stake_currency": i['stake_currency'], - "local": False, - "refresh": True, - "ticker": interval, - "days": day - } + print("submitting: {}".format(message)) + serialized = json.dumps(message, use_decimal=True) + # submit item to queue for routing to the correct persistence - print("submitting: {}".format(message)) - serialized = json.dumps(message, use_decimal=True) - # submit item to queue for routing to the correct persistence + result = client.publish( + TopicArn=topic_arn, + Message=json.dumps({'default': serialized}), + Subject="schedule", + MessageStructure='json' + ) - result = client.publish( - TopicArn=topic_arn, - Message=json.dumps({'default': serialized}), - Subject="schedule", - MessageStructure='json' - ) - - print(result) + print(result) if 'LastEvaluatedKey' in response: return table.scan(