Vladimir Karputov: Это не "... функция чего там не видит... ", а Вы неверно составляете алгоритм. Почитайте Все, что Вам советовали все выше. Поработайте с кодом. Разберитесь, что возвращается при выборе позиции по номеру тикета и при выборе позиции по названию символа.
В вашем коде проверка и моем коде проверка на POSITION_TYPE_SELL и POSITION_TYPE_BAY. Что можно проверить еще? Как выбрать позицию, если функция из двух позиции не может интерпретировать конкретно указанный тип POSITION_TYPE_SELL. Здесь явные проблемы в алгоритме функции. Как предлагаете выбрать позицию, если предназначенная для этого функция не выполняет возложенные на нее обязанности? Она обязана видеть эту позицию, я начинающий, но немного изучал PHP, не настолько дремуч. У MQL5 и PHP схожий синтаксис, мне даже кажется, что MQL5, это PHP перенесенный на десктоп.
ovak77: В вашем коде проверка и моем коде проверка на POSITION_TYPE_SELL и POSITION_TYPE_BAY. Что можно проверить еще? Как выбрать позицию, если функция из двух позиции не может интерпретировать конкретно указанный тип POSITION_TYPE_SELL. Здесь явные проблемы в алгоритме функции. Как предлагаете выбрать позицию, если предназначенная для этого функция не выполняет возложенные на нее обязанности? Она обязана видеть эту позицию, я начинающий, но немного изучал PHP, не настолько дремуч. У MQL5 и PHP схожий синтаксис, мне даже кажется, что MQL5, это PHP перенесенный на десктоп.
Давайте по порядку. Итак шаг первый: какой тип счёта - неттинг или хеджинг?
Давайте по порядку. Итак шаг первый: какой тип счёта - неттинг или хеджинг?
На неттинге, это работает - хеджинг, но это вообще не при делах. Образно: я привел функцию в логи позиций и сказал, выбери мне из двух позиций, позицию POSITION_TYPE_SELL, а функция "зависла", чешет репу и из двух типов не может интерпретировать конкретно указанный тип. Это тот же PHP, да и любой другой, нормальный язык в данной ситуации интерпретирует позицию, их всего две, а платформа не работает с миллионными объемами данных, тики, типы позиции, ордера и иная мелочь, это не космолет, а велосипед, но даже из этого велосипеда, из мизера данных не получается получить необходимую инфу.
И при том, на следующем баре открывается позиция sell (тикет №4), следом за sell (тикет №3) и №4 интерпретируется, его функция видит.
ovak77: На неттинге, это работает - хеджинг, но это вообще не при делах. Образно: я привел функцию в логи позиций и сказал, выбери мне из двух позиций, позицию POSITION_TYPE_SELL, а позиция "зависла", чешет репу и двух типов не может интерпретировать конкретно указанный тип. Это тот же PHP, да и любой другой, нормальный язык в данной ситуации интерпретирует позицию, их всего две, а платформа не работает с миллионными объемами данных, тики, типы позиции, ордера и иная мелочь, это не космолет, а велосипед, но даже из этого велосипеда из мизера данных не получается получить необходимую инфу.
Вы выделяете всего ОДНУ позицию. Соответственно для неё будет или BUY или SELL. Если нужно сделать обход по всем позициям, то нужен цикл - от "PositionsTotal()-1", до ">=0":
Мысли вслух. Надо получить тикет, тип и иную инфу о позиции, по
приведенному вами кодингу надо получать инфу о счете, аккаунте, хеджинг,
неттинг, а зайти в логи и выбрать последнюю позицию например sell
нельзя? Просто я не могу понять, при каких делах счета, если есть список
позиций и из этого списка просто надо выбрать позиции(ю) подходящего
типа по условиям. Потом пойдут ордера ... засада. Есть PositionSelect, PositionGetInteger, PositionGetTicket, по сути на них возложена работа с позициями, но проверка не тот тип интерпретирует, при отсутствии позиции, высвечивает тип позиции которой нет (скрин №3) или может я чего то не понимаю и функции Position.... для другого предназначены? Код должен работать с реальными деньгами, а тут черти че и сбоку бантик, за такие глюки и сливы разрабов подвесят за причинные места
Не помогло и помочь не могло. Это функция и она в дополнительной инициализации не нуждается, она должна быть инициализирована в коде терминала.
Затем открывает еще одну позицию 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 - Вы выбираете позицию с НАИМЕНЬШИМ тикетом. Дальше идёт обход по всему списку позиций, чтобы Вы просто видели, какие позиции и какие тикеты у них.
Порядок работы с кодом:
Скомпилируйте и прикрепите на график.
Дальше поочерёдно открывайте позиции и внимательно смотрите на вывод на экран - сразу увидите, КАКУЮ именно позицию ВЫ выбираете, работая через PositionSelect.
Не забывайте смотреть на тикеты позиций.
А вот пример:
MetaTrader 5 x64 build 1571 started (MetaQuotes Software Corp.)
Windows 10 Pro (x64 based PC), IE 11.00, UAC, Intel Core i3-3120M @ 2.50GHz, RAM: 4587 / 8077 Mb, HDD: 325270 / 476372 Mb, GMT+02:00
C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075
Это не "... функция чего там не видит... ", а Вы неверно составляете алгоритм. Почитайте Все, что Вам советовали все выше. Поработайте с кодом. Разберитесь, что возвращается при выборе позиции по номеру тикета и при выборе позиции по названию символа.
В вашем коде проверка и моем коде проверка на 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)
Все остальные можно достать только в цикле.