Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Это не "... функция чего там не видит... ", а Вы неверно составляете алгоритм. Почитайте Все, что Вам советовали все выше. Поработайте с кодом. Разберитесь, что возвращается при выборе позиции по номеру тикета и при выборе позиции по названию символа.
В вашем коде проверка и моем коде проверка на POSITION_TYPE_SELL и POSITION_TYPE_BAY. Что можно проверить еще? Как выбрать позицию, если функция из двух позиции не может интерпретировать конкретно указанный тип POSITION_TYPE_SELL. Здесь явные проблемы в алгоритме функции. Как предлагаете выбрать позицию, если предназначенная для этого функция не выполняет возложенные на нее обязанности? Она обязана видеть эту позицию, я начинающий, но немного изучал PHP, не настолько дремуч. У MQL5 и PHP схожий синтаксис, мне даже кажется, что MQL5, это PHP перенесенный на десктоп.
Давайте по порядку. Итак шаг первый: какой тип счёта - неттинг или хеджинг?
Давайте по порядку. Итак шаг первый: какой тип счёта - неттинг или хеджинг?
На неттинге, это работает - хеджинг, но это вообще не при делах. Образно: я привел функцию в логи позиций и сказал, выбери мне из двух позиций, позицию POSITION_TYPE_SELL, а функция "зависла", чешет репу и из двух типов не может интерпретировать конкретно указанный тип. Это тот же PHP, да и любой другой, нормальный язык в данной ситуации интерпретирует позицию, их всего две, а платформа не работает с миллионными объемами данных, тики, типы позиции, ордера и иная мелочь, это не космолет, а велосипед, но даже из этого велосипеда, из мизера данных не получается получить необходимую инфу.
И при том, на следующем баре открывается позиция sell (тикет №4), следом за sell (тикет №3) и №4 интерпретируется, его функция видит.
На неттинге, это работает - хеджинг, но это вообще не при делах. Образно: я привел функцию в логи позиций и сказал, выбери мне из двух позиций, позицию POSITION_TYPE_SELL, а позиция "зависла", чешет репу и двух типов не может интерпретировать конкретно указанный тип. Это тот же PHP, да и любой другой, нормальный язык в данной ситуации интерпретирует позицию, их всего две, а платформа не работает с миллионными объемами данных, тики, типы позиции, ордера и иная мелочь, это не космолет, а велосипед, но даже из этого велосипеда из мизера данных не получается получить необходимую инфу.
Я не зря сказал:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
PositionSelect(symbol) PositionGetInteger(POSITION_TYPE)
Vladimir Karputov, 2017.03.27 22:47
Давайте по порядку. Итак шаг первый: какой тип счёта - неттинг или хеджинг?
Не спешите и ответьте чётко на поставленный вопрос (а вообще я спать - аватарку видели?)
Вы выделяете всего ОДНУ позицию. Соответственно для неё будет или BUY или SELL. Если нужно сделать обход по всем позициям, то нужен цикл - от "PositionsTotal()-1", до ">=0":
Мысли вслух. Надо получить тикет, тип и иную инфу о позиции, по приведенному вами кодингу надо получать инфу о счете, аккаунте, хеджинг, неттинг, а зайти в логи и выбрать последнюю позицию например sell нельзя? Просто я не могу понять, при каких делах счета, если есть список позиций и из этого списка просто надо выбрать позиции(ю) подходящего типа по условиям. Потом пойдут ордера ... засада. Есть PositionSelect, PositionGetInteger, PositionGetTicket, по сути на них возложена работа с позициями, но проверка не тот тип интерпретирует, при отсутствии позиции, высвечивает тип позиции которой нет (скрин №3) или может я чего то не понимаю и функции Position.... для другого предназначены? Код должен работать с реальными деньгами, а тут черти че и сбоку бантик, за такие глюки и сливы разрабов подвесят за причинные местаЯ только учусь и попал в засаду. Примитивнейшее действие: получить тип позиции. Пробовал так:
Открыл buy - total и PositionGetInteger ее видят. Листаю, открывается позиция sell, total ее видит - 2 позиции, а PositionGetInteger - false.
Пробовал так, total и PositionSelect по нолям, а PositionGetInteger видит buy:
Есть ли способ получить банальную информацию о типе последней позиции, без необходимости писать сотни строк кода?
Вы не правильно определяете тип позиции,
нужно так
Вы не правильно определяете тип позиции,
нужно так
Не помогло и помочь не могло. Это функция и она в дополнительной инициализации не нуждается, она должна быть инициализирована в коде терминала.
Затем открывает еще одну позицию sell и только тогда функция интерпретирует позицию sell.
MQL5, это десктопный PHP5 и функции PositionSelect, PositionGetInteger и иные, это PHPишные пользовательские функции. Похоже что кодинг этой(этих) функций не фонтан. Она работает, но с опозданием на бар и дальше такая же беда, открывается позиция, на следующем баре аналогичная и попарно до финиша, а так как в функции PositionsTotal достоверные данные, значит ошибка в функциях Position... Выше писали, мол функция PositionSelect выберет позицию с наименьшим тикетом, вот только тикеты позиций sell под номерами 3,4, а наименьший тикет №2 у позиции buy, которая уже false. Или под словом наименьший подразумевается нечто иное?
Обратите внимание на справку:
PositionSelect - При независимом представлении позиций (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) по каждому символу одновременно может быть открыто несколько позиций. В этом случае, PositionSelect выберет позицию с наименьшим тикетом.
Теперь снова вопрос: где видно тикеты открытых позиций, время их открытия и тип позиций?
Даже больше, сейчас покажу на примере, что именно Вы делаете, выбирая позицию по СИМВОЛУ...
В этом коде сначала идёт выбор позиции через PositionSelect - выбор позиции по символу. В итоге, так как счёт у вас hadge - Вы выбираете позицию с НАИМЕНЬШИМ тикетом. Дальше идёт обход по всему списку позиций, чтобы Вы просто видели, какие позиции и какие тикеты у них.
Порядок работы с кодом:
А вот пример:
Открыта позиция BUY 0.02 лота
Открыта позиция BUY 0.04 лота
Открыта позиция SELL 0.06 лота
Я только учусь и попал в засаду. Примитивнейшее действие: получить тип позиции. Пробовал так:
Открыл buy - total и PositionGetInteger ее видят. Листаю, открывается позиция sell, total ее видит - 2 позиции, а PositionGetInteger - false.
Пробовал так, total и PositionSelect по нолям, а PositionGetInteger видит buy:
Есть ли способ получить банальную информацию о типе последней позиции, без необходимости писать сотни строк кода?
PositionSelect(_Symbol) не может вернуть все позиции открытые на hadge счёте.
Первая открытая позиция PositionGetTicket(0)
Последняя открытая позиция PositionGetTicket(PositionsTotal()-1)
Все остальные можно достать только в цикле.