added some more testing as well as cron expression is now scheduling larger intervals
This commit is contained in:
@@ -72,7 +72,7 @@ def backtest(event, context):
|
||||
refresh = True
|
||||
|
||||
if 'refresh' in event['body']:
|
||||
refresh = event['body']
|
||||
refresh = event['body']['refresh']
|
||||
|
||||
print("time range between dates is: {} days".format(timerange))
|
||||
|
||||
@@ -96,15 +96,13 @@ def backtest(event, context):
|
||||
if "local" in event['body'] and event['body']['local']:
|
||||
print("running in local mode")
|
||||
run_backtest(configuration, name, user, ticker, timerange)
|
||||
return {
|
||||
"statusCode": 200
|
||||
}
|
||||
else:
|
||||
print("running in remote mode")
|
||||
return {
|
||||
"statusCode": 200,
|
||||
"body": json.dumps(_submit_job(configuration, user, ticker, timerange))
|
||||
}
|
||||
json.dumps(_submit_job(configuration, user, ticker, timerange))
|
||||
|
||||
return {
|
||||
"statusCode": 200
|
||||
}
|
||||
else:
|
||||
return {
|
||||
"statusCode": 404,
|
||||
@@ -340,34 +338,31 @@ def cron(event, context):
|
||||
for i in response['Items']:
|
||||
# fire a message to our queue
|
||||
|
||||
message = {
|
||||
"user": i['user'],
|
||||
"name": i['name'],
|
||||
"assets": i['assets'],
|
||||
"stake_currency": i['stake_currency']
|
||||
}
|
||||
# we want to evaluate several time spans for the strategy
|
||||
for day in [1, 7, 30, 90]:
|
||||
|
||||
# triggered over html, let's provide
|
||||
# a date range for the backtesting
|
||||
if 'pathParameters' in event:
|
||||
if 'from' in event['pathParameters']:
|
||||
message['from'] = event['pathParameters']['from']
|
||||
else:
|
||||
message['from'] = datetime.datetime.today().strftime('%Y%m%d')
|
||||
if 'till' in event['pathParameters']:
|
||||
message['till'] = event['pathParameters']['till']
|
||||
else:
|
||||
message['till'] = (datetime.datetime.today() - datetime.timedelta(days=1)).strftime('%Y%m%d')
|
||||
# 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
|
||||
}
|
||||
|
||||
serialized = json.dumps(message, use_decimal=True)
|
||||
# submit item to queue for routing to the correct persistence
|
||||
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'
|
||||
)
|
||||
|
||||
if 'LastEvaluatedKey' in response:
|
||||
return table.scan(
|
||||
|
||||
@@ -278,56 +278,3 @@ def submit_github(event, context):
|
||||
"statusCode": 404,
|
||||
"body": json.dumps({"error": result})
|
||||
}
|
||||
|
||||
|
||||
def get_trades(event, context):
|
||||
"""
|
||||
this function retuns all the knowns trades for a user, strategy and pair
|
||||
:param event:
|
||||
:param context:
|
||||
:return:
|
||||
"""
|
||||
|
||||
assert 'pathParameters' in event
|
||||
assert 'user' in event['pathParameters']
|
||||
assert 'name' in event['pathParameters']
|
||||
assert 'stake' in event['pathParameters']
|
||||
assert 'asset' in event['pathParameters']
|
||||
|
||||
table = get_trade_table()
|
||||
|
||||
response = table.query(
|
||||
KeyConditionExpression=Key('id').eq(
|
||||
"{}.{}:{}/{}".format(
|
||||
event['pathParameters']['user'],
|
||||
event['pathParameters']['name'],
|
||||
event['pathParameters']['asset'].upper(),
|
||||
event['pathParameters']['stake'].upper()
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
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
|
||||
})
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ import boto3
|
||||
import simplejson as json
|
||||
import os
|
||||
from freqtrade.aws.tables import get_trade_table
|
||||
from boto3.dynamodb.conditions import Key, Attr
|
||||
|
||||
|
||||
def store(event, context):
|
||||
@@ -41,3 +42,70 @@ def submit(event, context):
|
||||
"statusCode": 200,
|
||||
"body": json.dumps(result)
|
||||
}
|
||||
|
||||
def get_aggregated_trades(event, context):
|
||||
"""
|
||||
returns the aggregated trades for the given key combination
|
||||
:param event:
|
||||
:param context:
|
||||
:return:
|
||||
"""
|
||||
|
||||
assert 'pathParameters' in event
|
||||
assert 'user' in event['pathParameters']
|
||||
assert 'name' in event['pathParameters']
|
||||
assert 'ticker' in event['pathParameters']
|
||||
assert 'days' in event['pathParameters']
|
||||
|
||||
|
||||
def get_trades(event, context):
|
||||
"""
|
||||
this function returns all the known trades for a user, strategy and pair
|
||||
:param event:
|
||||
:param context:
|
||||
:return:
|
||||
"""
|
||||
|
||||
assert 'pathParameters' in event
|
||||
assert 'user' in event['pathParameters']
|
||||
assert 'name' in event['pathParameters']
|
||||
assert 'stake' in event['pathParameters']
|
||||
assert 'asset' in event['pathParameters']
|
||||
|
||||
table = get_trade_table()
|
||||
|
||||
response = table.query(
|
||||
KeyConditionExpression=Key('id').eq(
|
||||
"{}.{}:{}/{}".format(
|
||||
event['pathParameters']['user'],
|
||||
event['pathParameters']['name'],
|
||||
event['pathParameters']['asset'].upper(),
|
||||
event['pathParameters']['stake'].upper()
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
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
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user