Làm việc với open positions - select, get properties, calculate profit/loss.
// Select position for current symbol
if(PositionSelect(_Symbol)) {
// Position exists for this symbol
double profit = PositionGetDouble(POSITION_PROFIT);
double volume = PositionGetDouble(POSITION_VOLUME);
Print("Position profit: $", profit, " Volume: ", volume);
} else {
Print("No position for ", _Symbol);
}
// Loop through all positions
for(int i = 0; i < PositionsTotal(); i++) {
ulong ticket = PositionGetTicket(i);
if(ticket > 0) {
string symbol = PositionGetString(POSITION_SYMBOL);
double profit = PositionGetDouble(POSITION_PROFIT);
Print("Ticket: ", ticket, " Symbol: ", symbol, " P/L: $", profit);
}
}
if(PositionSelect(_Symbol)) {
// String properties
string symbol = PositionGetString(POSITION_SYMBOL);
string comment = PositionGetString(POSITION_COMMENT);
// Integer properties
long magic = PositionGetInteger(POSITION_MAGIC);
long type = PositionGetInteger(POSITION_TYPE); // BUY or SELL
datetime openTime = (datetime)PositionGetInteger(POSITION_TIME);
// Double properties
double volume = PositionGetDouble(POSITION_VOLUME);
double openPrice = PositionGetDouble(POSITION_PRICE_OPEN);
double currentPrice = PositionGetDouble(POSITION_PRICE_CURRENT);
double sl = PositionGetDouble(POSITION_SL);
double tp = PositionGetDouble(POSITION_TP);
double profit = PositionGetDouble(POSITION_PROFIT);
double swap = PositionGetDouble(POSITION_SWAP);
double commission = PositionGetDouble(POSITION_COMMISSION);
Print("=== Position Info ===");
Print("Type: ", (type == POSITION_TYPE_BUY) ? "BUY" : "SELL");
Print("Volume: ", volume);
Print("Open: ", openPrice, " Current: ", currentPrice);
Print("Profit: $", profit);
}
int CountPositions(ENUM_POSITION_TYPE type, long magic = 0) {
int count = 0;
for(int i = 0; i < PositionsTotal(); i++) {
ulong ticket = PositionGetTicket(i);
if(ticket == 0) continue;
// Check magic (optional)
if(magic > 0 && PositionGetInteger(POSITION_MAGIC) != magic)
continue;
// Check type
if(PositionGetInteger(POSITION_TYPE) == type)
count++;
}
return count;
}
// Usage
int buyPositions = CountPositions(POSITION_TYPE_BUY);
int sellPositions = CountPositions(POSITION_TYPE_SELL);