from typing import Any, Dict, Optional
from coinbase.constants import API_PREFIX
from coinbase.rest.types.futures_types import (
CancelPendingFuturesSweepResponse,
GetCurrentMarginWindowResponse,
GetFuturesBalanceSummaryResponse,
GetFuturesPositionResponse,
GetIntradayMarginSettingResponse,
ListFuturesPositionsResponse,
ListFuturesSweepsResponse,
ScheduleFuturesSweepResponse,
SetIntradayMarginSettingResponse,
)
[docs]
def get_futures_balance_summary(self, **kwargs) -> GetFuturesBalanceSummaryResponse:
"""
**Get Futures Balance Summary**
_______________________________
[GET] https://api.coinbase.com/api/v3/brokerage/cfm/balance_summary
__________
**Description:**
Get information on your balances related to `Coinbase Financial Markets <https://www.coinbase.com/fcm>`_ (CFM) futures trading.
__________
**Read more on the official documentation:** `Get Futures Balance Summary
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/futures/get-futures-balance-summary>`_
"""
endpoint = f"{API_PREFIX}/cfm/balance_summary"
return GetFuturesBalanceSummaryResponse(self.get(endpoint, **kwargs))
[docs]
def list_futures_positions(self, **kwargs) -> ListFuturesPositionsResponse:
"""
**List Futures Positions**
__________________________
[GET] https://api.coinbase.com/api/v3/brokerage/cfm/positions
__________
**Description:**
Get a list of all open positions in CFM futures products.
__________
**Read more on the official documentation:** `List Futures Positions
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/futures/list-futures-positions>`_
"""
endpoint = f"{API_PREFIX}/cfm/positions"
return ListFuturesPositionsResponse(self.get(endpoint, **kwargs))
[docs]
def get_futures_position(self, product_id: str, **kwargs) -> GetFuturesPositionResponse:
"""
**Get Futures Position**
_________________________
[GET] https://api.coinbase.com/api/v3/brokerage/cfm/positions/{product_id}
__________
**Description:**
Get the position of a specific CFM futures product.
__________
**Read more on the official documentation:** `Get Futures Position
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/futures/get-futures-position>`_
"""
endpoint = f"{API_PREFIX}/cfm/positions/{product_id}"
return GetFuturesPositionResponse(self.get(endpoint, **kwargs))
[docs]
def schedule_futures_sweep(
self, usd_amount: str, **kwargs
) -> ScheduleFuturesSweepResponse:
"""
**Schedule Futures Sweep**
__________________________
[POST] https://api.coinbase.com/api/v3/brokerage/cfm/sweeps/schedule
__________
**Description:**
Schedule a sweep of funds from your CFTC-regulated futures account to your Coinbase Inc. USD Spot wallet.
__________
**Read more on the official documentation:** `Schedule Futures Sweep
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/futures/schedule-futures-sweep>`_
"""
endpoint = f"{API_PREFIX}/cfm/sweeps/schedule"
data = {"usd_amount": usd_amount}
return ScheduleFuturesSweepResponse(self.post(endpoint, data=data, **kwargs))
[docs]
def list_futures_sweeps(self, **kwargs) -> ListFuturesSweepsResponse:
"""
**List Futures Sweeps**
_______________________
[GET] https://api.coinbase.com/api/v3/brokerage/cfm/sweeps
__________
**Description:**
Get information on your pending and/or processing requests to sweep funds from your CFTC-regulated futures account to your Coinbase Inc. USD Spot wallet.
__________
**Read more on the official documentation:** `List Futures Sweeps
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/futures/list-futures-sweeps>`_
"""
endpoint = f"{API_PREFIX}/cfm/sweeps"
return ListFuturesSweepsResponse(self.get(endpoint, **kwargs))
[docs]
def cancel_pending_futures_sweep(self, **kwargs) -> CancelPendingFuturesSweepResponse:
"""
**Cancel Pending Futures Sweep**
________________________________
[DELETE] https://api.coinbase.com/api/v3/brokerage/cfm/sweeps
__________
**Description:**
Cancel your pending sweep of funds from your CFTC-regulated futures account to your Coinbase Inc. USD Spot wallet.
__________
**Read more on the official documentation:** `Cancel Pending Futures Sweep
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/futures/cancel-pending-futures-sweep>`_
"""
endpoint = f"{API_PREFIX}/cfm/sweeps"
return CancelPendingFuturesSweepResponse(self.delete(endpoint, **kwargs))
[docs]
def get_intraday_margin_setting(self, **kwargs) -> GetIntradayMarginSettingResponse:
"""
**Get Intraday Margin Setting**
_______________________________
[GET] https://api.coinbase.com/api/v3/brokerage/cfm/intraday/margin_setting
__________
**Description:**
Get the status of whether your account is opted in to receive increased leverage on futures trades on weekdays from 8am-4pm ET.
__________
**Read more on the official documentation:** `Get Intraday Margin Setting
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/futures/get-intraday-margin-setting>`_
"""
endpoint = f"{API_PREFIX}/cfm/intraday/margin_setting"
return GetIntradayMarginSettingResponse(self.get(endpoint, **kwargs))
[docs]
def get_current_margin_window(
self, margin_profile_type: str, **kwargs
) -> GetCurrentMarginWindowResponse:
"""
**Get Current Margin Window**
________________________________
[GET] https://api.coinbase.com/api/v3/brokerage/cfm/intraday/current_margin_window
__________
**Description:**
Get the current margin window to determine whether intraday or overnight margin rates are in effect.
__________
**Read more on the official documentation:** `Get Current Margin Window
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/futures/get-current-margin-window>`_
"""
endpoint = f"{API_PREFIX}/cfm/intraday/current_margin_window"
params = {"margin_profile_type": margin_profile_type}
return GetCurrentMarginWindowResponse(self.get(endpoint, params=params, **kwargs))
[docs]
def set_intraday_margin_setting(
self, setting: str, **kwargs
) -> SetIntradayMarginSettingResponse:
"""
**Set Intraday Margin Setting**
________________________________
[POST] https://api.coinbase.com/api/v3/brokerage/cfm/intraday/margin_setting
__________
**Description:**
Opt in to receive increased leverage on futures trades on weekdays from 8am-4pm ET.
__________
**Read more on the official documentation:** `Set Intraday Margin Setting
<https://docs.cdp.coinbase.com/api-reference/advanced-trade-api/rest-api/futures/set-intraday-margin-settings>`_
"""
endpoint = f"{API_PREFIX}/cfm/intraday/margin_setting"
data = {"setting": setting}
return SetIntradayMarginSettingResponse(self.post(endpoint, data=data, **kwargs))