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
I changed the riskPips-calculation. It was just a copy-paste-error.
And your advice with riskPips/Point works! Thank you!!!
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++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_BUY) { 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; } } }
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 (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { 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)); }
riskPips = direction*(OrderOpenPrice() - OrderStopLoss());
You don't have pips but points!
Which is correct for the following money calculation!
@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.
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
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: