- ticker_cache[(c1, c2, market.__class__)] = market.fetch_ticker("{}/{}".format(c1, c2))
- augment_ticker(ticker_cache[(c1, c2, market.__class__)])
- except ExchangeError:
- try:
- ticker_cache[(c2, c1, market.__class__)] = market.fetch_ticker("{}/{}".format(c2, c1))
- augment_ticker(ticker_cache[(c2, c1, market.__class__)])
- except ExchangeError:
- ticker_cache[(c1, c2, market.__class__)] = None
- return get_ticker(c1, c2, market)
-
-fees_cache = {}
-def fetch_fees(market):
- global fees_cache
- if market.__class__ not in fees_cache:
- fees_cache[market.__class__] = market.fetch_fees()
- return fees_cache[market.__class__]
-
-def prepare_trades(market, base_currency="BTC", liquidity="medium", compute_value="average", debug=False):
- BalanceStore.fetch_balances(market)
- values_in_base = BalanceStore.in_currency(base_currency, market, compute_value=compute_value)
- total_base_value = sum(values_in_base.values())
- new_repartition = BalanceStore.dispatch_assets(total_base_value, liquidity=liquidity)
- # Recompute it in case we have new currencies
- values_in_base = BalanceStore.in_currency(base_currency, market, compute_value=compute_value)
- TradeStore.compute_trades(values_in_base, new_repartition, market=market, debug=debug)
-
-def update_trades(market, base_currency="BTC", liquidity="medium", compute_value="average", only=None, debug=False):
- BalanceStore.fetch_balances(market)
- values_in_base = BalanceStore.in_currency(base_currency, market, compute_value=compute_value)
- total_base_value = sum(values_in_base.values())
- new_repartition = BalanceStore.dispatch_assets(total_base_value, liquidity=liquidity)
- TradeStore.compute_trades(values_in_base, new_repartition, only=only, market=market, debug=debug)
-
-def prepare_trades_to_sell_all(market, base_currency="BTC", compute_value="average", debug=False):
- BalanceStore.fetch_balances(market)
- values_in_base = BalanceStore.in_currency(base_currency, market, compute_value=compute_value)
- total_base_value = sum(values_in_base.values())
- new_repartition = BalanceStore.dispatch_assets(total_base_value, repartition={ base_currency: (1, "long") })
- TradeStore.compute_trades(values_in_base, new_repartition, market=market, debug=debug)
-
-def follow_orders(verbose=True, sleep=None):
- if sleep is None:
- sleep = 7 if TradeStore.debug else 30
- tick = 0
- while len(TradeStore.all_orders(state="open")) > 0:
- time.sleep(sleep)
- tick += 1
- for order in TradeStore.all_orders(state="open"):
- if order.get_status() != "open":
- if verbose:
- print("finished {}".format(order))
- else:
- order.trade.update_order(order, tick)
- if verbose:
- print("All orders finished")