Understanding of the state of bot Positions if there is trade occur in the loop
Understanding of the state of bot Positions if there is trade occur in the loop
05 Oct 2021, 05:05
Hi,
I will like to understand more when we execute bot.Positions.
Example:
foreach (var pos in this.bot.Positions.Where(x => x.SymbolName == this.symbol.Name))
{
TradeResult res = this.bot.ExecuteMarketOrder(this.currDirection, this.symbol.Name, inputLot, this.symbol.VolumeInUnitsToQuantity(inputLot).ToString());
// INSIDE HERE
}
What will happen to the Positions state if we perform close trade/execute trade/modify trade during the looping?
Will the looping immediately include the newly opened trade into the Positions? And will the Positions count will increase?
OR
https://100001.link/ https://192168101.dev/ https://1921681254.link/
The Positions state still remains as previous(before closing the trade until I exited the loop?
Thanks
amusleh
05 Oct 2021, 18:43
Hi,
Positions collection is an IEnumerable, and if you open a new position or close an old one the collection will change.
If collection change while you were iterating over it (with a loop) you will get a collection modified exception and your loop will break.
To protect your bot or indicator from collection modified exception you can create a local copy of positions collection and then loop over it:
@amusleh