X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=store.py;h=c581608ca9ad67338cea98a2ae86457011d375b2;hb=aca4d4372553110ab5d76740ff536de83d5617b2;hp=bebd127f14f482010f52eb73407484b214f96cce;hpb=2033e7fef780298be2ec15455a0ec1d26515de55;p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FCryptoportfolio%2FTrader.git diff --git a/store.py b/store.py index bebd127..c581608 100644 --- a/store.py +++ b/store.py @@ -2,6 +2,7 @@ import portfolio import simplejson as json from decimal import Decimal as D, ROUND_DOWN from datetime import date, datetime +import inspect __all__ = ["BalanceStore", "ReportStore", "TradeStore"] @@ -55,6 +56,9 @@ class ReportStore: compute_value, type): values = {} rates = {} + if callable(compute_value): + compute_value = inspect.getsource(compute_value).strip() + for currency, amount in amounts.items(): values[currency] = amount.as_json()["value"] rates[currency] = amount.rate @@ -92,6 +96,8 @@ class ReportStore: }) def log_orders(self, orders, tick=None, only=None, compute_value=None): + if callable(compute_value): + compute_value = inspect.getsource(compute_value).strip() self.print_log("[Orders]") self.market.trades.print_all_with_order(ind="\t") self.add_log({ @@ -104,6 +110,8 @@ class ReportStore: def log_order(self, order, tick, finished=False, update=None, new_order=None, compute_value=None): + if callable(compute_value): + compute_value = inspect.getsource(compute_value).strip() if finished: self.print_log("[Order] Finished {}".format(order)) elif update == "waiting": @@ -201,8 +209,7 @@ class BalanceStore: amounts[currency] = ptt * amount / sum_ratio if trade_type == "short": amounts[currency] = - amounts[currency] - if currency not in self.all: - self.all[currency] = portfolio.Balance(currency, {}) + self.all.setdefault(currency, portfolio.Balance(currency, {})) self.market.report.log_dispatch(amount, amounts, liquidity, repartition) return amounts @@ -214,6 +221,10 @@ class TradeStore: self.market = market self.all = [] + @property + def pending(self): + return list(filter(lambda t: not t.is_fullfiled, self.all)) + def compute_trades(self, values_in_base, new_repartition, only=None): computed_trades = [] base_currency = sum(values_in_base.values()).currency @@ -248,7 +259,7 @@ class TradeStore: def prepare_orders(self, only=None, compute_value="default"): orders = [] - for trade in self.all: + for trade in self.pending: if only is None or trade.action == only: orders.append(trade.prepare_order(compute_value=compute_value)) self.market.report.log_orders(orders, only, compute_value)