По каждому инструменту может быть только одна открытая позиция.
Если речь о позициях
Речь наверно идет о простом переборе всех позиций. Тут проблема в том что PositionsTotal() возврашшает число позиций в int, а PositionSelect выбирает позу по символу.
А как проще перебрать все позиции по номер вопрос?
Для решения подобной проблемы нужна еще одна реализация PositionSelect (с выбором не по символу, а по номеру) -
bool PositionSelect( uint id, // нермер позиции uint timeout=0 // таймаут в миллисекундах );
Если речь об ордерах
Так тут вообще все просто, для OrderSelect() выбор ордера происходит по тикету
bool OrderSelect( ulong ticket, // тикет ордера uint timeout=0 // таймаут в миллисекундах );
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);}}
Не совсем понял вопрос.
Если у Вас есть позиции по разным инструментам и Вы хотите их перебрать, то делается это так:
есть позиции по разным инструментам. а возможности без явной инициализации нету?
Есть такая возможность, у Вас было правильное направление мыслей в примере, но с реализацией не совсем согласен. Я вот так для проверки написал:
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++; }
Вместо "..." работаем с позицией по символу, если она есть.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Открыты 3 позиции по одному инструменту. Нужно их последовательно проверить на предмет соответствия условиям. PositionSelect выбирает только последнюю позицию. В MQL4 выходил из положения так
for(int b=0;b<OrdersTotal();b++)
{
OrderSelect(b,SELECT_BY_POS,MODE_TRADES); и т.п.
Подскажите, плиз как эт реализовать в MQL5.