]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Trader.git/blobdiff - store.py
Move market processing to single method
[perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Trader.git] / store.py
index c581608ca9ad67338cea98a2ae86457011d375b2..d25dd35d1b06efe8f73b812c90cb1d51a66448cc 100644 (file)
--- a/store.py
+++ b/store.py
@@ -27,18 +27,29 @@ class ReportStore:
             if isinstance(obj, (datetime, date)):
                 return obj.isoformat()
             return str(obj)
-        return json.dumps(self.logs, default=default_json_serial)
+        return json.dumps(self.logs, default=default_json_serial, indent="  ")
 
     def set_verbose(self, verbose_print):
         self.verbose_print = verbose_print
 
-    def log_stage(self, stage):
+    def log_stage(self, stage, **kwargs):
+        def as_json(element):
+            if callable(element):
+                return inspect.getsource(element).strip()
+            elif hasattr(element, "as_json"):
+                return element.as_json()
+            else:
+                return element
+
+        args = { k: as_json(v) for k, v in kwargs.items() }
+        args_str = ["{}={}".format(k, v) for k, v in args.items()]
         self.print_log("-" * (len(stage) + 8))
-        self.print_log("[Stage] {}".format(stage))
+        self.print_log("[Stage] {} {}".format(stage, ", ".join(args_str)))
 
         self.add_log({
             "type": "stage",
             "stage": stage,
+            "args": args,
             })
 
     def log_balances(self, tag=None):
@@ -223,7 +234,7 @@ class TradeStore:
 
     @property
     def pending(self):
-        return list(filter(lambda t: not t.is_fullfiled, self.all))
+        return list(filter(lambda t: t.pending, self.all))
 
     def compute_trades(self, values_in_base, new_repartition, only=None):
         computed_trades = []
@@ -264,6 +275,10 @@ class TradeStore:
                 orders.append(trade.prepare_order(compute_value=compute_value))
         self.market.report.log_orders(orders, only, compute_value)
 
+    def close_trades(self):
+        for trade in self.all:
+            trade.close()
+
     def print_all_with_order(self, ind=""):
         for trade in self.all:
             trade.print_with_order(ind=ind)