Здравствуйте! 99% роботов делаю на заказ под MT4, MT5 только пару раз просили. Поэтому, МТ5 не заморачивался. Возникла необходимость написать мультивалютного EA под МТ5. Столкнулся с банальной проблемой - как посчитать количество уже открытых ордеров. Казалось бы, уже должна быть какая-то готовая функция.... Но нет. Поиск и чтение доков показывает, что для написания чего-то простейщего на МТ5 надо написать портянку кода на 2 экрана. Чтобы сделать автолот, надо подключить 10 библиотек, чтоб открыть ордер, надо написать около 20 строк. Чтоб вытащить данные из индикатора это вообще песня с танцем на углях....
По сути вопроса. Вот такую, теоретически правильную функцию подсчета ордеров написал:
Однако, считает она непонятно что. При наличии БАЙ-ордера, показывает 0. При 15 селл ордерах, показывает что их 5. Может кто направит на путь? Прошу не писать "читай справку". Читаем и так.
Так определить, что нужно считать-то: отложенные ОРДЕРА или ПОЗИЦИИ?
ORDER_TYPE_BUY | Рыночный ордер на покупку - вот такие |
ORDER_TYPE_SELL | Рыночный ордер на продажу - или такие |
ORDER_TYPE_BUY_LIMIT | Отложенный ордер Buy Limit |
ORDER_TYPE_SELL_LIMIT | Отложенный ордер Sell Limit |
А какая собственно разница? Если я могу в CountTrades(int type,int magic) написать то, что мне надо посчитать
Вам нужно считать ПОЗИЦИИ.
Пример подсчёта отдельно ПОЗИЦИЙ BUY и SELL:
//+------------------------------------------------------------------+ //| Calculate positions Buy and Sell | //+------------------------------------------------------------------+ void CalculatePositions(int &count_buys,int &count_sells) { count_buys=0.0; count_sells=0.0; for(int i=PositionsTotal()-1;i>=0;i--) if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic) { if(m_position.PositionType()==POSITION_TYPE_BUY) count_buys++; if(m_position.PositionType()==POSITION_TYPE_SELL) count_sells++; } //--- return; }
В шапке подключить торговые классы CPositionInfo и CSymbolInfo:
#include <Trade\PositionInfo.mqh> #include <Trade\SymbolInfo.mqh> CPositionInfo m_position; // trade position object CSymbolInfo m_symbol; // symbol info object
Вам нужно считать ПОЗИЦИИ.
Хорошо, позиции.
При вызове функции - CountTrades(POSITION_TYPE_BUY,Magic) она и не работает
Пример подсчёта отдельно ПОЗИЦИЙ BUY и SELL:
В шапке подключить торговые классы CPositionInfo и CSymbolInfo:
Спасибо. Ощющение, что MQL5 сделан не для трейдинга.
Здравствуйте! 99% роботов делаю на заказ под MT4, MT5 только пару раз просили. Поэтому, МТ5 не заморачивался. Возникла необходимость написать мультивалютного EA под МТ5. Столкнулся с банальной проблемой - как посчитать количество уже открытых ордеров. Казалось бы, уже должна быть какая-то готовая функция.... Но нет. Поиск и чтение доков показывает, что для написания чего-то простейщего на МТ5 надо написать портянку кода на 2 экрана. Чтобы сделать автолот, надо подключить 10 библиотек, чтоб открыть ордер, надо написать около 20 строк. Чтоб вытащить данные из индикатора это вообще песня с танцем на углях....
По сути вопроса. Вот такую, теоретически правильную функцию подсчета ордеров написал:
Однако, считает она непонятно что. При наличии БАЙ-ордера, показывает 0. При 15 селл ордерах, показывает что их 5. Может кто направит на путь? Прошу не писать "читай справку". Читаем и так.
О сколько нам открытий чудных готовит МТ5 ...
Раз уж взялись за работу - курите мануал, или забудьте про МТ5.
О сколько нам открытий чудных готовит МТ5 ...
Раз уж взялись за работу - курите мануал, или забудьте про МТ5.
Не зря уже лет 7 (или сколько там он существует) MT5 не приживается у простолюдинов.
Почему нельзя сделать уже готовые классы к любой рыночной ситуации? Вот как в Java на 99% ТИПИЧНЫХ задач есть готовое решение. Я полагаю, что подсчет позиций, автолот, открытие позиций, закрытие это и есть ТИПИЧНЫЕ для трейдинга задачи и можно было их сделать одной строчкой.
Не зря уже лет 7 (или сколько там он существует) MT5 не приживается у простолюдинов.
Почему нельзя сделать уже готовые классы к любой рыночной ситуации? Вот как в Java на 99% ТИПИЧНЫХ задач есть готовое решение. Я полагаю, что подсчет позиций, автолот, открытие позиций, закрытие это и есть ТИПИЧНЫЕ для трейдинга задачи и можно было их сделать одной строчкой.
простолюдинам пофигу мт5 или мт4.
Для простого гуи трейдера обе платформы идентичны, особенно после введения хеджевых счетов. При неттинге только некоторые неудобства возникают у начинающих изза непривычного подсчёта позиций и всё. Но это проблема 1-2 дней.
простолюдинам пофигу мт5 или мт4.
Для простого гуи трейдера обе платформы идентичны, особенно после введения хеджевых счетов. При неттинге только некоторые неудобства возникают у начинающих изза непривычного подсчёта позиций и всё. Но это проблема 1-2 дней.
Это все в теории. Практика показывает, что пользователей MT4 > MT5*100.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте! 99% роботов делаю на заказ под MT4, MT5 только пару раз просили. Поэтому, МТ5 не заморачивался. Возникла необходимость написать мультивалютного EA под МТ5. Столкнулся с банальной проблемой - как посчитать количество уже открытых ордеров. Казалось бы, уже должна быть какая-то готовая функция.... Но нет. Поиск и чтение доков показывает, что для написания чего-то простейщего на МТ5 надо написать портянку кода на 2 экрана. Чтобы сделать автолот, надо подключить 10 библиотек, чтоб открыть ордер, надо написать около 20 строк. Чтоб вытащить данные из индикатора это вообще песня с танцем на углях....
По сути вопроса. Вот такую, теоретически правильную функцию подсчета ордеров написал:
Однако, считает она непонятно что. При наличии БАЙ-ордера, показывает 0. При 15 селл ордерах, показывает что их 5. Может кто направит на путь? Прошу не писать "читай справку". Читаем и так.