Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1916

 
Valeriy Yastremskiy #:

Вопрос был не про это. Функция Дмитрия возвращает не аргумент по ссылке. Зачем использовать аргумент по ссылке? Да, локальные области смогут объявить переменную у себя и получить ответ в переменную после вызова функции.

И все???

Если переменная объявлена глобально, то одноимённых переменных быть не должно. Если-же из нескольких функций вызывать функцию, как в вашем примере, то можно не заморачиваться и в каждой объявить одноимённую переменную. Это удобно…

 
Valeriy Yastremskiy #:

Вопрос был не про это. Функция Дмитрия возвращает не аргумент по ссылке. Зачем использовать аргумент по ссылке? Да, локальные области смогут объявить переменную у себя и получить ответ в переменную после вызова функции.

И все???

1. Чтобы функция внутри себя могла изменить и вернуть любую переданную ей переменную, а не конкретную глобальную.

2. Чтобы не копировать в функцию какую-то переменную большого размера - массив, структуру, текстовую строку...

 
Alexey Viktorov #:

Если переменная объявлена глобально, то одноимённых переменных быть не должно. Если-же из нескольких функций вызывать функцию, как в вашем примере, то можно не заморачиваться и в каждой объявить одноимённую переменную. Это удобно…

Т.е. вопрос только к локализации использования для локальных областей с одинаковыми названиями аргументов по ссылке. Ну как бы не много, но что то есть. Думал что еще что то есть.

 
JRandomTrader #:

1. Чтобы функция внутри себя могла изменить и вернуть любую переданную ей переменную, а не конкретную глобальную.

2. Чтобы не копировать в функцию какую-то переменную большого размера - массив, структуру, текстовую строку...

Вопрос был о другом. В третьем примере Ваш 1й ответ. 2й. Не думаю, вопрос в возможности изменения полей или элементов сущности. В большинстве случаев они не константны, поэтому аргумент по ссылке очевиден для большинства случаев. НО если сущность константна, то ... но разрабы решили не заморачиваться.

 
Valeriy Yastremskiy #:

Т.е. вопрос только к локализации использования для локальных областей с одинаковыми названиями аргументов по ссылке. Ну как бы не много, но что то есть. Думал что еще что то есть.

Это только то, о чём я знаю, что для меня удобно. Наверняка есть ещё преимущества, такие например как резервирование памяти или ещё чего. А почему вы напрямую у Федосеева не спросите?
 
Alexey Viktorov #:
Это только то, о чём я знаю, что для меня удобно. Наверняка есть ещё преимущества, такие например как резервирование памяти или ещё чего. А почему вы напрямую у Федосеева не спросите?

Разный уровень восприятия))) Может и сам грешу, очевидные для себя вещи очень сложно доносить до других))))

 
Valeriy Yastremskiy #:

Можно и с одним аргументом икс сделать, объявив r в глобальной области.

Можно вообще без аргументов сделать объявив в глобальной области x. Более того, можно и результат не возвращать, а писать в глобальную переменную. Но это приведет к запутанности кода, необходимости помнить что и куда сохраняется, а с увеличением программного кода превратит жизнь программиста в Ад.
 
Добрый день. Подскажите пожалуйста чего не хватает? Цель - закрытие самых первых сделок с минимальным объемом. У меня в данный момент выбирает только ордера с объемом 0.01.
     for(int i=0; i<OrdersTotal(); i++){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
       if(OrderLots()==0.01){ 
     OrderClose(OrderTicket(),0.01,OrderType()==OP_BUY?Bid:Ask,3,clrWhite);return;}}}    }

Если не будет с 0.01 то должен выбирать ордера с 0.02 и так далее. Как расписать этот момент?

 
Rustam Bikbulatov #:
Добрый день. Подскажите пожалуйста чего не хватает? Цель - закрытие самых первых сделок с минимальным объемом. У меня в данный момент выбирает только ордера с объемом 0.01.

Если не будет с 0.01 то должен выбирать ордера с 0.02 и так далее. Как расписать этот момент?

if(OrderLots()==0.01)

Вы действительно сами этого не видите?

"Как расписать этот момент?"  - там где указан лот 0,01 надо высчитать минимальный имеющийся.

Возможно, проскальзывание нужно указать в пунктах, те 3*Point() , а не 3

 
Rustam Bikbulatov #:
Добрый день. Подскажите пожалуйста чего не хватает? Цель - закрытие самых первых сделок с минимальным объемом. У меня в данный момент выбирает только ордера с объемом 0.01.

Если не будет с 0.01 то должен выбирать ордера с 0.02 и так далее. Как расписать этот момент?

2 цикла надо: в первом узнаёте минимальный объем, во втором - закрываете. И учтите, что при закрытии ордера смещаются на 1 позицию, поэтому надо делать цикл от максимальной позиции к 0.