2017-09-08 22:31:40 +00:00
|
|
|
import enum
|
|
|
|
|
|
|
|
from wrapt import synchronized
|
|
|
|
|
|
|
|
|
|
|
|
class State(enum.Enum):
|
|
|
|
RUNNING = 0
|
|
|
|
STOPPED = 1
|
|
|
|
|
|
|
|
|
|
|
|
# Current application state
|
|
|
|
_STATE = State.STOPPED
|
|
|
|
|
|
|
|
|
|
|
|
@synchronized
|
|
|
|
def update_state(state: State) -> None:
|
|
|
|
"""
|
|
|
|
Updates the application state
|
|
|
|
:param state: new state
|
|
|
|
:return: None
|
|
|
|
"""
|
|
|
|
global _STATE
|
|
|
|
_STATE = state
|
|
|
|
|
|
|
|
|
|
|
|
@synchronized
|
|
|
|
def get_state() -> State:
|
|
|
|
"""
|
|
|
|
Gets the current application state
|
|
|
|
:return:
|
|
|
|
"""
|
|
|
|
return _STATE
|
|
|
|
|
2017-05-12 17:11:56 +00:00
|
|
|
|
2017-09-01 23:10:21 +00:00
|
|
|
# Required json-schema for user specified config
|
2017-09-08 21:10:22 +00:00
|
|
|
CONF_SCHEMA = {
|
2017-09-01 23:10:21 +00:00
|
|
|
'type': 'object',
|
|
|
|
'properties': {
|
2017-09-08 05:49:50 +00:00
|
|
|
'max_open_trades': {'type': 'integer', 'minimum': 1},
|
2017-09-08 05:51:10 +00:00
|
|
|
'stake_currency': {'type': 'string', 'enum': ['BTC', 'ETH', 'USDT']},
|
2017-09-08 05:45:27 +00:00
|
|
|
'stake_amount': {'type': 'number', 'minimum': 0.0005},
|
2017-09-01 23:10:21 +00:00
|
|
|
'dry_run': {'type': 'boolean'},
|
|
|
|
'minimal_roi': {
|
|
|
|
'type': 'object',
|
|
|
|
'patternProperties': {
|
|
|
|
'^[0-9.]+$': {'type': 'number'}
|
|
|
|
},
|
|
|
|
'minProperties': 1
|
|
|
|
},
|
2017-09-07 14:31:55 +00:00
|
|
|
'stoploss': {'type': 'number', 'maximum': 0, 'exclusiveMaximum': True},
|
2017-09-01 23:10:21 +00:00
|
|
|
'bittrex': {'$ref': '#/definitions/exchange'},
|
|
|
|
'telegram': {
|
|
|
|
'type': 'object',
|
|
|
|
'properties': {
|
|
|
|
'enabled': {'type': 'boolean'},
|
|
|
|
'token': {'type': 'string'},
|
|
|
|
'chat_id': {'type': 'string'},
|
|
|
|
},
|
|
|
|
'required': ['enabled', 'token', 'chat_id']
|
2017-09-08 22:31:40 +00:00
|
|
|
},
|
|
|
|
'initial_state': {'type': 'string', 'enum': ['running', 'stopped']},
|
2017-09-01 23:10:21 +00:00
|
|
|
},
|
|
|
|
'definitions': {
|
|
|
|
'exchange': {
|
|
|
|
'type': 'object',
|
|
|
|
'properties': {
|
|
|
|
'enabled': {'type': 'boolean'},
|
|
|
|
'key': {'type': 'string'},
|
|
|
|
'secret': {'type': 'string'},
|
|
|
|
'pair_whitelist': {
|
|
|
|
'type': 'array',
|
|
|
|
'items': {'type': 'string'},
|
|
|
|
'uniqueItems': True
|
|
|
|
}
|
|
|
|
},
|
|
|
|
'required': ['enabled', 'key', 'secret', 'pair_whitelist']
|
|
|
|
}
|
|
|
|
},
|
|
|
|
'anyOf': [
|
|
|
|
{'required': ['bittrex']}
|
|
|
|
],
|
|
|
|
'required': [
|
|
|
|
'max_open_trades',
|
|
|
|
'stake_currency',
|
|
|
|
'stake_amount',
|
|
|
|
'dry_run',
|
|
|
|
'minimal_roi',
|
|
|
|
'telegram'
|
|
|
|
]
|
|
|
|
}
|