# Calculate the risk of all open orders

1147

Hi forum,

I want to make an indicator which calculates the total risk of all open orders. My idea is to check all OP_BUY and OP_SELL orders and calculate the risk of each individial order by using OrderOpenPrice() and OrderStopLoss(). Then I convert this into my account currency, add them and display the sum as a percentage of AccountBalance(). Is that the only way to calculate the risk of all open orders or is there an easier way? I checked all information about the account properties but I haven' found anything like this.

This is the way I do it:

```   for (int i = 1; i <= OrdersTotal(); i++) {
openOrders++;
riskPips = OrderOpenPrice() - OrderStopLoss();
riskMoney   = riskPips*OrderLots()*MarketInfo(OrderSymbol(), MODE_TICKVALUE);
totalRisk = totalRisk + riskMoney;
}
else if (OrderType() == OP_SELL) {
openOrders++;
riskPips = OrderStopLoss() - OrderOpenPrice();
riskMoney   = riskPips*OrderLots()*MarketInfo(OrderSymbol(), MODE_TICKVALUE);
totalRisk = totalRisk + riskMoney;
}
}
}```
1401

Quite ok if no hedging.
1147

I also thought that but totalRisk is definitely wrong. I am just checking it with 1-2 orders on a demo account to locate the error.
Moderator
10411

``` if (OrderType() == OP_BUY) {
openOrders++;
riskPips = OrderStopLoss() - OrderOpenPrice();
// Should that be OrderOpenPrice() - OrderStopLoss() ???

riskMoney   = riskPips*OrderLots()*MarketInfo(OrderSymbol(), MODE_TICKVALUE);
// riskPips/Point*OrderLots()*MarketInfo(OrderSymbol(), MODE_TICKVALUE)
// Then that is assuming that Tick Size is the same as Point
totalRisk = totalRisk + riskMoney;
}```

Some changes to consider

1147

I changed the riskPips-calculation. It was just a copy-paste-error.

I also modified the loop. There was a bug though I don't know why i = 0 and i < OrdersTotal() works and i = 1 and i <= OrdersTotal() doesn't.

```   for (int i = 0; i < OrdersTotal(); i++) {
openOrders++;
riskPips = OrderOpenPrice() - OrderStopLoss();
riskMoney   = riskPips/Point*OrderLots()*MarketInfo(OrderSymbol(), MODE_TICKVALUE);
totalRisk = totalRisk + riskMoney;
}
else if (OrderType() == OP_SELL) {
openOrders++;
riskPips = OrderStopLoss() - OrderOpenPrice();
riskMoney   = riskPips/Point*OrderLots()*MarketInfo(OrderSymbol(), MODE_TICKVALUE);
totalRisk = totalRisk + riskMoney;
}
}
}```
1147

I couldn't use Point because Point only refers to the current chart symbol. So I had different results within different chart symbols. Therefore I modified it. Here is the final version as a script.

```double riskPips, riskMoney, totalRisk;
int direction, openOrders = 0;
void OnStart()
{
for (int i = 0; i < OrdersTotal(); i++) {
if (OrderType() == OP_BUY) direction = 1;
else if (OrderType() == OP_SELL) direction = -1;
openOrders++;
riskPips = direction*(OrderOpenPrice() - OrderStopLoss());
riskMoney   = riskPips/MarketInfo(OrderSymbol(), MODE_POINT)*OrderLots()*MarketInfo(OrderSymbol(), MODE_TICKVALUE);
totalRisk = totalRisk + riskMoney;
}
}
Comment(openOrders, " OPEN ORDERS // TOTAL RISK IN ", AccountCurrency(), " = ", DoubleToStr(totalRisk, 2));
}```
1401

Thanks for sharing. Would help a lot for newbies.
6999

`riskPips = direction*(OrderOpenPrice() - OrderStopLoss());`

You don't have pips but points!

Which is correct for the following money calculation!

15351

1147

@gooly: I am not sure understanding you. Do you see a mistake in the calculation? I tried it with several trades on demo and live accounts and it seems to work very good.

@WHRoeder: I often read that you suggest using DeltaValuePerLot() instead of tickvalue alone and I also tried to use it here but I don't know how to do that. I thought that it is necessary for a risk calculation but here I only use it to convert the quote currency into my account currency.