From b41dd0b790147164151051496ca166f67c8e0df5 Mon Sep 17 00:00:00 2001 From: Gert Wohlgemuth Date: Tue, 5 Jun 2018 16:34:01 -0700 Subject: [PATCH] added service to query aggregated trades --- freqtrade/aws/backtesting_lambda.py | 3 +++ freqtrade/aws/trade.py | 40 +++++++++++++++++++++++++++-- serverless.yml | 39 ++++++++++++++-------------- 3 files changed, 60 insertions(+), 22 deletions(-) diff --git a/freqtrade/aws/backtesting_lambda.py b/freqtrade/aws/backtesting_lambda.py index eed01d655..f5db8fa84 100644 --- a/freqtrade/aws/backtesting_lambda.py +++ b/freqtrade/aws/backtesting_lambda.py @@ -354,6 +354,7 @@ def cron(event, context): "days": day } + print("submitting: {}".format(message)) serialized = json.dumps(message, use_decimal=True) # submit item to queue for routing to the correct persistence @@ -364,6 +365,8 @@ def cron(event, context): MessageStructure='json' ) + print(result) + if 'LastEvaluatedKey' in response: return table.scan( ExclusiveStartKey=response['LastEvaluatedKey'] diff --git a/freqtrade/aws/trade.py b/freqtrade/aws/trade.py index d262608bf..f1f82f441 100644 --- a/freqtrade/aws/trade.py +++ b/freqtrade/aws/trade.py @@ -43,6 +43,7 @@ def submit(event, context): "body": json.dumps(result) } + def get_aggregated_trades(event, context): """ returns the aggregated trades for the given key combination @@ -52,11 +53,46 @@ def get_aggregated_trades(event, context): """ assert 'pathParameters' in event - assert 'user' in event['pathParameters'] - assert 'name' in event['pathParameters'] assert 'ticker' in event['pathParameters'] assert 'days' in event['pathParameters'] + table = get_trade_table() + + response = table.query( + KeyConditionExpression=Key('id').eq( + "aggregate:{}:{}:{}:test".format( + "TOTAL", + event['pathParameters']['ticker'], + event['pathParameters']['days'] + ) + ) + ) + + if "Items" in response and len(response['Items']) > 0: + + # preparation for pagination + # TODO include in parameters an optional + # start key ExclusiveStartKey=response['LastEvaluatedKey'] + + data = { + "result": response['Items'], + "paginationKey": response.get('LastEvaluatedKey') + } + + return { + "statusCode": response['ResponseMetadata']['HTTPStatusCode'], + "body": json.dumps(data) + } + + else: + return { + "statusCode": 404, + "body": json.dumps({ + "error": "sorry this query did not produce any results", + "event": event + }) + } + def get_trades(event, context): """ diff --git a/serverless.yml b/serverless.yml index 6a6026ba1..b45ce0f44 100644 --- a/serverless.yml +++ b/serverless.yml @@ -105,25 +105,6 @@ functions: environment: strategyTable: ${self:custom.strategyTable} - #TODO - #returns the performance for the given strategy - performance: - memorySize: 128 - handler: freqtrade/aws/strategy.performance - events: - - http: - path: strategies/{user}/{name}/performance - method: get - cors: true - request: - parameter: - paths: - user: true - name: true - - environment: - strategyTable: ${self:custom.strategyTable} - #returns the source code of this given strategy #unless it's private code: @@ -169,7 +150,7 @@ functions: # loads all trades for a strategy and it's associated pairs trades: memorySize: 128 - handler: freqtrade/aws/strategy.get_trades + handler: freqtrade/aws/trade.get_trades events: - http: path: strategies/{user}/{name}/{stake}/{asset} @@ -227,6 +208,24 @@ functions: environment: tradeTable: ${self:custom.tradeTable} + # stores the received message in the trade table + trade-aggregate: + memorySize: 128 + handler: freqtrade/aws/trade.get_aggregated_trades + + events: + - http: + path: trades/aggregate/{ticker}/{days} + method: get + cors: true + request: + parameter: + paths: + ticker: true + days: true + environment: + tradeTable: ${self:custom.tradeTable} + #submits a new strategy to the system submit_github: memorySize: 128