diff --git a/catalyst/__main__.py b/catalyst/__main__.py index 6df67fde..1b08f69d 100644 --- a/catalyst/__main__.py +++ b/catalyst/__main__.py @@ -14,7 +14,6 @@ from catalyst.exchange.exchange_bundle import ExchangeBundle from catalyst.exchange.utils.exchange_utils import delete_algo_folder from catalyst.utils.cli import Date, Timestamp from catalyst.utils.run_algo import _run, load_extensions -from catalyst.utils.run_server import run_server try: __IPYTHON__ @@ -506,179 +505,6 @@ def live(ctx, return perf -@main.command(name='serve-live') -@click.option( - '-f', - '--algofile', - default=None, - type=click.File('r'), - help='The file that contains the algorithm to run.', -) -@click.option( - '--capital-base', - type=float, - show_default=True, - help='The amount of capital (in base_currency) allocated to trading.', -) -@click.option( - '-t', - '--algotext', - help='The algorithm script to run.', -) -@click.option( - '-D', - '--define', - multiple=True, - help="Define a name to be bound in the namespace before executing" - " the algotext. For example '-Dname=value'. The value may be" - " any python expression. These are evaluated in order so they" - " may refer to previously defined names.", -) -@click.option( - '-o', - '--output', - default='-', - metavar='FILENAME', - show_default=True, - help="The location to write the perf data. If this is '-' the perf will" - " be written to stdout.", -) -@click.option( - '--print-algo/--no-print-algo', - is_flag=True, - default=False, - help='Print the algorithm to stdout.', -) -@ipython_only(click.option( - '--local-namespace/--no-local-namespace', - is_flag=True, - default=None, - help='Should the algorithm methods be resolved in the local namespace.' -)) -@click.option( - '-x', - '--exchange-name', - help='The name of the targeted exchange.', -) -@click.option( - '-n', - '--algo-namespace', - help='A label assigned to the algorithm for data storage purposes.' -) -@click.option( - '-c', - '--base-currency', - help='The base currency used to calculate statistics ' - '(e.g. usd, btc, eth).', -) -@click.option( - '-e', - '--end', - type=Date(tz='utc', as_timestamp=True), - help='An optional end date at which to stop the execution.', -) -@click.option( - '--live-graph/--no-live-graph', - is_flag=True, - default=False, - help='Display live graph.', -) -@click.option( - '--simulate-orders/--no-simulate-orders', - is_flag=True, - default=True, - help='Simulating orders enable the paper trading mode. No orders will be ' - 'sent to the exchange unless set to false.', -) -@click.option( - '--auth-aliases', - default=None, - help='Authentication file aliases for the specified exchanges. By default,' - 'each exchange uses the "auth.json" file in the exchange folder. ' - 'Specifying an "auth2" alias would use "auth2.json". It should be ' - 'specified like this: "[exchange_name],[alias],..." For example, ' - '"binance,auth2" or "binance,auth2,bittrex,auth2".', -) -@click.pass_context -def serve_live(ctx, - algofile, - capital_base, - algotext, - define, - output, - print_algo, - local_namespace, - exchange_name, - algo_namespace, - base_currency, - end, - live_graph, - auth_aliases, - simulate_orders): - """Trade live with the given algorithm on the server. - """ - if (algotext is not None) == (algofile is not None): - ctx.fail( - "must specify exactly one of '-f' / '--algofile' or" - " '-t' / '--algotext'", - ) - - if exchange_name is None: - ctx.fail("must specify an exchange name '-x'") - - if algo_namespace is None: - ctx.fail("must specify an algorithm name '-n' in live execution mode") - - if base_currency is None: - ctx.fail("must specify a base currency '-c' in live execution mode") - - if capital_base is None: - ctx.fail("must specify a capital base with '--capital-base'") - - if simulate_orders: - click.echo('Running in paper trading mode.', sys.stdout) - - else: - click.echo('Running in live trading mode.', sys.stdout) - - perf = run_server( - initialize=None, - handle_data=None, - before_trading_start=None, - analyze=None, - algofile=algofile, - algotext=algotext, - defines=define, - data_frequency=None, - capital_base=capital_base, - data=None, - bundle=None, - bundle_timestamp=None, - start=None, - end=end, - output=output, - print_algo=print_algo, - local_namespace=local_namespace, - environ=os.environ, - live=True, - exchange=exchange_name, - algo_namespace=algo_namespace, - base_currency=base_currency, - live_graph=live_graph, - analyze_live=None, - simulate_orders=simulate_orders, - auth_aliases=auth_aliases, - stats_output=None, - ) - - if output == '-': - click.echo(str(perf), sys.stdout) - elif output != os.devnull: # make the catalyst magic not write any data - perf.to_pickle(output) - - return perf - - @main.command(name='ingest-exchange') @click.option( '-x', diff --git a/catalyst/exchange/utils/exchange_utils.py b/catalyst/exchange/utils/exchange_utils.py index 658a7002..5c40a26d 100644 --- a/catalyst/exchange/utils/exchange_utils.py +++ b/catalyst/exchange/utils/exchange_utils.py @@ -446,13 +446,12 @@ def remove_old_files(algo_name, today, rel_path, environ=None): # run on all files in the folder for f in os.listdir(folder): try: - file_path = os.path.join(folder, f) - creation_unix = os.path.getctime(file_path) - creation_time = pd.to_datetime(creation_unix, unit='s', utc=True) + creation_unix = os.path.getctime(os.path.join(folder, f)) + creation_time = pd.to_datetime(creation_unix, unit='s', ) # if the file is older than 30 days erase it if today - pd.DateOffset(30) > creation_time: - os.unlink(file_path) + os.unlink(f) except OSError: error = 'unable to erase files in {}'.format(folder) diff --git a/catalyst/utils/run_server.py b/catalyst/utils/run_server.py deleted file mode 100644 index 2d4e7d02..00000000 --- a/catalyst/utils/run_server.py +++ /dev/null @@ -1,65 +0,0 @@ -import requests -import base64 -import json - - -def run_server(handle_data, - initialize, - before_trading_start, - analyze, - algofile, - algotext, - defines, - data_frequency, - capital_base, - data, - bundle, - bundle_timestamp, - start, - end, - output, - print_algo, - local_namespace, - environ, - live, - exchange, - algo_namespace, - base_currency, - live_graph, - analyze_live, - simulate_orders, - auth_aliases, - stats_output): - - json_file = {'arguments': { - 'handle_data': handle_data, - 'initialize': initialize, - 'before_trading_start': before_trading_start, - 'analyze': analyze, - 'algofile': base64.b64encode(algofile.read()), - 'algotext': algotext, - 'defines': defines, - 'data_frequency': data_frequency, - 'capital_base': capital_base, - 'data': data, - 'bundle': bundle, - 'bundle_timestamp': bundle_timestamp, - 'start': start, - 'end': end, - 'output': output, - 'print_algo': print_algo, - 'local_namespace': local_namespace, - 'environ': None, - 'live': False, - 'exchange': exchange, - 'algo_namespace': algo_namespace, - 'base_currency': base_currency, - 'live_graph': live_graph, - 'analyze_live': analyze_live, - 'simulate_orders': simulate_orders, - 'auth_aliases': auth_aliases, - 'stats_output': stats_output, - }} - - url = 'http://127.0.0.1:5000/todo/api/v1.0/tasks' - response = requests.post(url, json=json_file) diff --git a/docs/source/install.rst b/docs/source/install.rst index 6ef366b5..5c24159f 100644 --- a/docs/source/install.rst +++ b/docs/source/install.rst @@ -89,7 +89,7 @@ Once either Conda or MiniConda has been set up you can install Catalyst: .. code-block:: bash - conda env create -f python2.7-environment.yml + conda env create -f python2.7-environment.yml 4. Activate the environment (which you need to do every time you start a new session to run Catalyst): @@ -132,19 +132,10 @@ with the following steps: conda env remove --name catalyst 2. Create the environment: - - for python 2.7: .. code-block:: bash conda create --name catalyst python=2.7 scipy zlib - - or for python 3.6: - - .. code-block:: bash - - conda create --name catalyst python=3.6 scipy zlib - 3. Activate the environment: