Source code for robin_stocks.gemini.orders

from robin_stocks.gemini.authentication import (generate_order_id,
                                                generate_signature)
from robin_stocks.gemini.crypto import get_price
from robin_stocks.gemini.helper import (format_inputs, login_required,
                                        request_post)
from robin_stocks.gemini.urls import URLS


[docs]@login_required @format_inputs def get_trades_for_crypto(ticker, limit_trades=50, timestamp=None, jsonify=None): """ Gets a list of all transactions for a certain crypto. :param ticker: The ticker of the crypto. :type ticker: str :param limit_trades: The maximum number of trades to return. Default is 50, max is 500. :type limit_trades: Optional[int] :param timestamp: Only return trades on or after this timestamp. If not present, will show the most recent orders :type timestamp: Optional[str] :param jsonify: If set to false, will return the raw response object. \ If set to True, will return a dictionary parsed using the JSON format. :type jsonify: Optional[str] :returns: Returns a tuple where the first entry in the tuple is a requests reponse object \ or a list of dictionaries parsed using the JSON format and the second entry is an error string or \ None if there was not an error. \ The keys for the dictionaries are listed below. :Dictionary Keys: * price * amount * timestamp * timestampms * type * aggressor * fee_currency * fee_amount * tid * order_id * exchange * is_auction_fill * client_order_id """ url = URLS.mytrades() payload = { "request": URLS.get_endpoint(url), "symbol": ticker, "limit_trades": limit_trades } if timestamp: payload["timestamp"] = timestamp generate_signature(payload) data, err = request_post(url, payload, jsonify) return data, err
[docs]@login_required @format_inputs def cancel_all_session_orders(jsonify=None): """ Cancel all orders opened by the session. :param jsonify: If set to false, will return the raw response object. \ If set to True, will return a dictionary parsed using the JSON format. :type jsonify: Optional[str] :returns: Returns a tuple where the first entry in the tuple is a requests reponse object \ or a dictionary parsed using the JSON format and the second entry is an error string or \ None if there was not an error. \ The keys for the dictionary are listed below. :Dictionary Keys: * result * details """ url = URLS.cancel_session_orders() payload = { "request": URLS.get_endpoint(url) } generate_signature(payload) data, err = request_post(url, payload, jsonify) return data, err
[docs]@login_required @format_inputs def cancel_all_active_orders(jsonify=None): """ Cancel all orders for all sessions opened by the account. :param jsonify: If set to false, will return the raw response object. \ If set to True, will return a dictionary parsed using the JSON format. :type jsonify: Optional[str] :returns: Returns a tuple where the first entry in the tuple is a requests reponse object \ or a dictionary parsed using the JSON format and the second entry is an error string or \ None if there was not an error. \ The keys for the dictionary are listed below. :Dictionary Keys: * result * details """ url = URLS.cancel_active_orders() payload = { "request": URLS.get_endpoint(url) } generate_signature(payload) data, err = request_post(url, payload, jsonify) return data, err
[docs]@login_required @format_inputs def cancel_order(order_id, jsonify=None): """ Cancel a specific order based on ID. :param order_id: The id of the order. This is not the same as the client order ID. :type order_id: str :param jsonify: If set to false, will return the raw response object. \ If set to True, will return a dictionary parsed using the JSON format. :type jsonify: Optional[str] :returns: Returns a tuple where the first entry in the tuple is a requests reponse object \ or a dictionary parsed using the JSON format and the second entry is an error string or \ None if there was not an error. \ The keys for the dictionary are listed below. :Dictionary Keys: * order_id - The order id * client_order_id - An optional client-specified order id * symbol - The symbol of the order * exchange - Will always be "gemini" * price - The price the order was issued at * avg_execution_price - The average price at which this order as been executed so far. 0 if the order has not been executed at all. * side - Either "buy" or "sell". * type - Description of the order. * options - An array containing at most one supported order execution option. * timestamp - The timestamp the order was submitted. Note that for compatibility reasons, this is returned as a string. We recommend using the timestampms field instead. * timestampms - The timestamp the order was submitted in milliseconds. * is_live - true if the order is active on the book (has remaining quantity and has not been canceled) * is_cancelled - true if the order has been canceled. Note the spelling, "cancelled" instead of "canceled". This is for compatibility reasons. * reason - Populated with the reason your order was canceled, if available. * was_forced - Will always be false. * executed_amount - The amount of the order that has been filled. * remaining_amount - The amount of the order that has not been filled. * original_amount - The originally submitted amount of the order. * is_hidden - Will always return false unless the order was placed with the indication-of-interest execution option. """ url = URLS.cancel_order() payload = { "request": URLS.get_endpoint(url), "order_id": order_id } generate_signature(payload) data, err = request_post(url, payload, jsonify) return data, err
[docs]@login_required @format_inputs def order_status(order_id, jsonify=None): """ Get the status for an order. :param order_id: The id of the order. This is not the same as the client order ID. :type order_id: str :param jsonify: If set to false, will return the raw response object. \ If set to True, will return a dictionary parsed using the JSON format. :type jsonify: Optional[str] :returns: Returns a tuple where the first entry in the tuple is a requests reponse object \ or a dictionary parsed using the JSON format and the second entry is an error string or \ None if there was not an error. \ The keys for the dictionary are listed below. :Dictionary Keys: * order_id - The order id * client_order_id - An optional client-specified order id * symbol - The symbol of the order * exchange - Will always be "gemini" * price - The price the order was issued at * avg_execution_price - The average price at which this order as been executed so far. 0 if the order has not been executed at all. * side - Either "buy" or "sell". * type - Description of the order. * options - An array containing at most one supported order execution option. * timestamp - The timestamp the order was submitted. Note that for compatibility reasons, this is returned as a string. We recommend using the timestampms field instead. * timestampms - The timestamp the order was submitted in milliseconds. * is_live - true if the order is active on the book (has remaining quantity and has not been canceled) * is_cancelled - true if the order has been canceled. Note the spelling, "cancelled" instead of "canceled". This is for compatibility reasons. * reason - Populated with the reason your order was canceled, if available. * was_forced - Will always be false. * executed_amount - The amount of the order that has been filled. * remaining_amount - The amount of the order that has not been filled. * original_amount - The originally submitted amount of the order. * is_hidden - Will always return false unless the order was placed with the indication-of-interest execution option. """ url = URLS.order_status() payload = { "request": URLS.get_endpoint(url), "order_id": order_id } generate_signature(payload) data, err = request_post(url, payload, jsonify) return data, err
[docs]@login_required @format_inputs def active_orders(jsonify=None): """ Get a list of all active orders. :param jsonify: If set to false, will return the raw response object. \ If set to True, will return a dictionary parsed using the JSON format. :type jsonify: Optional[str] :returns: Returns a tuple where the first entry in the tuple is a requests reponse object \ or a list of dictionaries parsed using the JSON format and the second entry is an error string or \ None if there was not an error. \ The keys for the dictionaries are listed below. :Dictionary Keys: * order_id - The order id * client_order_id - An optional client-specified order id * symbol - The symbol of the order * exchange - Will always be "gemini" * price - The price the order was issued at * avg_execution_price - The average price at which this order as been executed so far. 0 if the order has not been executed at all. * side - Either "buy" or "sell". * type - Description of the order. * options - An array containing at most one supported order execution option. * timestamp - The timestamp the order was submitted. Note that for compatibility reasons, this is returned as a string. We recommend using the timestampms field instead. * timestampms - The timestamp the order was submitted in milliseconds. * is_live - true if the order is active on the book (has remaining quantity and has not been canceled) * is_cancelled - true if the order has been canceled. Note the spelling, "cancelled" instead of "canceled". This is for compatibility reasons. * reason - Populated with the reason your order was canceled, if available. * was_forced - Will always be false. * executed_amount - The amount of the order that has been filled. * remaining_amount - The amount of the order that has not been filled. * original_amount - The originally submitted amount of the order. * is_hidden - Will always return false unless the order was placed with the indication-of-interest execution option. """ url = URLS.active_orders() payload = { "request": URLS.get_endpoint(url) } generate_signature(payload) data, err = request_post(url, payload, jsonify) return data, err
[docs]@login_required @format_inputs def order_market(ticker, quantity, side, jsonify=None): """ Gemini does not directly support market orders. This function will try to immediately place an order or it will cancel it. :param ticker: The ticker of the crypto. :type ticker: str :param quantity: The amount to trade. :type quantity: str :param side: Either "buy" or "sell". :type side: str :param jsonify: If set to false, will return the raw response object. \ If set to True, will return a dictionary parsed using the JSON format. :type jsonify: Optional[str] :returns: Returns a tuple where the first entry in the tuple is a requests reponse object \ or a dictionary parsed using the JSON format and the second entry is an error string or \ None if there was not an error. \ The keys for the dictionary are listed below. :Dictionary Keys: * order_id - The order id * client_order_id - An optional client-specified order id * symbol - The symbol of the order * exchange - Will always be "gemini" * price - The price the order was issued at * avg_execution_price - The average price at which this order as been executed so far. 0 if the order has not been executed at all. * side - Either "buy" or "sell". * type - Description of the order. * options - An array containing at most one supported order execution option. * timestamp - The timestamp the order was submitted. Note that for compatibility reasons, this is returned as a string. We recommend using the timestampms field instead. * timestampms - The timestamp the order was submitted in milliseconds. * is_live - true if the order is active on the book (has remaining quantity and has not been canceled) * is_cancelled - true if the order has been canceled. Note the spelling, "cancelled" instead of "canceled". This is for compatibility reasons. * reason - Populated with the reason your order was canceled, if available. * was_forced - Will always be false. * executed_amount - The amount of the order that has been filled. * remaining_amount - The amount of the order that has not been filled. * original_amount - The originally submitted amount of the order. * is_hidden - Will always return false unless the order was placed with the indication-of-interest execution option. """ if side == "buy": far_limit_price = float(get_price(ticker, side)) * 10 else: far_limit_price = float(get_price(ticker, side)) / 10 price = str(round(far_limit_price, 2)) return order(ticker, quantity, side, price, None, None, ["immediate-or-cancel"], jsonify=jsonify)
[docs]@login_required @format_inputs def order(ticker, quantity, side, price=None, stop_limit_price=None, min_amount=None, options=None, jsonify=None): """ A generic order that can be used for any cryptocurrency. :param ticker: The ticker of the crypto. :type ticker: str :param quantity: The amount to trade. :type quantity: str :param side: Either "buy" or "sell". :type side: str :param price: Set this value to set a limit price. :type price: Optional[str] :param stop_limit_price: Set this value to set a stop price. :type stop_limit_price: Optional[str] :param min_amount: Minimum decimal amount to purchase, for block trades only. :type min_amount: Optional[str] :param options: An optional array containing at most one supported order execution option. :type options: Optional[str] :param jsonify: If set to false, will return the raw response object. \ If set to True, will return a dictionary parsed using the JSON format. :type jsonify: Optional[str] :returns: Returns a tuple where the first entry in the tuple is a requests reponse object \ or a dictionary parsed using the JSON format and the second entry is an error string or \ None if there was not an error. \ The keys for the dictionary are listed below. :Dictionary Keys: * order_id - The order id * client_order_id - An optional client-specified order id * symbol - The symbol of the order * exchange - Will always be "gemini" * price - The price the order was issued at * avg_execution_price - The average price at which this order as been executed so far. 0 if the order has not been executed at all. * side - Either "buy" or "sell". * type - Description of the order. * options - An array containing at most one supported order execution option. * timestamp - The timestamp the order was submitted. Note that for compatibility reasons, this is returned as a string. We recommend using the timestampms field instead. * timestampms - The timestamp the order was submitted in milliseconds. * is_live - true if the order is active on the book (has remaining quantity and has not been canceled) * is_cancelled - true if the order has been canceled. Note the spelling, "cancelled" instead of "canceled". This is for compatibility reasons. * reason - Populated with the reason your order was canceled, if available. * was_forced - Will always be false. * executed_amount - The amount of the order that has been filled. * remaining_amount - The amount of the order that has not been filled. * original_amount - The originally submitted amount of the order. * is_hidden - Will always return false unless the order was placed with the indication-of-interest execution option. """ url = URLS.order_new() payload = { "client_order_id": generate_order_id(), "request": URLS.get_endpoint(url), "symbol": ticker, "amount": str(quantity), "side": side } # if price: payload["price"] = price else: payload["price"] = get_price(ticker, side) # if stop_limit_price: payload["type"] = "exchange stop limit" payload["stop_price"] = stop_limit_price else: payload["type"] = "exchange limit" # if min_amount: payload["min_amount"] = min_amount # if options: payload["options"] = options generate_signature(payload) data, err = request_post(url, payload, jsonify) return data, err