place_super_order
Execute a smart trading order with entry, target, and stop-loss legs in one action. Supports trailing stop loss for automated risk management.
Instructions
Places a smart super order combining entry, target, and stop-loss legs. Supports trailing stop loss. Requires authentication.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| dhanClientId | Yes | Your Dhan client ID | |
| correlationId | Yes | Unique correlation ID for order tracking | |
| transactionType | Yes | ||
| exchangeSegment | Yes | e.g., NSE_EQ, BSE_EQ | |
| productType | Yes | ||
| orderType | Yes | ||
| securityId | Yes | Security ID for the instrument | |
| quantity | Yes | Quantity for entry leg | |
| price | Yes | Entry price | |
| targetPrice | Yes | Target price for profit booking | |
| stopLossPrice | Yes | Stop loss price | |
| trailingJump | No | Trailing stop loss jump amount (optional) |
Input Schema (JSON Schema)
{
"properties": {
"correlationId": {
"description": "Unique correlation ID for order tracking",
"type": "string"
},
"dhanClientId": {
"description": "Your Dhan client ID",
"type": "string"
},
"exchangeSegment": {
"description": "e.g., NSE_EQ, BSE_EQ",
"type": "string"
},
"orderType": {
"enum": [
"MARKET",
"LIMIT",
"STOP_LOSS",
"STOP_LOSS_MARKET"
],
"type": "string"
},
"price": {
"description": "Entry price",
"type": "number"
},
"productType": {
"enum": [
"CNC",
"INTRADAY",
"MARGIN",
"MTF",
"CO",
"BO"
],
"type": "string"
},
"quantity": {
"description": "Quantity for entry leg",
"type": "number"
},
"securityId": {
"description": "Security ID for the instrument",
"type": "string"
},
"stopLossPrice": {
"description": "Stop loss price",
"type": "number"
},
"targetPrice": {
"description": "Target price for profit booking",
"type": "number"
},
"trailingJump": {
"description": "Trailing stop loss jump amount (optional)",
"type": "number"
},
"transactionType": {
"enum": [
"BUY",
"SELL"
],
"type": "string"
}
},
"required": [
"dhanClientId",
"correlationId",
"transactionType",
"exchangeSegment",
"productType",
"orderType",
"securityId",
"quantity",
"price",
"targetPrice",
"stopLossPrice"
],
"type": "object"
}
Implementation Reference
- src/authentication.ts:501-532 (handler)The handler function that implements the core logic for placing a super order via the Dhan API. It makes a POST request to the super orders endpoint with the provided request parameters.export async function placeSuperOrder( request: PlaceSuperOrderRequest ): Promise<OrderResponse> { try { log( `Placing super order: ${request.transactionType} ${request.quantity} shares with target ${request.targetPrice} and SL ${request.stopLossPrice}` ); const response = await axios.post<OrderResponse>( 'https://api.dhan.co/v2/super/orders', request, { headers: getApiHeaders(), } ); log( `✓ Super order placed successfully. Order ID: ${response.data.orderId}` ); return response.data; } catch (error) { const errorMessage = error instanceof axios.AxiosError ? `API Error: ${error.response?.status} - ${JSON.stringify(error.response?.data)}` : error instanceof Error ? error.message : 'Unknown error'; log(`✗ Failed to place super order: ${errorMessage}`); throw new Error(`Failed to place super order: ${errorMessage}`); } }
- src/types.ts:135-148 (schema)Interface defining the input parameters and types for the placeSuperOrder handler, used for type safety and validation.export interface PlaceSuperOrderRequest { dhanClientId: string; correlationId: string; transactionType: 'BUY' | 'SELL'; exchangeSegment: string; productType: 'CNC' | 'INTRADAY' | 'MARGIN' | 'MTF' | 'CO' | 'BO'; orderType: 'LIMIT' | 'MARKET' | 'STOP_LOSS' | 'STOP_LOSS_MARKET'; securityId: string; quantity: number; price: number; targetPrice: number; stopLossPrice: number; trailingJump?: number; }
- src/index.ts:258-301 (registration)MCP tool registration including name, description, and input schema for listTools response.{ name: 'place_super_order', description: 'Places a smart super order combining entry, target, and stop-loss legs. Supports trailing stop loss. Requires authentication.', inputSchema: { type: 'object' as const, properties: { dhanClientId: { type: 'string', description: 'Your Dhan client ID' }, correlationId: { type: 'string', description: 'Unique correlation ID for order tracking' }, transactionType: { type: 'string', enum: ['BUY', 'SELL'] }, exchangeSegment: { type: 'string', description: 'e.g., NSE_EQ, BSE_EQ' }, productType: { type: 'string', enum: ['CNC', 'INTRADAY', 'MARGIN', 'MTF', 'CO', 'BO'], }, orderType: { type: 'string', enum: ['MARKET', 'LIMIT', 'STOP_LOSS', 'STOP_LOSS_MARKET'], }, securityId: { type: 'string', description: 'Security ID for the instrument' }, quantity: { type: 'number', description: 'Quantity for entry leg' }, price: { type: 'number', description: 'Entry price' }, targetPrice: { type: 'number', description: 'Target price for profit booking' }, stopLossPrice: { type: 'number', description: 'Stop loss price' }, trailingJump: { type: 'number', description: 'Trailing stop loss jump amount (optional)', }, }, required: [ 'dhanClientId', 'correlationId', 'transactionType', 'exchangeSegment', 'productType', 'orderType', 'securityId', 'quantity', 'price', 'targetPrice', 'stopLossPrice', ], }, },
- src/index.ts:641-666 (registration)Dispatcher case in CallToolRequest handler that maps 'place_super_order' tool calls to the placeSuperOrder function.case 'place_super_order': { console.error('[Tool] Executing: place_super_order'); const soArgs = args as Record<string, unknown>; const result = await placeSuperOrder({ dhanClientId: soArgs.dhanClientId as string, correlationId: soArgs.correlationId as string, transactionType: soArgs.transactionType as 'BUY' | 'SELL', exchangeSegment: soArgs.exchangeSegment as string, productType: soArgs.productType as 'CNC' | 'INTRADAY' | 'MARGIN' | 'MTF' | 'CO' | 'BO', orderType: soArgs.orderType as 'LIMIT' | 'MARKET' | 'STOP_LOSS' | 'STOP_LOSS_MARKET', securityId: soArgs.securityId as string, quantity: soArgs.quantity as number, price: soArgs.price as number, targetPrice: soArgs.targetPrice as number, stopLossPrice: soArgs.stopLossPrice as number, trailingJump: soArgs.trailingJump as number | undefined, }); return { content: [ { type: 'text' as const, text: JSON.stringify(result, null, 2), }, ], }; }