]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Trader.git/blobdiff - main.py
Merge branch 'dev'
[perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Trader.git] / main.py
diff --git a/main.py b/main.py
index f465d8db0239022d620cb89cdf4948ee6c028b60..a7ad8f73db8e3983171b9727a9e0e898915c7b5b 100644 (file)
--- a/main.py
+++ b/main.py
@@ -1,5 +1,5 @@
 import configargparse
-import psycopg2
+import dbs
 import os
 import sys
 
@@ -63,37 +63,38 @@ def get_user_market(config_path, user_id, debug=False):
     if debug:
         args.append("--debug")
     args = parse_args(args)
-    pg_config = parse_config(args)
-    market_id, market_config, user_id = list(fetch_markets(pg_config, str(user_id)))[0]
-    return market.Market.from_config(market_config, args,
-            pg_config=pg_config, market_id=market_id,
-            user_id=user_id)
+    parse_config(args)
+    market_id, market_config, user_id, options = list(fetch_markets(str(user_id)))[0]
+    return market.Market.from_config(market_config, args, user_id=user_id, options=options)
 
-def fetch_markets(pg_config, user):
-    connection = psycopg2.connect(**pg_config)
-    cursor = connection.cursor()
+def fetch_markets(user):
+    cursor = dbs.psql.cursor()
 
     if user is None:
-        cursor.execute("SELECT id,config,user_id FROM market_configs")
+        cursor.execute("SELECT id,config,user_id,portfolio_profile FROM market_configs_augmented WHERE status='enabled'")
     else:
-        cursor.execute("SELECT id,config,user_id FROM market_configs WHERE user_id = %s", user)
+        cursor.execute("SELECT id,config,user_id,portfolio_profile FROM market_configs_augmented WHERE status='enabled' AND user_id = %s", [user])
 
     for row in cursor:
-        yield row
+        options = {
+                "liquidity": parse_liquidity(row[3])
+                }
+        yield row[0:3] + (options,)
+
+def parse_liquidity(value):
+    if value == "high-liquidity":
+        return "high"
+    elif value == "medium-liquidity":
+        return "medium"
+    else:
+        return None
 
 def parse_config(args):
-    pg_config = {
-            "host": args.db_host,
-            "port": args.db_port,
-            "user": args.db_user,
-            "password": args.db_password,
-            "database": args.db_database,
-            }
-    del(args.db_host)
-    del(args.db_port)
-    del(args.db_user)
-    del(args.db_password)
-    del(args.db_database)
+    if args.db_host is not None:
+        dbs.connect_psql(args)
+
+    if args.redis_host is not None:
+        dbs.connect_redis(args)
 
     report_path = args.report_path
 
@@ -101,8 +102,6 @@ def parse_config(args):
             os.path.exists(report_path):
         os.makedirs(report_path)
 
-    return pg_config
-
 def parse_args(argv):
     parser = configargparse.ArgumentParser(
             description="Run the trade bot.")
@@ -134,6 +133,10 @@ def parse_args(argv):
             help="Store report to database (default)")
     parser.add_argument("--no-report-db", action='store_false', dest="report_db",
             help="Don't store report to database")
+    parser.add_argument("--report-redis", action='store_true', default=False, dest="report_redis",
+            help="Store report to redis")
+    parser.add_argument("--no-report-redis", action='store_false', dest="report_redis",
+            help="Don't store report to redis (default)")
     parser.add_argument("--report-path", required=False,
             help="Where to store the reports (default: absent, don't store)")
     parser.add_argument("--no-report-path", action='store_const', dest='report_path', const=None,
@@ -148,17 +151,23 @@ def parse_args(argv):
             help="Password access to database (default: cryptoportfolio)")
     parser.add_argument("--db-database", default="cryptoportfolio",
             help="Database access to database (default: cryptoportfolio)")
+    parser.add_argument("--redis-host", default="localhost",
+            help="Host access to database (default: localhost). Use path for socket")
+    parser.add_argument("--redis-port", default=6379,
+            help="Port access to redis (default: 6379)")
+    parser.add_argument("--redis-database", default=0,
+            help="Redis database to use (default: 0)")
 
     parsed = parser.parse_args(argv)
     if parsed.action is None:
         parsed.action = ["sell_all"]
     return parsed
 
-def process(market_config, market_id, user_id, args, pg_config):
+def process(market_config, market_id, user_id, args, options):
     try:
         market.Market\
                 .from_config(market_config, args, market_id=market_id,
-                        pg_config=pg_config, user_id=user_id)\
+                        user_id=user_id, options=options)\
                 .process(args.action, before=args.before, after=args.after)
     except Exception as e:
         print("{}: {}".format(e.__class__.__name__, e))
@@ -166,7 +175,7 @@ def process(market_config, market_id, user_id, args, pg_config):
 def main(argv):
     args = parse_args(argv)
 
-    pg_config = parse_config(args)
+    parse_config(args)
 
     market.Portfolio.report.set_verbose(not args.quiet)
 
@@ -182,8 +191,8 @@ def main(argv):
     else:
         process_ = process
 
-    for market_id, market_config, user_id in fetch_markets(pg_config, args.user):
-        process_(market_config, market_id, user_id, args, pg_config)
+    for market_id, market_config, user_id, options in fetch_markets(args.user):
+        process_(market_config, market_id, user_id, args, options)
 
     if args.parallel:
         for thread in threads: