added flake8 settings and optimization
This commit is contained in:
parent
39368baffd
commit
f5073d92b7
4
.flake8
Normal file
4
.flake8
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[flake8]
|
||||||
|
ignore = E226,E302,E41,E126,F841
|
||||||
|
max-line-length = 160
|
||||||
|
exclude = */tests/*
|
@ -35,7 +35,7 @@ SUPPORTED_FIAT = [
|
|||||||
"KRW", "MXN", "MYR", "NOK", "NZD", "PHP", "PKR", "PLN",
|
"KRW", "MXN", "MYR", "NOK", "NZD", "PHP", "PKR", "PLN",
|
||||||
"RUB", "SEK", "SGD", "THB", "TRY", "TWD", "ZAR", "USD",
|
"RUB", "SEK", "SGD", "THB", "TRY", "TWD", "ZAR", "USD",
|
||||||
"BTC", "ETH", "XRP", "LTC", "BCH", "USDT"
|
"BTC", "ETH", "XRP", "LTC", "BCH", "USDT"
|
||||||
]
|
]
|
||||||
|
|
||||||
# Required json-schema for user specified config
|
# Required json-schema for user specified config
|
||||||
CONF_SCHEMA = {
|
CONF_SCHEMA = {
|
||||||
|
@ -45,6 +45,7 @@ def retrier(f):
|
|||||||
else:
|
else:
|
||||||
logger.warning('Giving up retrying: %s()', f.__name__)
|
logger.warning('Giving up retrying: %s()', f.__name__)
|
||||||
raise ex
|
raise ex
|
||||||
|
|
||||||
return wrapper
|
return wrapper
|
||||||
|
|
||||||
|
|
||||||
|
@ -75,8 +75,7 @@ class Backtesting(object):
|
|||||||
(arrow.get(min(frame.date)), arrow.get(max(frame.date)))
|
(arrow.get(min(frame.date)), arrow.get(max(frame.date)))
|
||||||
for frame in data.values()
|
for frame in data.values()
|
||||||
]
|
]
|
||||||
return min(timeframe, key=operator.itemgetter(0))[0], \
|
return min(timeframe, key=operator.itemgetter(0))[0], max(timeframe, key=operator.itemgetter(1))[1]
|
||||||
max(timeframe, key=operator.itemgetter(1))[1]
|
|
||||||
|
|
||||||
def _generate_text_table(self, data: Dict[str, Dict], results: DataFrame) -> str:
|
def _generate_text_table(self, data: Dict[str, Dict], results: DataFrame) -> str:
|
||||||
"""
|
"""
|
||||||
|
@ -40,7 +40,6 @@ class StrategyResolver(object):
|
|||||||
self.strategy: IStrategy = self._load_strategy(strategy_name,
|
self.strategy: IStrategy = self._load_strategy(strategy_name,
|
||||||
extra_dir=config.get('strategy_path'))
|
extra_dir=config.get('strategy_path'))
|
||||||
|
|
||||||
|
|
||||||
# Set attributes
|
# Set attributes
|
||||||
# Check if we need to override configuration
|
# Check if we need to override configuration
|
||||||
if 'minimal_roi' in config:
|
if 'minimal_roi' in config:
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
ccxt==1.14.24
|
|
||||||
SQLAlchemy==1.2.7
|
|
||||||
arrow==0.12.1
|
|
||||||
cachetools==2.1.0
|
|
||||||
requests==2.18.4
|
|
||||||
urllib3==1.22
|
|
||||||
wrapt==1.10.11
|
|
||||||
pandas==0.23.0
|
|
||||||
scikit-learn==0.19.1
|
|
||||||
scipy==1.1.0
|
|
||||||
jsonschema==2.6.0
|
|
||||||
numpy==1.14.3
|
|
||||||
TA-Lib==0.4.17
|
|
||||||
git+git://github.com/berlinguyinca/networkx@v1.11
|
|
||||||
tabulate==0.8.2
|
|
||||||
coinmarketcap==5.0.3
|
|
||||||
simplejson==3.15.0
|
|
||||||
boto3
|
|
337
serverless.yml
337
serverless.yml
@ -1,337 +0,0 @@
|
|||||||
service: freq
|
|
||||||
|
|
||||||
frameworkVersion: ">=1.1.0 <2.0.0"
|
|
||||||
|
|
||||||
plugins:
|
|
||||||
- serverless-domain-manager
|
|
||||||
- serverless-python-requirements
|
|
||||||
|
|
||||||
############################################################################################
|
|
||||||
# configure out provider and the security guide lines
|
|
||||||
############################################################################################
|
|
||||||
provider:
|
|
||||||
name: aws
|
|
||||||
runtime: python3.6
|
|
||||||
region: us-east-2
|
|
||||||
|
|
||||||
#required permissions
|
|
||||||
iamRoleStatements:
|
|
||||||
- Effect: Allow
|
|
||||||
Action:
|
|
||||||
- dynamodb:*
|
|
||||||
Resource: "*"
|
|
||||||
- Effect: Allow
|
|
||||||
Action:
|
|
||||||
- SNS:*
|
|
||||||
Resource: { "Fn::Join" : [":", ["arn:aws:sns:${self:custom.region}", "*:*" ] ] }
|
|
||||||
- Effect: "Allow"
|
|
||||||
Action:
|
|
||||||
- ecs:RunTask
|
|
||||||
Resource: "*"
|
|
||||||
- Effect: Allow
|
|
||||||
Action:
|
|
||||||
- iam:PassRole
|
|
||||||
Resource: "*"
|
|
||||||
|
|
||||||
memorySize: 128
|
|
||||||
timeout: 90
|
|
||||||
versionFunctions: false
|
|
||||||
|
|
||||||
logRetentionInDays: 3
|
|
||||||
|
|
||||||
#where to store out data, needs to be manually created!
|
|
||||||
deploymentBucket:
|
|
||||||
name: lambdas-freq
|
|
||||||
|
|
||||||
# limit the invocations a bit to avoid overloading the server
|
|
||||||
usagePlan:
|
|
||||||
throttle:
|
|
||||||
burstLimit: 100
|
|
||||||
rateLimit: 50
|
|
||||||
|
|
||||||
############################################################################################
|
|
||||||
#custom configuration settings
|
|
||||||
############################################################################################
|
|
||||||
custom:
|
|
||||||
stage: ${opt:stage, self:provider.stage}
|
|
||||||
region: ${opt:region, self:provider.region}
|
|
||||||
|
|
||||||
snsTopic: "FreqQueue-${self:custom.stage}"
|
|
||||||
snsTradeTopic: "FreqTradeQueue-${self:custom.stage}"
|
|
||||||
|
|
||||||
tradeTable: "FreqTradesTable-${self:custom.stage}"
|
|
||||||
strategyTable: "FreqStrategyTable-${self:custom.stage}"
|
|
||||||
|
|
||||||
###
|
|
||||||
# custom domain management
|
|
||||||
###
|
|
||||||
|
|
||||||
customDomain:
|
|
||||||
basePath: "${self:custom.stage}"
|
|
||||||
domainName: "freq.isaac.international"
|
|
||||||
stage: "${self:custom.stage}"
|
|
||||||
createRoute53Record: true
|
|
||||||
|
|
||||||
pythonRequirements:
|
|
||||||
slim: true
|
|
||||||
invalidateCaches: true
|
|
||||||
dockerizePip: false
|
|
||||||
fileName: requirements-aws.txt
|
|
||||||
noDeploy:
|
|
||||||
- pytest
|
|
||||||
- moto
|
|
||||||
- plotly
|
|
||||||
- boto3
|
|
||||||
- pytest-mock
|
|
||||||
- pytest-cov
|
|
||||||
- pymongo
|
|
||||||
package:
|
|
||||||
exclude:
|
|
||||||
- test/**
|
|
||||||
- node_modules/**
|
|
||||||
- doc/**
|
|
||||||
- scripts/**
|
|
||||||
- bin
|
|
||||||
- freqtrade/tests/**
|
|
||||||
|
|
||||||
############################################################################################
|
|
||||||
# this section defines all lambda function and triggers
|
|
||||||
############################################################################################
|
|
||||||
functions:
|
|
||||||
|
|
||||||
#returns all known strategy names from the server
|
|
||||||
#and if they are private or not
|
|
||||||
strategies:
|
|
||||||
memorySize: 128
|
|
||||||
handler: freqtrade/aws/strategy.names
|
|
||||||
events:
|
|
||||||
- http:
|
|
||||||
path: strategies
|
|
||||||
method: get
|
|
||||||
cors: true
|
|
||||||
|
|
||||||
environment:
|
|
||||||
strategyTable: ${self:custom.strategyTable}
|
|
||||||
reservedConcurrency: 5
|
|
||||||
|
|
||||||
#returns the source code of this given strategy
|
|
||||||
#unless it's private
|
|
||||||
code:
|
|
||||||
memorySize: 128
|
|
||||||
handler: freqtrade/aws/strategy.code
|
|
||||||
events:
|
|
||||||
- http:
|
|
||||||
path: strategies/{user}/{name}/code
|
|
||||||
method: get
|
|
||||||
cors: true
|
|
||||||
integration: lambda
|
|
||||||
request:
|
|
||||||
parameter:
|
|
||||||
paths:
|
|
||||||
user: true
|
|
||||||
name: true
|
|
||||||
response:
|
|
||||||
headers:
|
|
||||||
Content-Type: "'text/plain'"
|
|
||||||
template: $input.path('$')
|
|
||||||
|
|
||||||
environment:
|
|
||||||
strategyTable: ${self:custom.strategyTable}
|
|
||||||
reservedConcurrency: 5
|
|
||||||
|
|
||||||
# loads the details of the specific strategy
|
|
||||||
get:
|
|
||||||
memorySize: 128
|
|
||||||
handler: freqtrade/aws/strategy.get
|
|
||||||
events:
|
|
||||||
- http:
|
|
||||||
path: strategies/{user}/{name}
|
|
||||||
method: get
|
|
||||||
cors: true
|
|
||||||
request:
|
|
||||||
parameter:
|
|
||||||
paths:
|
|
||||||
user: true
|
|
||||||
name: true
|
|
||||||
|
|
||||||
environment:
|
|
||||||
strategyTable: ${self:custom.strategyTable}
|
|
||||||
reservedConcurrency: 5
|
|
||||||
|
|
||||||
# loads the aggregation report for the given strategy based on different tickers
|
|
||||||
get_aggregate_interval:
|
|
||||||
memorySize: 128
|
|
||||||
handler: freqtrade/aws/aggregate/strategy.ticker
|
|
||||||
events:
|
|
||||||
- http:
|
|
||||||
path: strategies/{user}/{name}/aggregate/ticker
|
|
||||||
method: get
|
|
||||||
cors: true
|
|
||||||
request:
|
|
||||||
parameter:
|
|
||||||
paths:
|
|
||||||
user: true
|
|
||||||
name: true
|
|
||||||
|
|
||||||
environment:
|
|
||||||
strategyTable: ${self:custom.strategyTable}
|
|
||||||
tradeTable: ${self:custom.tradeTable}
|
|
||||||
reservedConcurrency: 5
|
|
||||||
|
|
||||||
# loads the aggregation report for the given strategy based on different tickers
|
|
||||||
get_aggregate_timeframe:
|
|
||||||
memorySize: 128
|
|
||||||
handler: freqtrade/aws/aggregate/strategy.timeframe
|
|
||||||
events:
|
|
||||||
- http:
|
|
||||||
path: strategies/{user}/{name}/aggregate/timeframe
|
|
||||||
method: get
|
|
||||||
cors: true
|
|
||||||
request:
|
|
||||||
parameter:
|
|
||||||
paths:
|
|
||||||
user: true
|
|
||||||
name: true
|
|
||||||
|
|
||||||
environment:
|
|
||||||
strategyTable: ${self:custom.strategyTable}
|
|
||||||
tradeTable: ${self:custom.tradeTable}
|
|
||||||
reservedConcurrency: 5
|
|
||||||
|
|
||||||
#submits a new strategy to the system
|
|
||||||
submit:
|
|
||||||
memorySize: 128
|
|
||||||
handler: freqtrade/aws/strategy.submit
|
|
||||||
events:
|
|
||||||
- http:
|
|
||||||
path: strategies/submit
|
|
||||||
method: post
|
|
||||||
cors: true
|
|
||||||
|
|
||||||
environment:
|
|
||||||
topic: ${self:custom.snsTopic}
|
|
||||||
strategyTable: ${self:custom.strategyTable}
|
|
||||||
BASE_URL: ${self:custom.customDomain.domainName}/${self:custom.customDomain.stage}
|
|
||||||
reservedConcurrency: 5
|
|
||||||
|
|
||||||
#submits a new strategy to the system
|
|
||||||
submit_github:
|
|
||||||
memorySize: 128
|
|
||||||
handler: freqtrade/aws/strategy.submit_github
|
|
||||||
events:
|
|
||||||
- http:
|
|
||||||
path: strategies/submit/github
|
|
||||||
method: post
|
|
||||||
cors: true
|
|
||||||
|
|
||||||
environment:
|
|
||||||
topic: ${self:custom.snsTopic}
|
|
||||||
strategyTable: ${self:custom.strategyTable}
|
|
||||||
reservedConcurrency: 1
|
|
||||||
|
|
||||||
### TRADE REQUESTS
|
|
||||||
|
|
||||||
# loads all trades for a strategy and it's associated pairs
|
|
||||||
trades:
|
|
||||||
memorySize: 128
|
|
||||||
handler: freqtrade/aws/trade.get_trades
|
|
||||||
events:
|
|
||||||
- http:
|
|
||||||
path: strategies/{user}/{name}/{stake}/{asset}
|
|
||||||
method: get
|
|
||||||
cors: true
|
|
||||||
request:
|
|
||||||
parameter:
|
|
||||||
paths:
|
|
||||||
user: true
|
|
||||||
name: true
|
|
||||||
stake: true
|
|
||||||
asset: true
|
|
||||||
|
|
||||||
environment:
|
|
||||||
strategyTable: ${self:custom.strategyTable}
|
|
||||||
tradeTable: ${self:custom.tradeTable}
|
|
||||||
reservedConcurrency: 5
|
|
||||||
|
|
||||||
# submits a new trade to the system
|
|
||||||
trade:
|
|
||||||
memorySize: 128
|
|
||||||
handler: freqtrade/aws/trade.submit
|
|
||||||
events:
|
|
||||||
- http:
|
|
||||||
path: trade
|
|
||||||
method: post
|
|
||||||
cors: true
|
|
||||||
|
|
||||||
environment:
|
|
||||||
tradeTopic: ${self:custom.snsTradeTopic}
|
|
||||||
reservedConcurrency: 5
|
|
||||||
|
|
||||||
# query aggregates by day and ticker for all strategies
|
|
||||||
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}
|
|
||||||
|
|
||||||
reservedConcurrency: 5
|
|
||||||
### SNS TRIGGERED FUNCTIONS
|
|
||||||
|
|
||||||
# stores the received message in the trade table
|
|
||||||
trade-store:
|
|
||||||
memorySize: 128
|
|
||||||
handler: freqtrade/aws/trade.store
|
|
||||||
|
|
||||||
events:
|
|
||||||
- sns: ${self:custom.snsTradeTopic}
|
|
||||||
|
|
||||||
environment:
|
|
||||||
tradeTable: ${self:custom.tradeTable}
|
|
||||||
|
|
||||||
reservedConcurrency: 1
|
|
||||||
#backtests the strategy
|
|
||||||
#should be switched to utilze aws fargate instead
|
|
||||||
#and running a container
|
|
||||||
#so that we can evaluate long running tasks
|
|
||||||
backtest:
|
|
||||||
memorySize: 128
|
|
||||||
handler: freqtrade/aws/backtesting_lambda.backtest
|
|
||||||
|
|
||||||
events:
|
|
||||||
- sns: ${self:custom.snsTopic}
|
|
||||||
|
|
||||||
environment:
|
|
||||||
topic: ${self:custom.snsTopic}
|
|
||||||
tradeTable: ${self:custom.tradeTable}
|
|
||||||
strategyTable: ${self:custom.strategyTable}
|
|
||||||
BASE_URL: https://${self:custom.customDomain.domainName}/${self:custom.customDomain.stage}
|
|
||||||
|
|
||||||
reservedConcurrency: 1
|
|
||||||
|
|
||||||
# schedules all registered strategies on a daily base
|
|
||||||
schedule:
|
|
||||||
memorySize: 128
|
|
||||||
handler: freqtrade/aws/backtesting_lambda.cron
|
|
||||||
|
|
||||||
events:
|
|
||||||
- schedule:
|
|
||||||
rate: rate(1440 minutes)
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
environment:
|
|
||||||
topic: ${self:custom.snsTopic}
|
|
||||||
tradeTable: ${self:custom.tradeTable}
|
|
||||||
strategyTable: ${self:custom.strategyTable}
|
|
||||||
|
|
||||||
reservedConcurrency: 1
|
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
# --- Do not remove these libs ---
|
# --- Do not remove these libs ---
|
||||||
from freqtrade.strategy.interface import IStrategy
|
from freqtrade.strategy.interface import IStrategy
|
||||||
from pandas import DataFrame
|
from pandas import DataFrame
|
||||||
|
Loading…
Reference in New Issue
Block a user