As per https://www.mql5.com/en/docs/trading/positionselect
Chooses an open position
for further working with it. Returns true if the function is
successfully completed. Returns false in case of failure. To obtain
information about the error, call GetLastError().
string symbol // Symbol name
[in] Name of the financial security.
Value of the bool type.
For the "netting" interpretation of positions (ACCOUNT_MARGIN_MODE_RETAIL_NETTING and ACCOUNT_MARGIN_MODE_EXCHANGE), only one position can exist for a symbol at any moment of time. This position is a result of one or more deals. Do not confuse positions with valid pending orders, which are also displayed on the Trading tab of the Toolbox window.
If individual positions are allowed (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING), multiple positions can be open for one symbol. In this case, PositionSelect will select a position with the lowest ticket.
Function PositionSelect() copies data about a position into the program environment, and further calls of PositionGetDouble(), PositionGetInteger() and PositionGetString()
return the earlier copied data. This means that the position itself may
no longer exist (or its volume, direction, etc. has changed), but data
of this position still can be obtained. To ensure receipt of fresh data
about a position, it is recommended to call PositionSelect() right
before referring to them.
I think PositionSelect() could be very useful in hedge mode returning position current profit, volume, swap, and average TP, SL and price open