Skip to content

Commit dbc3491

Browse files
authored
Implemented edit_order endpoint (#54)
1 parent 024ce64 commit dbc3491

2 files changed

Lines changed: 61 additions & 1 deletion

File tree

coinbaseadvanced/client.py

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
from coinbaseadvanced.models.products import BidAsksPage, ProductBook, ProductsPage, Product, \
2222
CandlesPage, TradesPage, ProductType, Granularity, GRANULARITY_MAP_IN_MINUTES
2323
from coinbaseadvanced.models.accounts import AccountsPage, Account
24-
from coinbaseadvanced.models.orders import OrderPlacementSource, OrdersPage, Order, \
24+
from coinbaseadvanced.models.orders import OrderPlacementSource, OrdersPage, Order, OrderEdit, \
2525
OrderBatchCancellation, FillsPage, Side, StopDirection, OrderType
2626

2727

@@ -331,6 +331,37 @@ def create_order(self, client_order_id: str,
331331
order = Order.from_create_order_response(response)
332332
return order
333333

334+
def edit_order(self, order_id: str, limit_price: float, base_size: float) -> OrderEdit:
335+
"""
336+
https://docs.cloud.coinbase.com/advanced-trade-api/reference/retailbrokerageapi_editorder
337+
338+
Edit an order's size (quantity), or price. Only good-till-cancelled (GTC) Limit Orders can be edited.
339+
340+
Args:
341+
- order_id: ID of order to edit.
342+
- limit_price: New price for order.
343+
- base_size: New size for order
344+
"""
345+
346+
request_path = f"/api/v3/brokerage/orders/edit"
347+
method = "POST"
348+
349+
payload = {
350+
'order_id': order_id,
351+
'price': str(limit_price),
352+
'size': str(base_size)
353+
}
354+
355+
headers = self._build_request_headers(method, request_path, json.dumps(payload)) \
356+
if self._is_legacy_auth() \
357+
else self._build_request_headers_for_cloud(method, self._host, request_path)
358+
response = requests.post(self._base_url+request_path,
359+
json=payload, headers=headers,
360+
timeout=self.timeout)
361+
362+
edit_result = OrderEdit.from_get_edit_response(response)
363+
return edit_result
364+
334365
def cancel_orders(self, order_ids: list) -> OrderBatchCancellation:
335366
"""
336367
https://docs.cloud.coinbase.com/advanced-trade-api/reference/retailbrokerageapi_cancelorders

coinbaseadvanced/models/orders.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,35 @@ def __iter__(self):
444444
return self.orders.__iter__()
445445

446446

447+
class OrderEdit(BaseModel):
448+
"""
449+
Order edit.
450+
"""
451+
452+
success: bool
453+
errors: List[dict]
454+
edit_failure_reason: str
455+
preview_failure_reason: str
456+
457+
def __init__(self, success: bool, errors: List[dict], **kwargs) -> None:
458+
self.success = success
459+
self.errors = errors if errors is not None else None
460+
461+
self.kwargs = kwargs
462+
463+
@classmethod
464+
def from_get_edit_response(cls, response: requests.Response) -> 'OrderEdit':
465+
"""
466+
Factory Method.
467+
"""
468+
469+
if not response.ok:
470+
raise CoinbaseAdvancedTradeAPIError.not_ok_response(response)
471+
472+
result = response.json()
473+
return cls(**result)
474+
475+
447476
class OrderCancellation(BaseModel):
448477
"""
449478
Order cancellation.

0 commit comments

Comments
 (0)