Оператор цикла и операторы в теле цикла. Не совсем классический русский язык.
Все конечно хорошо, но где итератор i в теле цикла? И для того что бы получить символ позиции и ее магик ее надо сперва выбрать. Описание позиции это структура (в мкл5 все структура и ордера и время и сделки) и она заполняется через выбор, селект по итератору который не тикет позиции, а номер позиции. и надо помнить, что в структуре описания позиции всегда последний выбор позиции.
Здравствуйте, Валерий! Спасибо за пояснение.
В этом-то и была заключена вся моя непонятка, т.к. без оператора цикла for всё работало, а с ним, почему-то нет. Правильно ли Вас понял, что нужно сначала делать все необходимые запросы через request?
В этом-то и была заключена вся моя непонятка, т.к. без оператора цикла for всё работало, а с ним, почему-то нет. Правильно ли Вас понял, что нужно сначала делать все нужные запросы через request?
С уважением, Владимир.
нет, не совсем знаю МКЛ5 . Это запрос на исполнение. А нужно выбрать позицию по номеру, для дальнейшей работы с ней.
Ужаемые специалисты! Прошу подсказать, но только не исправленным кодом, а словами, иначе так никогда не изучу язык программирования MQL5.
С уважением, Владимир.
Здравствуйте! Словами; дело в том, что применив цикл перебора открытых позиций Вы его никак не обозначили в условиях "если", тоесть что именно перебирает цикл for, также Вы его ничем не завершили, он должен что то возвращять...
Подсчёт открытых позиций происходит постоянно, и лучше создать блок с циклом а при открытии к нему обращаться, например так;
inputint MaxOpenedPositions=1;
.
.
.
int Total=TotalPositions(-1);
if(Total<MaxOpenedPositions && другие условия для открытия) OpenBUY();//напримерif(Total<MaxOpenedPositions && другие условия для открытия) OpenSELL();//например//+------------------------------------------------------------------+//| Total Positions |//+------------------------------------------------------------------+int TotalPositions(int Type)
{
int cnt=0;
if(PositionsTotal()>0)
for(int i=PositionsTotal()-1;i>=0;i--)
if(PositionSelectByTicket(PositionGetTicket(i)) && PositionGetString(POSITION_SYMBOL)==_Symbol && PositionGetInteger(POSITION_MAGIC)==MagicNumber)
{
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) {cnt++;continue;}
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) {cnt++;}
}
return(cnt);
}
Здравствуйте! Словами; дело в том, что применив цикл перебора открытых позиций Вы его никак не обозначили в условиях "если", тоесть что именно перебирает цикл for, также Вы его ничем не завершили, он должен что то возвращять...
Подсчёт открытых позиций происходит постоянно, и лучше создать блок с циклом а при открытии к нему обращаться, например так;
Здравствуйте!
Спасибо за подсказку. Попробую разобраться и применить Ваш вариант перебора открытых позиций.
Здравствуйте! Словами; дело в том, что применив цикл перебора открытых позиций Вы его никак не обозначили в условиях "если", тоесть что именно перебирает цикл for, также Вы его ничем не завершили, он должен что то возвращять...
Кстати, по поводу того, что цикл должен по завершении что-то возвращать, в Справочнике MQL5 ничего не сказано. Может опять не так что-то понял? Или это касается оператора if?
Перепробовал всё, в том числе и PositionSelect. Ничего не помогло.
С уважением, Владимир.
Только понял, да, выбор позиции в неттинге по инструменту а не по номеру. Ох, намудрили)
Можно через
PositionGetTicket возвращает тикет позиции по номеру позиции (а у нас номер) и получив тикет позиции мы можем получить ее символ и магик.
Или если это неттинг подумать, и решить, а зачем нам общее количество ордеров или позиций, если у нас на одном инструменте может быть только одна позиция, и нам это и нужно узнать. Поэтому цикл может и не нужен. На нашем инструменте делаем Если ПозишнСелект возвращает Ложь, то открывает позицию, а если Тру, то происходит выбор позиции на этом инструменте и мы можем с ним работать, и модифицировать для трала.
Только понял, да, выбор позиции в неттинге по инструменту а не по номеру. Ох, намудрили)
Можно через
PositionGetTicket возвращает тикет позиции по номеру позиции (а у нас номер) и получив тикет позиции мы можем получить ее символ и магик.
Или если это неттинг подумать, и решить, а зачем нам общее количество ордеров или позиций, если у нас на одном инструменте может быть только одна позиция, и нам это и нужно узнать. Поэтому цикл может и не нужен. На нашем инструменте делаем Если ПозишнСелект возвращает Ложь, то открывает позицию, а если Тру, то происходит выбор позиции на этом инструменте и мы можем с ним работать, и модифицировать для трала.
Так изначально код был написан без оператора цикла, хотя мне потом стало интересно попробовать, как его применить.
Кстати, по поводу того, что цикл должен по завершении что-то возвращать, в Справочнике MQL5 ничего не сказано. Может опять не так что-то понял?
С уважением, Владимир.
Не совсем верно формулировка, в зависимости от итератора в теле цикла должны выполнятся действия. В зависимости от итератора. А возвращать результат выполнения этих действий в теле цикла. Если цикл прошел, и не было операторов брейк или континью значит к Выражению 3 и далее к Выражению 2 и если оно Тру, то с новым итератором в тело цикла.
Так изначально код был написан без оператора цикла, хотя мне потом стало интересно попробовать, как его применить.
С уважением, Владимир.
Можно применить
PositionGetTicket возвращает тикет позиции по номеру позиции (а у нас номер) и получив тикет позиции мы можем получить ее символ и магик.
Перебрать все тикеты по номеру. И через тикеты узнать символы позиций и сравнить с нашей. Получить магик позиций и сравнить с нашим.
if(PositionSelectByTicket(PositionGetTicket(i)) && PositionGetString(POSITION_SYMBOL)==_Symbol &&
PositionGetInteger(POSITION_MAGIC)==MagicNumber) // вот эта строчка
Оператор цикла и операторы в теле цикла. Не совсем классический русский язык.
Все конечно хорошо, но где итератор i в теле цикла? И для того что бы получить символ позиции и ее магик ее надо сперва выбрать. Описание позиции это структура (в мкл5 все структура и ордера и время и сделки) и она заполняется через выбор, селект по итератору который не тикет позиции, а номер позиции. и надо помнить, что в структуре описания позиции всегда последний выбор позиции.
Здравствуйте, Валерий! Спасибо за пояснение.
В этом-то и была заключена вся моя непонятка, т.к. без оператора цикла for всё работало, а с ним, почему-то нет. Правильно ли Вас понял, что нужно сначала делать все необходимые запросы через request?
С уважением, Владимир.
Здравствуйте, Валерий! Спасибо за пояснение.
В этом-то и была заключена вся моя непонятка, т.к. без оператора цикла for всё работало, а с ним, почему-то нет. Правильно ли Вас понял, что нужно сначала делать все нужные запросы через request?
С уважением, Владимир.
нет, не совсем знаю МКЛ5 . Это запрос на исполнение. А нужно выбрать позицию по номеру, для дальнейшей работы с ней.
PositionSelect
думаю так.
Всем доброго дня и хорошего настроения!
Ужаемые специалисты! Прошу подсказать, но только не исправленным кодом, а словами, иначе так никогда не изучу язык программирования MQL5.
С уважением, Владимир.Здравствуйте! Словами; дело в том, что применив цикл перебора открытых позиций Вы его никак не обозначили в условиях "если", тоесть что именно перебирает цикл for, также Вы его ничем не завершили, он должен что то возвращять...
Подсчёт открытых позиций происходит постоянно, и лучше создать блок с циклом а при открытии к нему обращаться, например так;
нет, не совсем знаю МКЛ5 . Это запрос на исполнение. А нужно выбрать позицию по номеру, для дальнейшей работы с ней.
PositionSelect
думаю так.
Перепробовал всё, в том числе и PositionSelect. Ничего не помогло.
С уважением, Владимир.
Здравствуйте! Словами; дело в том, что применив цикл перебора открытых позиций Вы его никак не обозначили в условиях "если", тоесть что именно перебирает цикл for, также Вы его ничем не завершили, он должен что то возвращять...
Подсчёт открытых позиций происходит постоянно, и лучше создать блок с циклом а при открытии к нему обращаться, например так;
Здравствуйте!
Спасибо за подсказку. Попробую разобраться и применить Ваш вариант перебора открытых позиций.
С уважением, Владимир.
Здравствуйте! Словами; дело в том, что применив цикл перебора открытых позиций Вы его никак не обозначили в условиях "если", тоесть что именно перебирает цикл for, также Вы его ничем не завершили, он должен что то возвращять...
Кстати, по поводу того, что цикл должен по завершении что-то возвращать, в Справочнике MQL5 ничего не сказано. Может опять не так что-то понял? Или это касается оператора if?
С уважением, Владимир.
Перепробовал всё, в том числе и PositionSelect. Ничего не помогло.
С уважением, Владимир.
Только понял, да, выбор позиции в неттинге по инструменту а не по номеру. Ох, намудрили)
Можно через
Только понял, да, выбор позиции в неттинге по инструменту а не по номеру. Ох, намудрили)
Можно через
Так изначально код был написан без оператора цикла, хотя мне потом стало интересно попробовать, как его применить.
С уважением, Владимир.
Кстати, по поводу того, что цикл должен по завершении что-то возвращать, в Справочнике MQL5 ничего не сказано. Может опять не так что-то понял?
С уважением, Владимир.
Не совсем верно формулировка, в зависимости от итератора в теле цикла должны выполнятся действия. В зависимости от итератора. А возвращать результат выполнения этих действий в теле цикла. Если цикл прошел, и не было операторов брейк или континью значит к Выражению 3 и далее к Выражению 2 и если оно Тру, то с новым итератором в тело цикла.
Так изначально код был написан без оператора цикла, хотя мне потом стало интересно попробовать, как его применить.
С уважением, Владимир.
Можно применить
Перебрать все тикеты по номеру. И через тикеты узнать символы позиций и сравнить с нашей. Получить магик позиций и сравнить с нашим.
Но только зачем.