Как посчитать количество валютных пар по которым открыты позиции ?
CurrencyPairs++;
CurrencyPairs=0; for(int q=0;q<SymbolsTotal(true);q++) { string symbol=SymbolName(q,true); if(PositionSelect(symbol))CurrencyPairs++; }самое простое что приходит на ум.
с уважением.
Как посчитать количество валютных пар по которым открыты позиции ?
CurrencyPairs++;
Я сделал-бы так, но зависит от того, что дальше будет в программе
string symbols[]; int b=0; for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderType()<=1) { if(ArraySearchStr(symbols, OrderSymbol())==-1) { b++; ArrayResize(symbols,b); symbols[b-1]=OrderSymbol(); }}}} int ArraySearchStr(string& m[], string e) { for(int i=0; i<ArraySize(m); i++) { if(m[i]==e) return(i); } return(-1); } Print( ArraySize(symbols) );
самое простое что приходит на ум.
PositionSelect
Я сделал-бы так, но зависит от того, что дальше будет в программе
Ограничить надо портфель в торговле.
если 2 символа торгуют то остальные пары в игнор
Ограничить надо портфель в торговле.
если 2 символа торгуют то остальные пары в игнор
Тогда замените PositionSelect в предложенном коде на четвёрошную, и получите просто количество, без сохранения символов.
Тогда замените PositionSelect в предложенном коде на четвёрошную, и получите просто количество, без сохранения символов.
Не соображу как реализовать
Не соображу как реализовать
bool PositionSelect(string sym) { bool fl=false; for(int ps=0;ps<OrdersTotal() && !fl && !IsStopped();ps++) { if(!OrderSelect(ps,SELECT_BY_POS))continue; if(OrderSymbol()==sym)fl=true; } return fl; }добавьте к предыдущему коду эту функцию.
с уважением.
добавьте к предыдущему коду эту функцию.
Всё работает! Спасибо))
Всё работает! Спасибо))
с уважением.
самое простое что приходит на ум.
Хотя, как выяснилось, вопрос по МТ4, дополню "простой" вариант для МТ5 - там есть PositionsTotal и не надо мудрить с перебором всех символов.
PositionsTotal Возвращает количество открытых позиций. int PositionsTotal(); Возвращаемое значение Значение типа int. Примечание При "неттинговом" учете позиций (ACCOUNT_MARGIN_MODE_RETAIL_NETTING и ACCOUNT_MARGIN_MODE_EXCHANGE) по каждому символу в любой момент времени может быть открыта только одна позиция, которая является результатом одной или более сделок. Не следует путать между собой позиции и действующие отложенные ордера, которые также отображаются на вкладке "Торговля" в панели "Инструменты". При независимом представлении позиций (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) по каждому символу одновременно может быть открыто несколько позиций. Смотри также PositionGetSymbol(), PositionSelect(), Свойства позицийкак видно возвращаемое значение в 5ке будет зависеть от типа счета и учета позиций в нем, и при
независимом представлении позиций
вернет количество ордеров (независимых позиций), а не количество позиций по символам.
что не приемлемо при поставленной задаче.в моем варианте вы получите реальное количество загруженных символов не зависимо от того какой учет позиций будет в вашем терминале, неттинг или хедж.
с уважением.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Как посчитать количество валютных пар по которым открыты позиции ?
CurrencyPairs++;