import uuid
from typing import Any, Dict, List, Optional
from coinbase.constants import API_PREFIX
from coinbase.rest.types.orders_types import (
CancelOrdersResponse,
ClosePositionResponse,
CreateOrderResponse,
EditOrderPreviewResponse,
EditOrderResponse,
GetOrderResponse,
ListFillsResponse,
ListOrdersResponse,
PreviewOrderResponse,
)
def generate_client_order_id() -> str:
"""
:meta private:
"""
return uuid.uuid4().hex
[docs]
def create_order(
self,
client_order_id: str,
product_id: str,
side: str,
order_configuration,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Create Order**
________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Create an order with a specified ``product_id`` (asset-pair), ``side`` (buy/sell), etc.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
endpoint = f"{API_PREFIX}/orders"
if not client_order_id:
client_order_id = generate_client_order_id()
data = {
"client_order_id": client_order_id,
"product_id": product_id,
"side": side,
"order_configuration": order_configuration,
"self_trade_prevention_id": self_trade_prevention_id,
"leverage": leverage,
"margin_type": margin_type,
"retail_portfolio_id": retail_portfolio_id,
}
return CreateOrderResponse(self.post(endpoint, data=data, **kwargs))
# Market orders
[docs]
def market_order(
self,
client_order_id: str,
product_id: str,
side: str,
quote_size: Optional[str] = None,
base_size: Optional[str] = None,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Market Order**
________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a market order to BUY or SELL the desired product at the given market price. If you wish to purchase the
product, provide a quote_size and if you wish to sell the product, provide a base_size.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
market_market_ioc = {"quote_size": quote_size, "base_size": base_size}
filtered_market_market_ioc = {
key: value for key, value in market_market_ioc.items() if value is not None
}
order_configuration = {"market_market_ioc": filtered_market_market_ioc}
return create_order(
self,
client_order_id,
product_id,
side,
order_configuration,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def market_order_buy(
self,
client_order_id: str,
product_id: str,
quote_size: Optional[str] = None,
base_size: Optional[str] = None,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Create Market Order Buy**
____________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a market order to BUY the desired product at the given market price.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
return market_order(
self,
client_order_id,
product_id,
"BUY",
quote_size=quote_size,
base_size=base_size,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def market_order_sell(
self,
client_order_id: str,
product_id: str,
base_size: str,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Create Market Order Sell**
_____________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a market order to SELL the desired product at the given market price.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
return market_order(
self,
client_order_id,
product_id,
"SELL",
base_size=base_size,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
# Limit IOC Orders
[docs]
def limit_order_ioc(
self,
client_order_id: str,
product_id: str,
side: str,
base_size: str,
limit_price: str,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Limit IOC Order**
________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a Limit Order with a IOC time-in-force policy. Provide the base_size (quantity of your base currency to
spend) as well as a limit_price that indicates the maximum price at which the order should be filled.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
sor_limit_ioc = {"base_size": base_size, "limit_price": limit_price}
order_configuration = {"sor_limit_ioc": sor_limit_ioc}
return create_order(
self,
client_order_id,
product_id,
side,
order_configuration,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def limit_order_ioc_buy(
self,
client_order_id: str,
product_id: str,
base_size: str,
limit_price: str,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Limit IOC Order Buy**
________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a Buy Limit Order with a IOC time-in-force policy. Provide the base_size (quantity of your base currency to
spend) as well as a limit_price that indicates the maximum price at which the order should be filled.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
return limit_order_ioc(
self,
client_order_id,
product_id,
"BUY",
base_size=base_size,
limit_price=limit_price,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def limit_order_ioc_sell(
self,
client_order_id: str,
product_id: str,
base_size: str,
limit_price: str,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Limit IOC Order Sell**
________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a Sell Limit Order with a IOC time-in-force policy. Provide the base_size (quantity of your base currency to
spend) as well as a limit_price that indicates the maximum price at which the order should be filled.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
return limit_order_ioc(
self,
client_order_id,
product_id,
"SELL",
base_size=base_size,
limit_price=limit_price,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
# Limit GTC orders
[docs]
def limit_order_gtc(
self,
client_order_id: str,
product_id: str,
side: str,
base_size: str,
limit_price: str,
post_only: bool = False,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Limit Order GTC**
___________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a Limit Order with a GTC time-in-force policy. Provide the base_size (quantity of your base currency to
spend) as well as a limit_price that indicates the maximum price at which the order should be filled.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
order_configuration = {
"limit_limit_gtc": {
"base_size": base_size,
"limit_price": limit_price,
"post_only": post_only,
}
}
return create_order(
self,
client_order_id,
product_id,
side,
order_configuration,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def limit_order_gtc_buy(
self,
client_order_id: str,
product_id: str,
base_size: str,
limit_price: str,
post_only: bool = False,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Limit Order GTC Buy**
_______________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a BUY Limit Order with a GTC time-in-force policy. Provide the base_size (quantity of your base currency to
spend) as well as a limit_price that indicates the maximum price at which the order should be filled.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
return limit_order_gtc(
self,
client_order_id,
product_id,
"BUY",
base_size=base_size,
limit_price=limit_price,
post_only=post_only,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def limit_order_gtc_sell(
self,
client_order_id: str,
product_id: str,
base_size: str,
limit_price: str,
post_only: bool = False,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Limit Order GTC Sell**
________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a SELL Limit Order with a GTC time-in-force policy. Provide the base_size (quantity of your base currency to
spend) as well as a limit_price that indicates the maximum price at which the order should be filled.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
return limit_order_gtc(
self,
client_order_id,
product_id,
"SELL",
base_size=base_size,
limit_price=limit_price,
post_only=post_only,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
# Limit GTD orders
[docs]
def limit_order_gtd(
self,
client_order_id: str,
product_id: str,
side: str,
base_size: str,
limit_price: str,
end_time: str,
post_only: bool = False,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Limit Order GTD**
___________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a Limit Order with a GTD time-in-force policy. Unlike a Limit Order with a GTC time-in-force policy,
this order type requires an end-time that indicates when this order should expire.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
order_configuration = {
"limit_limit_gtd": {
"base_size": base_size,
"limit_price": limit_price,
"end_time": end_time,
"post_only": post_only,
}
}
return create_order(
self,
client_order_id,
product_id,
side,
order_configuration,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def limit_order_gtd_buy(
self,
client_order_id: str,
product_id: str,
base_size: str,
limit_price: str,
end_time: str,
post_only: bool = False,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Limit Order GTD Buy**
_______________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a BUY Limit Order with a GTD time-in-force policy. Unlike a Limit Order with a GTC time-in-force policy,
this order type requires an end-time that indicates when this order should expire.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
return limit_order_gtd(
self,
client_order_id,
product_id,
"BUY",
base_size=base_size,
limit_price=limit_price,
end_time=end_time,
post_only=post_only,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def limit_order_gtd_sell(
self,
client_order_id: str,
product_id: str,
base_size: str,
limit_price: str,
end_time: str,
post_only: bool = False,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Limit Order GTD Sell**
________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a SELL Limit Order with a GTD time-in-force policy. Unlike a Limit Order with a GTC time-in-force policy,
this order type requires an end-time that indicates when this order should expire.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
return limit_order_gtd(
self,
client_order_id,
product_id,
"SELL",
base_size=base_size,
limit_price=limit_price,
end_time=end_time,
post_only=post_only,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
# Limit FOK Orders
[docs]
def limit_order_fok(
self,
client_order_id: str,
product_id: str,
side: str,
base_size: str,
limit_price: str,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Limit FOK Order**
________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a Limit Order with a FOK time-in-force policy. Provide the base_size (quantity of your base currency to
spend) as well as a limit_price that indicates the maximum price at which the order should be filled.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
limit_limit_fok = {"base_size": base_size, "limit_price": limit_price}
order_configuration = {"limit_limit_fok": limit_limit_fok}
return create_order(
self,
client_order_id,
product_id,
side,
order_configuration,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def limit_order_fok_buy(
self,
client_order_id: str,
product_id: str,
base_size: str,
limit_price: str,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Limit FOK Order Buy**
________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a Buy Limit Order with a FOK time-in-force policy. Provide the base_size (quantity of your base currency to
spend) as well as a limit_price that indicates the maximum price at which the order should be filled.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
return limit_order_fok(
self,
client_order_id,
product_id,
"BUY",
base_size=base_size,
limit_price=limit_price,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def limit_order_fok_sell(
self,
client_order_id: str,
product_id: str,
base_size: str,
limit_price: str,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Limit FOK Order Sell**
________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a Sell Limit Order with a FOK time-in-force policy. Provide the base_size (quantity of your base currency to
spend) as well as a limit_price that indicates the maximum price at which the order should be filled.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
return limit_order_fok(
self,
client_order_id,
product_id,
"SELL",
base_size=base_size,
limit_price=limit_price,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
# Stop-Limit GTC orders
[docs]
def stop_limit_order_gtc(
self,
client_order_id: str,
product_id: str,
side: str,
base_size: str,
limit_price: str,
stop_price: str,
stop_direction: str,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Stop-Limit Order GTC**
________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a Stop Limit order with a GTC time-in-force policy. Stop orders become active and wait to trigger based on
the movement of the last trade price. The last trade price is the last price at which an order was filled.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
order_configuration = {
"stop_limit_stop_limit_gtc": {
"base_size": base_size,
"limit_price": limit_price,
"stop_price": stop_price,
"stop_direction": stop_direction,
}
}
return create_order(
self,
client_order_id,
product_id,
side,
order_configuration,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def stop_limit_order_gtc_buy(
self,
client_order_id: str,
product_id: str,
base_size: str,
limit_price: str,
stop_price: str,
stop_direction: str,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Stop-Limit Order GTC Buy**
____________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a BUY Stop Limit order with a GTC time-in-force policy. Stop orders become active and wait to trigger based on
the movement of the last trade price. The last trade price is the last price at which an order was filled.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
return stop_limit_order_gtc(
self,
client_order_id,
product_id,
"BUY",
base_size=base_size,
limit_price=limit_price,
stop_price=stop_price,
stop_direction=stop_direction,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def stop_limit_order_gtc_sell(
self,
client_order_id: str,
product_id: str,
base_size: str,
limit_price: str,
stop_price: str,
stop_direction: str,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Stop-Limit Order GTC Sell**
_____________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a SELL Stop Limit order with a GTC time-in-force policy. Stop orders become active and wait to trigger based on
the movement of the last trade price. The last trade price is the last price at which an order was filled.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
return stop_limit_order_gtc(
self,
client_order_id,
product_id,
"SELL",
base_size=base_size,
limit_price=limit_price,
stop_price=stop_price,
stop_direction=stop_direction,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
# Stop-Limit GTD orders
[docs]
def stop_limit_order_gtd(
self,
client_order_id: str,
product_id: str,
side: str,
base_size: str,
limit_price: str,
stop_price: str,
end_time: str,
stop_direction: str,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Stop-Limit Order GTD**
________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a Stop Limit order with a GTD time-in-force policy. Stop orders become active and wait to trigger based on
the movement of the last trade price. The last trade price is the last price at which an order was filled.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
order_configuration = {
"stop_limit_stop_limit_gtd": {
"base_size": base_size,
"limit_price": limit_price,
"stop_price": stop_price,
"end_time": end_time,
"stop_direction": stop_direction,
}
}
return create_order(
self,
client_order_id,
product_id,
side,
order_configuration,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def stop_limit_order_gtd_buy(
self,
client_order_id: str,
product_id: str,
base_size: str,
limit_price: str,
stop_price: str,
end_time: str,
stop_direction: str,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Stop-Limit Order GTD Buy**
____________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a BUY Stop Limit order with a GTD time-in-force policy. Stop orders become active and wait to trigger based on
the movement of the last trade price. The last trade price is the last price at which an order was filled.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
return stop_limit_order_gtd(
self,
client_order_id,
product_id,
"BUY",
base_size=base_size,
limit_price=limit_price,
stop_price=stop_price,
end_time=end_time,
stop_direction=stop_direction,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def stop_limit_order_gtd_sell(
self,
client_order_id: str,
product_id: str,
base_size: str,
limit_price: str,
stop_price: str,
end_time: str,
stop_direction: str,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Stop-Limit Order GTD Sell**
_____________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a SELL Stop Limit order with a GTD time-in-force policy. Stop orders become active and wait to trigger based on
the movement of the last trade price. The last trade price is the last price at which an order was filled.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
return stop_limit_order_gtd(
self,
client_order_id,
product_id,
"SELL",
base_size=base_size,
limit_price=limit_price,
stop_price=stop_price,
end_time=end_time,
stop_direction=stop_direction,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
# Trigger Bracket GTC orders
[docs]
def trigger_bracket_order_gtc(
self,
client_order_id: str,
product_id: str,
side: str,
base_size: str,
limit_price: str,
stop_trigger_price: str,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Trigger Bracket Order GTC**
________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a Trigger Bracket order with a GTC time-in-force policy. Trigger Bracket orders become active and wait to trigger based on
the movement of the last trade price. The last trade price is the last price at which an order was filled.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
order_configuration = {
"trigger_bracket_gtc": {
"base_size": base_size,
"limit_price": limit_price,
"stop_trigger_price": stop_trigger_price,
}
}
return create_order(
self,
client_order_id,
product_id,
side,
order_configuration,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def trigger_bracket_order_gtc_buy(
self,
client_order_id: str,
product_id: str,
base_size: str,
limit_price: str,
stop_trigger_price: str,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Trigger Bracket Order GTC Buy**
____________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a BUY Trigger Bracket order with a GTC time-in-force policy. Trigger Bracket orders become active and wait to trigger based on
the movement of the last trade price. The last trade price is the last price at which an order was filled.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
return trigger_bracket_order_gtc(
self,
client_order_id,
product_id,
"BUY",
base_size=base_size,
limit_price=limit_price,
stop_trigger_price=stop_trigger_price,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def trigger_bracket_order_gtc_sell(
self,
client_order_id: str,
product_id: str,
base_size: str,
limit_price: str,
stop_trigger_price: str,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Trigger Bracket Order GTC Sell**
_____________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a SELL Trigger Bracket order with a GTC time-in-force policy. Trigger Bracket orders become active and wait to trigger based on
the movement of the last trade price. The last trade price is the last price at which an order was filled.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
return trigger_bracket_order_gtc(
self,
client_order_id,
product_id,
"SELL",
base_size=base_size,
limit_price=limit_price,
stop_trigger_price=stop_trigger_price,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
# Trigger Bracket GTD orders
[docs]
def trigger_bracket_order_gtd(
self,
client_order_id: str,
product_id: str,
side: str,
base_size: str,
limit_price: str,
stop_trigger_price: str,
end_time: str,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Trigger Bracket Order GTD**
________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a Trigger Bracket order with a GTD time-in-force policy. Trigger Bracket orders become active and wait to trigger based on
the movement of the last trade price. The last trade price is the last price at which an order was filled.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
order_configuration = {
"trigger_bracket_gtd": {
"base_size": base_size,
"limit_price": limit_price,
"stop_trigger_price": stop_trigger_price,
"end_time": end_time,
}
}
return create_order(
self,
client_order_id,
product_id,
side,
order_configuration,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def trigger_bracket_order_gtd_buy(
self,
client_order_id: str,
product_id: str,
base_size: str,
limit_price: str,
stop_trigger_price: str,
end_time: str,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Trigger Bracket Order GTD Buy**
____________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a BUY Trigger Bracket order with a GTD time-in-force policy. Trigger Bracket orders become active and wait to trigger based on
the movement of the last trade price. The last trade price is the last price at which an order was filled.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
return trigger_bracket_order_gtd(
self,
client_order_id,
product_id,
"BUY",
base_size=base_size,
limit_price=limit_price,
stop_trigger_price=stop_trigger_price,
end_time=end_time,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def trigger_bracket_order_gtd_sell(
self,
client_order_id: str,
product_id: str,
base_size: str,
limit_price: str,
stop_trigger_price: str,
end_time: str,
self_trade_prevention_id: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> CreateOrderResponse:
"""
**Trigger Bracket Order GTD Sell**
_____________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders
__________
**Description:**
Place a SELL Trigger Bracket order with a GTD time-in-force policy. Trigger Bracket orders become active and wait to trigger based on
the movement of the last trade price. The last trade price is the last price at which an order was filled.
__________
**Read more on the official documentation:** `Create Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/create-order>`_
"""
return trigger_bracket_order_gtd(
self,
client_order_id,
product_id,
"SELL",
base_size=base_size,
limit_price=limit_price,
stop_trigger_price=stop_trigger_price,
end_time=end_time,
self_trade_prevention_id=self_trade_prevention_id,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def get_order(self, order_id: str, **kwargs) -> GetOrderResponse:
"""
**Get Order**
_____________
[GET] https://api.coinbase.com/api/v3/brokerage/orders/historical/{order_id}
__________
**Description:**
Get a single order by order ID.
__________
**Read more on the official documentation:** `Get Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/get-order>`_
"""
endpoint = f"{API_PREFIX}/orders/historical/{order_id}"
return GetOrderResponse(self.get(endpoint, **kwargs))
[docs]
def list_orders(
self,
order_ids: Optional[List[str]] = None,
product_ids: Optional[List[str]] = None,
order_status: Optional[List[str]] = None,
limit: Optional[int] = None,
start_date: Optional[str] = None,
end_date: Optional[str] = None,
order_types: Optional[str] = None,
order_side: Optional[str] = None,
cursor: Optional[str] = None,
product_type: Optional[str] = None,
order_placement_source: Optional[str] = None,
contract_expiry_type: Optional[str] = None,
asset_filters: Optional[List[str]] = None,
retail_portfolio_id: Optional[str] = None,
time_in_forces: Optional[str] = None,
sort_by: Optional[str] = None,
**kwargs,
) -> ListOrdersResponse:
"""
**List Orders**
_______________
[GET] https://api.coinbase.com/api/v3/brokerage/orders/historical/batch
__________
**Description:**
Get a list of orders filtered by optional query parameters (``product_id``, ``order_status``, etc).
__________
**Read more on the official documentation:** `List Orders
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/list-orders>`_
"""
endpoint = f"{API_PREFIX}/orders/historical/batch"
params = {
"order_ids": order_ids,
"product_ids": product_ids,
"order_status": order_status,
"limit": limit,
"start_date": start_date,
"end_date": end_date,
"order_types": order_types,
"order_side": order_side,
"cursor": cursor,
"product_type": product_type,
"order_placement_source": order_placement_source,
"contract_expiry_type": contract_expiry_type,
"asset_filters": asset_filters,
"retail_portfolio_id": retail_portfolio_id,
"time_in_forces": time_in_forces,
"sort_by": sort_by,
}
return ListOrdersResponse(self.get(endpoint, params=params, **kwargs))
[docs]
def get_fills(
self,
order_ids: Optional[List[str]] = None,
trade_ids: Optional[List[str]] = None,
product_ids: Optional[List[str]] = None,
start_sequence_timestamp: Optional[str] = None,
end_sequence_timestamp: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
limit: Optional[int] = None,
cursor: Optional[str] = None,
sort_by: Optional[str] = None,
**kwargs,
) -> ListFillsResponse:
"""
**List Fills**
______________
[GET] https://api.coinbase.com/api/v3/brokerage/orders/historical/fills
__________
**Description:**
Get a list of fills filtered by optional query parameters (``product_id``, ``order_id``, etc).
__________
**Read more on the official documentation:** `List Fills
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/list-fills>`_
"""
endpoint = f"{API_PREFIX}/orders/historical/fills"
params = {
"order_ids": order_ids,
"trade_ids": trade_ids,
"product_ids": product_ids,
"start_sequence_timestamp": start_sequence_timestamp,
"end_sequence_timestamp": end_sequence_timestamp,
"retail_portfolio_id": retail_portfolio_id,
"limit": limit,
"cursor": cursor,
"sort_by": sort_by,
}
return ListFillsResponse(self.get(endpoint, params=params, **kwargs))
[docs]
def edit_order(
self,
order_id: str,
size: Optional[str] = None,
price: Optional[str] = None,
**kwargs,
) -> EditOrderResponse:
"""
**Edit Order**
______________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/edit
__________
**Description:**
Edit an order with a specified new ``size``, or new ``price``. Only limit order types, with time in force type of good-till-cancelled can be edited.
__________
**Read more on the official documentation:** `Edit Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/edit-order>`_
"""
endpoint = f"{API_PREFIX}/orders/edit"
data = {
"order_id": order_id,
"size": size,
"price": price,
}
return EditOrderResponse(self.post(endpoint, data=data, **kwargs))
[docs]
def preview_edit_order(
self,
order_id: str,
size: Optional[str] = None,
price: Optional[str] = None,
**kwargs,
) -> EditOrderPreviewResponse:
"""
**Preview Edit Order**
______________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/edit_preview
__________
**Description:**
Simulate an edit order request with a specified new ``size``, or new ``price``, to preview the result of an edit. Only limit order types, with time in force type of good-till-cancelled can be edited.
__________
**Read more on the official documentation:** `Edit Order Preview
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/edit-order-preview>`_
"""
endpoint = f"{API_PREFIX}/orders/edit_preview"
data = {
"order_id": order_id,
"size": size,
"price": price,
}
return EditOrderPreviewResponse(self.post(endpoint, data=data, **kwargs))
[docs]
def cancel_orders(self, order_ids: List[str], **kwargs) -> CancelOrdersResponse:
"""
**Cancel Orders**
_________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/batch_cancel
__________
**Description:**
Initiate cancel requests for one or more orders.
__________
**Read more on the official documentation:** `Cancel Orders
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/cancel-order>`_
"""
endpoint = f"{API_PREFIX}/orders/batch_cancel"
data = {
"order_ids": order_ids,
}
return CancelOrdersResponse(self.post(endpoint, data=data, **kwargs))
[docs]
def preview_order(
self,
product_id: str,
side: str,
order_configuration,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Order**
_________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of an order request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
endpoint = f"{API_PREFIX}/orders/preview"
data = {
"product_id": product_id,
"side": side,
"order_configuration": order_configuration,
"leverage": leverage,
"margin_type": margin_type,
"retail_portfolio_id": retail_portfolio_id,
}
return PreviewOrderResponse(self.post(endpoint, data=data, **kwargs))
# Preview market orders
[docs]
def preview_market_order(
self,
product_id: str,
side: str,
quote_size: Optional[str] = None,
base_size: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Market Order**
________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a market order request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
market_market_ioc = {"quote_size": quote_size, "base_size": base_size}
filtered_market_market_ioc = {
key: value for key, value in market_market_ioc.items() if value is not None
}
order_configuration = {"market_market_ioc": filtered_market_market_ioc}
return preview_order(
self,
product_id,
side,
order_configuration,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def preview_market_order_buy(
self,
product_id: str,
quote_size: Optional[str] = None,
base_size: Optional[str] = None,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Market Buy Order**
____________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a market order buy request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
return preview_market_order(
self,
product_id,
"BUY",
quote_size=quote_size,
base_size=base_size,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def preview_market_order_sell(
self,
product_id: str,
base_size: str,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Market Sell Order**
_____________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a market order sell request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
return preview_market_order(
self,
product_id,
"SELL",
base_size=base_size,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
# Preview Limit IOC orders
[docs]
def preview_limit_order_ioc(
self,
product_id: str,
side: str,
base_size: str,
limit_price: str,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Limit Order IOC**
___________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a limit order IOC request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
order_configuration = {
"sor_limit_ioc": {"base_size": base_size, "limit_price": limit_price}
}
return preview_order(
self,
product_id,
side,
order_configuration,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def preview_limit_order_ioc_buy(
self,
product_id: str,
base_size: str,
limit_price: str,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Limit Order IOC Buy**
___________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a limit order IOC buy request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
return preview_limit_order_ioc(
self,
product_id,
"BUY",
base_size=base_size,
limit_price=limit_price,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def preview_limit_order_ioc_sell(
self,
product_id: str,
base_size: str,
limit_price: str,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Limit Order IOC Sell**
___________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a limit order IOC sell request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
return preview_limit_order_ioc(
self,
product_id,
"SELL",
base_size=base_size,
limit_price=limit_price,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
# Preview Limit GTC orders
[docs]
def preview_limit_order_gtc(
self,
product_id: str,
side: str,
base_size: str,
limit_price: str,
post_only: bool = False,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Limit Order GTC**
___________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a limit order GTC request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
order_configuration = {
"limit_limit_gtc": {
"base_size": base_size,
"limit_price": limit_price,
"post_only": post_only,
}
}
return preview_order(
self,
product_id,
side,
order_configuration,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def preview_limit_order_gtc_buy(
self,
product_id: str,
base_size: str,
limit_price: str,
post_only: bool = False,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Limit Order GTC Buy**
_______________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a limit order GTC buy request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
return preview_limit_order_gtc(
self,
product_id,
"BUY",
base_size=base_size,
limit_price=limit_price,
post_only=post_only,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def preview_limit_order_gtc_sell(
self,
product_id: str,
base_size: str,
limit_price: str,
post_only: bool = False,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Limit Order GTC Sell**
________________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a limit order GTC sell request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
return preview_limit_order_gtc(
self,
product_id,
"SELL",
base_size=base_size,
limit_price=limit_price,
post_only=post_only,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
# Preview Limit GTD orders
[docs]
def preview_limit_order_gtd(
self,
product_id: str,
side: str,
base_size: str,
limit_price: str,
end_time: str,
post_only: bool = False,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Limit Order GTD**
___________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a limit order GTD request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
order_configuration = {
"limit_limit_gtd": {
"base_size": base_size,
"limit_price": limit_price,
"end_time": end_time,
"post_only": post_only,
}
}
return preview_order(
self,
product_id,
side,
order_configuration,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def preview_limit_order_gtd_buy(
self,
product_id: str,
base_size: str,
limit_price: str,
end_time: str,
post_only: bool = False,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Limit Order GTD Buy**
_______________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a limit order GTD buy request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
return preview_limit_order_gtd(
self,
product_id,
"BUY",
base_size=base_size,
limit_price=limit_price,
end_time=end_time,
post_only=post_only,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def preview_limit_order_gtd_sell(
self,
product_id: str,
base_size: str,
limit_price: str,
end_time: str,
post_only: bool = False,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Limit Order GTD Sell**
________________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a limit order GTD sell request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
return preview_limit_order_gtd(
self,
product_id,
"SELL",
base_size=base_size,
limit_price=limit_price,
end_time=end_time,
post_only=post_only,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def preview_limit_order_fok(
self,
product_id: str,
side: str,
base_size: str,
limit_price: str,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Limit Order FOK**
___________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a limit order FOK request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
order_configuration = {
"limit_limit_fok": {"base_size": base_size, "limit_price": limit_price}
}
return preview_order(
self,
product_id,
side,
order_configuration,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def preview_limit_order_fok_buy(
self,
product_id: str,
base_size: str,
limit_price: str,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Limit Order FOK Buy**
___________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a limit order FOK buy request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
return preview_limit_order_fok(
self,
product_id,
"BUY",
base_size=base_size,
limit_price=limit_price,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def preview_limit_order_fok_sell(
self,
product_id: str,
base_size: str,
limit_price: str,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Limit Order FOK Sell**
___________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a limit order FOK sell request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
return preview_limit_order_fok(
self,
product_id,
"SELL",
base_size=base_size,
limit_price=limit_price,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
# Preview Stop-Limit GTC orders
[docs]
def preview_stop_limit_order_gtc(
self,
product_id: str,
side: str,
base_size: str,
limit_price: str,
stop_price: str,
stop_direction: str,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Stop-Limit Order GTC**
________________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a stop limit GTC order request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
order_configuration = {
"stop_limit_stop_limit_gtc": {
"base_size": base_size,
"limit_price": limit_price,
"stop_price": stop_price,
"stop_direction": stop_direction,
}
}
return preview_order(
self,
product_id,
side,
order_configuration,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def preview_stop_limit_order_gtc_buy(
self,
product_id: str,
base_size: str,
limit_price: str,
stop_price: str,
stop_direction: str,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Stop-Limit Order GTC Buy**
____________________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a stop limit GTC order buy request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
return preview_stop_limit_order_gtc(
self,
product_id,
"BUY",
base_size=base_size,
limit_price=limit_price,
stop_price=stop_price,
stop_direction=stop_direction,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def preview_stop_limit_order_gtc_sell(
self,
product_id: str,
base_size: str,
limit_price: str,
stop_price: str,
stop_direction: str,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Stop-Limit Order GTC Sell**
_____________________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a stop limit GTC order sell request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
return preview_stop_limit_order_gtc(
self,
product_id,
"SELL",
base_size=base_size,
limit_price=limit_price,
stop_price=stop_price,
stop_direction=stop_direction,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
# Preview Stop-Limit GTD orders
[docs]
def preview_stop_limit_order_gtd(
self,
product_id: str,
side: str,
base_size: str,
limit_price: str,
stop_price: str,
end_time: str,
stop_direction: str,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Stop-Limit Order GTD**
________________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a stop limit GTD order request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
order_configuration = {
"stop_limit_stop_limit_gtd": {
"base_size": base_size,
"limit_price": limit_price,
"stop_price": stop_price,
"end_time": end_time,
"stop_direction": stop_direction,
}
}
return preview_order(
self,
product_id,
side,
order_configuration,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def preview_stop_limit_order_gtd_buy(
self,
product_id: str,
base_size: str,
limit_price: str,
stop_price: str,
end_time: str,
stop_direction: str,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Stop-Limit Order GTD Buy**
____________________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a stop limit GTD order buy request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
return preview_stop_limit_order_gtd(
self,
product_id,
"BUY",
base_size=base_size,
limit_price=limit_price,
stop_price=stop_price,
end_time=end_time,
stop_direction=stop_direction,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def preview_stop_limit_order_gtd_sell(
self,
product_id: str,
base_size: str,
limit_price: str,
stop_price: str,
end_time: str,
stop_direction: str,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Stop-Limit Order GTD Sell**
_____________________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a stop limit GTD order sell request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
return preview_stop_limit_order_gtd(
self,
product_id,
"SELL",
base_size=base_size,
limit_price=limit_price,
stop_price=stop_price,
end_time=end_time,
stop_direction=stop_direction,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
# Preview Trigger Bracket GTC orders
[docs]
def preview_trigger_bracket_order_gtc(
self,
product_id: str,
side: str,
base_size: str,
limit_price: str,
stop_trigger_price: str,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Trigger Bracket Order GTC**
________________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a trigger bracket GTC order request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
order_configuration = {
"trigger_bracket_gtc": {
"base_size": base_size,
"limit_price": limit_price,
"stop_trigger_price": stop_trigger_price,
}
}
return preview_order(
self,
product_id,
side,
order_configuration,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def preview_trigger_bracket_order_gtc_buy(
self,
product_id: str,
base_size: str,
limit_price: str,
stop_trigger_price: str,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Trigger Bracket Order GTC Buy**
____________________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a trigger bracket GTC order buy request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
return preview_trigger_bracket_order_gtc(
self,
product_id,
"BUY",
base_size=base_size,
limit_price=limit_price,
stop_trigger_price=stop_trigger_price,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def preview_trigger_bracket_order_gtc_sell(
self,
product_id: str,
base_size: str,
limit_price: str,
stop_trigger_price: str,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Trigger Bracket Order GTC Sell**
_____________________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a trigger bracket GTC order sell request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
return preview_trigger_bracket_order_gtc(
self,
product_id,
"SELL",
base_size=base_size,
limit_price=limit_price,
stop_trigger_price=stop_trigger_price,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
# Preview Trigger Bracket GTD orders
[docs]
def preview_trigger_bracket_order_gtd(
self,
product_id: str,
side: str,
base_size: str,
limit_price: str,
stop_trigger_price: str,
end_time: str,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Trigger Bracket Order GTD**
________________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a trigger bracket GTD order request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
order_configuration = {
"trigger_bracket_gtd": {
"base_size": base_size,
"limit_price": limit_price,
"stop_trigger_price": stop_trigger_price,
"end_time": end_time,
}
}
return preview_order(
self,
product_id,
side,
order_configuration,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def preview_trigger_bracket_order_gtd_buy(
self,
product_id: str,
base_size: str,
limit_price: str,
stop_trigger_price: str,
end_time: str,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Trigger Bracket Order GTD Buy**
____________________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a trigger bracket GTD order buy request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
return preview_trigger_bracket_order_gtd(
self,
product_id,
"BUY",
base_size=base_size,
limit_price=limit_price,
stop_trigger_price=stop_trigger_price,
end_time=end_time,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def preview_trigger_bracket_order_gtd_sell(
self,
product_id: str,
base_size: str,
limit_price: str,
stop_trigger_price: str,
end_time: str,
leverage: Optional[str] = None,
margin_type: Optional[str] = None,
retail_portfolio_id: Optional[str] = None,
**kwargs,
) -> PreviewOrderResponse:
"""
**Preview Trigger Bracket Order GTD Sell**
_____________________________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/preview
__________
**Description:**
Preview the results of a trigger bracket GTD order sell request before sending.
__________
**Read more on the official documentation:** `Preview Order
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/preview-orders>`_
"""
return preview_trigger_bracket_order_gtd(
self,
product_id,
"SELL",
base_size=base_size,
limit_price=limit_price,
stop_trigger_price=stop_trigger_price,
end_time=end_time,
leverage=leverage,
margin_type=margin_type,
retail_portfolio_id=retail_portfolio_id,
**kwargs,
)
[docs]
def close_position(
self, client_order_id: str, product_id: str, size: Optional[str] = None, **kwargs
) -> ClosePositionResponse:
"""
**Close Position**
_________________
[POST] https://api.coinbase.com/api/v3/brokerage/orders/close_position
__________
**Description:**
Places an order to close any open positions for a specified ``product_id``.
__________
**Read more on the official documentation:** `Close Position
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/orders/close-position>`_
"""
endpoint = f"{API_PREFIX}/orders/close_position"
if not client_order_id:
client_order_id = generate_client_order_id()
data = {"client_order_id": client_order_id, "product_id": product_id, "size": size}
return ClosePositionResponse(self.post(endpoint, data=data, **kwargs))