+def make_order(market, value, currency, action="acquire",
+ close_if_possible=False, base_currency="BTC", follow=True,
+ compute_value="average"):
+ """
+ Make an order on market
+ "market": The market on which to place the order
+ "value": The value in *base_currency* to acquire,
+ or in *currency* to dispose.
+ use negative for margin trade.
+ "action": "acquire" or "dispose".
+ "acquire" will buy long or sell short,
+ "dispose" will sell long or buy short.
+ "currency": The currency to acquire or dispose
+ "base_currency": The base currency. The value is expressed in that
+ currency (default: BTC)
+ "follow": Whether to follow the order once run (default: True)
+ "close_if_possible": Whether to try to close the position at the end
+ of the trade, i.e. reach exactly 0 at the end
+ (only meaningful in "dispose"). May have
+ unwanted effects if the end value of the
+ currency is not 0.
+ "compute_value": Compute value to place the order
+ """
+ market.report.log_stage("make_order_begin")
+ market.balances.fetch_balances(tag="make_order_begin")
+ if action == "acquire":
+ trade = portfolio.Trade(
+ portfolio.Amount(base_currency, 0),
+ portfolio.Amount(base_currency, value),
+ currency, market)
+ else:
+ amount = portfolio.Amount(currency, value)
+ trade = portfolio.Trade(
+ amount.in_currency(base_currency, market, compute_value=compute_value),
+ portfolio.Amount(base_currency, 0),
+ currency, market)
+ market.trades.all.append(trade)
+ order = trade.prepare_order(
+ close_if_possible=close_if_possible,
+ compute_value=compute_value)
+ market.report.log_orders([order], None, compute_value)
+ market.trades.run_orders()
+ if follow:
+ market.follow_orders()
+ market.balances.fetch_balances(tag="make_order_end")
+ else:
+ market.report.log_stage("make_order_end_not_followed")
+ return order
+ market.report.log_stage("make_order_end")
+
+def get_user_market(config_path, user_id, debug=False):
+ import market
+ pg_config, report_path = main_parse_config(config_path)
+ market_config = list(main_fetch_markets(pg_config, str(user_id)))[0][0]
+ return market.Market.from_config(market_config, debug=debug)
+