Skip to main content

POST Close Position

Close a specific position by instrument NT8

Fully or partially closes one NinjaTrader instrument position by quantity or percentage.

Endpoint

POST /v1/api/accounts/{account}/positions/close

Headers

NameValue
Content-Typeapplication/json
AuthorizationBearer <token>

Path parameters

NameTypeRequiredDescription
accountstringRequiredName of account in NT8

Body parameters

NameTypeRequiredDescription
instrumentstringRequiredName of underlying instrument
quantityintOptionalNumber of contracts to close. If omitted, the full position is closed. Capped at the current open quantity.
percentfloatOptionalFraction of the position to close, between 0 and 1 (e.g., 0.5 for 50%). Rounds up — closing 10% of a 1-contract position closes 1 contract. Takes effect only if quantity is not provided.

Code examples

import requests

url = "https://app.crosstrade.io/v1/api/accounts/Sim101/positions/close"
headers = {
"Authorization": "Bearer my-secret-token",
"Content-Type": "application/json"
}
data = {
"instrument": "MES 12-25",
"quantity": 4,
# "percent": 0.25
}
try:
response = requests.post(url, headers=headers, json=data)
print(f"Response Code: {response.status_code}, Response Text: {response.text}")
except Exception as e:
print(f"An error occurred: {e}")

Response

{
"closedPositions": [
{
"type": "NinjaTrader.Cbi.Position",
"account": "Sim101",
"instrument": "ES 12-25",
"instrumentType": "Future",
"marketPosition": "Long",
"quantity": 4,
"averagePrice": 5779.8125,
"marketPrice": 5797.0,
"unrealizedProfitLoss": 3437.5
}
],
"success": true
}

Platform nuances

info

Partial close behavior — When quantity or percent closes less than the full position, the add-on places a market order for the specified size rather than calling NT8's flatten. Working orders (stops, targets) are not automatically cancelled on a partial close. Use POST /cancel-orders with the instrument filter if you need to clean those up separately.

WebSocket API

This request can also be made over the WebSocket API. The account path parameter and request body fields are all passed inside args.

{
"action": "rpc",
"id": "my-request-id",
"api": "ClosePosition",
"args": {
"account": "Sim101",
"instrument": "ES 09-26"
}
}