Выбор позиции из нескольких

 

Открыты 3 позиции по одному инструменту. Нужно их последовательно проверить на предмет соответствия условиям. PositionSelect выбирает только последнюю позицию. В MQL4 выходил из положения так

for(int b=0;b<OrdersTotal();b++)
   {
   OrderSelect(b,SELECT_BY_POS,MODE_TRADES); и т.п.

 Подскажите, плиз как эт реализовать в MQL5.

 
По каждому инструменту может быть только одна открытая позиция.
 
Rosh:
По каждому инструменту может быть только одна открытая позиция.

Если речь о позициях

Речь наверно идет о простом переборе всех позиций. Тут проблема в том что PositionsTotal() возврашшает число позиций в int, а  PositionSelect выбирает позу по символу.

А как проще перебрать все позиции по номер вопрос?

Для решения подобной проблемы нужна еще одна реализация PositionSelect (с выбором не по символу, а по номеру) -

bool  PositionSelect(
uint    id,         // нермер позиции
uint    timeout=0   // таймаут в миллисекундах
);

Если речь об ордерах

Так тут вообще все просто, для OrderSelect() выбор ордера происходит по тикету

bool  OrderSelect(
ulong   ticket,      // тикет ордера
uint    timeout=0    // таймаут в миллисекундах
); 
 
Ну вот нашлось решение и для позиций - PositionGetSymbol.
string  PositionGetSymbol(int  index);

Теперь использую совместно с PositionsTotal и PositionSelect мы очень просто переберем все позиции в цикле...

 

такая конструкция?

void OnTick(){

         int cnt=PositionsTotal(); for (int i=cnt-1; i>=0; i--){

         string sy=(string)PositionGetSymbol(POSITION_SYMBOL);

         Print(sy);}}

 

 
papaklass:

 Не совсем понял вопрос.

Если у Вас есть позиции по разным инструментам и Вы хотите их перебрать, то делается это так:

есть позиции по разным инструментам. а возможности без явной инициализации нету?
 
maryan.dirtyn:
есть позиции по разным инструментам. а возможности без явной инициализации нету?

Есть такая возможность, у Вас было правильное направление мыслей в примере, но с реализацией не совсем согласен. Я вот так для проверки написал:

for(int pos = PositionsTotal() - 1;  pos >= 0;  pos --)
{
   string positionSymbol = PositionGetSymbol(pos);  
   Alert(positionSymbol);
   // Добавляем действия над открытой позицией.
}
 

Можно ещё и вот так:
int symbols_total=SymbolsTotal(true);
int market_watch_symbol;
market_watch_symbol=0;
while(market_watch_symbol<symbols_total)
{
 symbol=SymbolName(market_watch_symbol,true);
 ...
 market_watch_symbol++;
}

 Вместо "..." работаем с позицией по символу, если она есть.

 

 

Причина обращения: