> This page is for TWS API.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://ibkrcampus.com/docs/llms.txt.

# Positions by Model

## Introduction

The function `EClient.reqPositionsMulti` can be used with any account structure to subscribe to positions updates for multiple accounts and/or models. The account and model parameters are optional if there are not multiple accounts or models available. It is more efficient to use this function for a specific subset of accounts than using `EClient.reqPositions`. A profile name can be accepted in place of group in the account parameter.

---

## Request Positions by Model

`EClient.reqPositionsMulti(requestId, account, modelCode)`

Requests position subscription for account and/or model. Initially all positions are returned, and then updates are returned for any position changes in real time.

**`requestId`** `int`

Request's identifier.

---

**`account`** `string`

If an account Id is provided, only the account's positions belonging to the specified model will be delivered.

---

**`modelCode`** `string`

The code of the model's positions we are interested in.

---

\


#### Python

```python
self.reqPositionsMulti(requestid, "U1234567", "")
```

#### Python (Full Example)

```python
from ibapi.client import *
from ibapi.wrapper import *
import threading
import time

class TradingApp(EWrapper, EClient):
    def __init__(self):
        EClient.__init__(self,self)

    def positionMulti(self, reqId: int, account: str, modelCode: str, contract: Contract, pos: Decimal, avgCost: float):
       print("PositionMulti. RequestId:", reqId, "Account:", account, "ModelCode:", modelCode, "Contract:", contract, ",Position:", pos, "AvgCost:", avgCost)         

    def positionMultiEnd(self, reqId: int):
        print("")
        print("PositionMultiEnd. RequestId:", reqId)       

def websocket_con():
    app.run()

app = TradingApp()      
app.connect("127.0.0.1", 7497, clientId=1)

con_thread = threading.Thread(target=websocket_con, daemon=True)
con_thread.start()
time.sleep(1) 

app.reqPositionsMulti(2, "DU1234567", "")  #To specify a U-account number
time.sleep(1)

app.reqPositionsMulti(3, "Group1", "")     #To specify a Financial Advisor Group / Profile 
time.sleep(1)
```

#### Java

```java
client.reqPositionsMulti(requestid, "U1234567", "");
```

#### C++

```cpp
m_pClient->reqPositionsMulti(requestid, "U1234567", "");
```

#### C\#

```csharp
client.reqPositionsMulti(requestid, "U1234567", "");
```

#### VB.NET

```vbnet
client.reqPositionsMulti(requestid, "U1234567", "")
```

---

## Receive Positions by Model

### EWrapper.positionMulti

`EWrapper.positionMulti(requestId, account, modelCode, contract, pos, avgCost)`

Provides the portfolio's open positions.

**`requestId`** `int`

The id of request.

---

**`account`** `string`

The account holding the position.

---

**`modelCode`** `string`

The model code holding the position.

---

**`contract`** `Contract`

The position's Contract.

---

**`pos`** `decimal`

The number of positions held.

---

**`avgCost`** `double`

The average cost of the position.

---

\


#### Python

```python
def positionMulti(self, reqId: int, account: str, modelCode: str, contract: Contract, pos: Decimal, avgCost: float):
  print("PositionMulti. RequestId:", reqId, "Account:", account, "ModelCode:", modelCode, "Contract:", contract, ",Position:", pos, "AvgCost:", avgCost)
```

#### Java

```java
@Override
public void positionMulti(int reqId, String account, String modelCode, Contract contract, Decimal pos, double avgCost) {
	System.out.println(EWrapperMsgGenerator.positionMulti(reqId, account, modelCode, contract, pos, avgCost));
}
```

#### C++

```cpp
void TestCppClient::positionMulti( int reqId, const std::string& account,const std::string& modelCode, const Contract& contract, Decimal pos, double avgCost) {
    printf("Position Multi. Request: %d, Account: %s, ModelCode: %s, Symbol: %s, SecType: %s, Currency: %s, Position: %s, Avg Cost: %s\n", reqId, account.c_str(), modelCode.c_str(), contract.symbol.c_str(), contract.secType.c_str(), contract.currency.c_str(), decimalStringToDisplay(pos).c_str(), Utils::doubleMaxString(avgCost).c_str());
}
```

#### C\#

```csharp
public virtual void positionMulti(int reqId, string account, string modelCode, Contract contract, decimal pos, double avgCost)
{
	Console.WriteLine("Position Multi. Request: " + reqId + ", Account: " + account + ", ModelCode: " + modelCode + ", contract: " + contract + ", Position: " + Util.DecimalMaxString(pos) + ", Avg cost: " + Util.DoubleMaxString(avgCost) + "\n");
}
```

#### VB.NET

```vbnet
Public Sub positionMulti(requestId As Integer, account As String, modelCode As String, contract As Contract, pos As Decimal, avgCost As Double) Implements IBApi.EWrapper.positionMulti
	Console.WriteLine("PositionMulti. Id: " & requestId & ", Account: " & account & ", ModelCode: " & modelCode & ", Contract: " & contract.Symbol & ", pos: " & Util.DecimalMaxString(pos) & ", avgCost: " & Util.DoubleMaxString(avgCost))
End Sub
```

### EWrapper.positionMultiEnd

`EWrapper.positionMultiEnd(requestId)`

Indicates all the positions have been transmitted.

**`requestId`** `int`

The id of request.

---

\


#### Python

```python
def positionMultiEnd(self, reqId: int):
	print("PositionMultiEnd. RequestId:", reqId)
```

#### Java

```java
@Override
public void positionMultiEnd(int reqId) {
	System.out.println("Position Multi End: " + EWrapperMsgGenerator.positionMultiEnd(reqId));
}
```

#### C++

```cpp
void TestCppClient::positionMultiEnd( int reqId) {
    printf("Position Multi End. Request: %d\n", reqId);
}
```

#### C\#

```csharp
public virtual void positionMultiEnd(int reqId)
{
	Console.WriteLine("Position Multi End. Request: " + reqId + "\n");
}
```

#### VB.NET

```vbnet
Public Sub positionMultiEnd(requestId As Integer) Implements IBApi.EWrapper.positionMultiEnd
	Console.WriteLine("PositionMultiEnd")
End Sub
```

---

## Cancel Positions by Model

`EClient.cancelPositionsMulti(requestId)`

Cancels positions request for account and/or model.

**`requestId`** `int`

The identifier of the request to be canceled.

---

\


#### Python

```python
self.cancelPositionsMulti(requestid)
```

#### Java

```java
client.cancelPositionsMulti(requestid);
```

#### C++

```cpp
m_pClient->cancelPositionsMulti(requestid);
```

#### C\#

```csharp
client.cancelPositionsMulti(requestid);
```

#### VB.NET

```vbnet
client.cancelPositionsMulti(requestid)
```