Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нем неправильно. Необходимо обновить браузер или попробовать использовать другой.
mk{MA); это вызов функции с передачей в неё переменной. В частном случае массива.
Знак & в такой записи означает, что переменная передаётся в функцию по ссылке. То-есть при изменении в массиве ма[] произойдёт изменение в массиве МА[] который объявлен локально в функции OnTick()
Плюсов не много, но самый главный плюс возможность вернуть из функции несколько значений. И второе, это иметь несколько одноимённых переменных или массивов в разных функциях и они между собой не будут конфликтовать. А минусов вообще нет, или я о них не знаю.
Вот такой пример
C++:
void OnStart()
{
int a, b;
double c, d;
a = fu(b, c, d);
Print("a = ", a, " b = "b, " c = ", c, " d = ", d)
}
int fu(int &e, double &f, double &g)
{
e = 77;
f = 2.75;
g = 33.9;
return(7);
}
mk{MA); это вызов функции с передачей в неё переменной. В частном случае массива.
Знак & в такой записи означает, что переменная передаётся в функцию по ссылке. То-есть при изменении в массиве ма[] произойдёт изменение в массиве МА[] который объявлен локально в функции OnTick()
Плюсов не много, но самый главный плюс возможность вернуть из функции несколько значений. И второе, это иметь несколько одноимённых переменных или массивов в разных функциях и они между собой не будут конфликтовать. А минусов вообще нет, или я о них не знаю.
Вот такой пример
C++:
void OnStart()
{
int a, b;
double c, d;
a = fu(b, c, d);
Print("a = ", a, " b = "b, " c = ", c, " d = ", d)
}
int fu(int &e, double &f, double &g)
{
e = 77;
f = 2.75;
g = 33.9;
return(7);
}
А насчет моей версии записи какие + и -? Если я не ошибаюсь при моем способе я же могу в коментариях получить несколько значений, то есть получается я возвращаю массив данных MA[10]. Это тоже должно быть не сомненным плюсом?
Действие индексных переменных i и j прекращается на
MA [j] = iMA(NULL,PERIOD_CURRENT,18*i,0,MODE_EMA,PRICE_CLOSE,j); и в return они уже не действуют и вообще в возврате значений нет смысла - просто в массиве будут записаны значения машки и уже в любом другом месте из этого массива можно вытащить нужные данные.
Действие индексных переменных i и j прекращается на
MA [j] = iMA(NULL,PERIOD_CURRENT,18*i,0,MODE_EMA,PRICE_CLOSE,j); и в return они уже не действуют и вообще в возврате значений нет смысла - просто в массиве будут записаны значения машки и уже в любом другом месте из этого массива можно вытащить нужные данные.
Тут сложно судить о преимуществах. Зависит от поставленной задачи. Не нужно передавать данные в функцию в виде массива и массив можно так же использовать в разных других функциях.
А насчет моей версии записи какие + и -? Если я не ошибаюсь при моем способе я же могу в коментариях получить несколько значений, то есть получается я возвращаю массив данных MA[10]. Это тоже должно быть не сомненным плюсом?
В таких примитивных примерах говорить о + и - довольно сложно. Но самый большой минус в использовании переменных глобального уровня в том, что в самых неожиданных местах программы могут быть изменены значения и в результате поймали неуловимую ошибку.
Тут сложно судить о преимуществах. Зависит от поставленной задачи. Не нужно передавать данные в функцию в виде массива и массив можно так же использовать в разных других функциях.
В каких случаях лучше использовать ссылку & а в каких нет?Когда понять когда нужно делать это: "Не нужно передавать данные в функцию в виде массива и массив можно так же использовать в разных других функциях." а в когда нет?
Здесь есть 2 варианта использования ссылки:
1. Мы имеем какое-то значение и его нужно передать в функцию во входное значение функции, чтобы это значение в самой функции можно было использовать и результирующее значение, после расчетов в функции, передать обратно во входное значение (заменив его).
2. То же, что в предыдущем варианте, но в варианте const - тогда мы передаем в функцию значение, но на выходе передаваемое значение не изменится - мы просто передаем в функцию значение для внутренних расчетов этой функции.
В первом варианте есть смысл, если нам нужно 2 разных переменных (массива) из разных функций синхронизировать.
Второй вариант имеет смысл, если используется функция, в которую нужно передать какую-то информацию из исходного массива для каких-то расчетов. Функция после расчетов каким-то своим способом возвращает значения (записывает в глобальный массив к примеру).
В любом случае ссылка имеет смысл, если нужен обмен информацией между функциями либо для синхронизаци, либо для передачи массива данных.
Здесь есть 2 варианта использования ссылки:
1. Мы имеем какое-то значение и его нужно передать в функцию в входное значение функции, чтобы это значение в самой функции можно было использовать и результирующее значение после расчетов в функции передать обратно во входное значение (заменив его).
2. То же, что в предыдущем варианте, но в варианте const - тогда мы передаем в функцию значение, но на выходе передаваемое значение не изменится - мы просто передаем в функцию значение для внутренних расчетов этой функции.
В первом варианте есть смысл, если нам нужно 2 разных переменных (массива) из разных функций синхронизировать.
Второй вариант имеет смысл, если используется функция, в которую нужно передать какую-то информацию из исходного массива для каких-то расчетов. Функция после расчетов каким-то своим способом возвращает значения (записывает в глобальный массив к примеру).
В любом случае ссылка имеет смысл, если нужен обмен информацией между функциями.
Здесь есть 2 варианта использования ссылки:
1. Мы имеем какое-то значение и его нужно передать в функцию в входное значение функции, чтобы это значение в самой функции можно было использовать и результирующее значение после расчетов в функции передать обратно во входное значение (заменив его).
2. То же, что в предыдущем варианте, но в варианте const - тогда мы передаем в функцию значение, но на выходе передаваемое значение не изменится - мы просто передаем в функцию значение для внутренних расчетов этой функции.
В первом варианте есть смысл, если нам нужно 2 разных переменных (массива) из разных функций синхронизировать.
Второй вариант имеет смысл, если используется функция, в которую нужно передать какую-то информацию из исходного массива для каких-то расчетов. Функция после расчетов каким-то своим способом возвращает значения (записывает в глобальный массив к примеру).
В любом случае ссылка имеет смысл, если нужен обмен информацией между функциями либо для синхронизаци, либо для передачи массива данных.
В таких примитивных примерах говорить о + и - довольно сложно. Но самый большой минус в использовании переменных глобального уровня в том, что в самых неожиданных местах программы могут быть изменены значения и в результате поймали неуловимую ошибку.
у меня в планах навернуть сложный советник и 27 стратегий простых, трелинг стопа, разной варианта торговли.) Там можно будет выбирать либо 1ну стратегию или все сразу.
int SV[3];
void OnTick()
{
////////////////////////////////////////////////////////////////////////////
nk(SV);Comment(SV[2]);
////////////////////////////////////////////////////////////////////////////
}
void nk (int &mb[3])//Массив данных для 3х первых свечей
{
for(int i = 0; i < ArrayRange(mb, 0);i++)
mb[i]=(NormalizeDouble(Open[i]-Close[i],Digits))/Digits;
};
//Хочу записать целочисленное значения высоты свечи.
Выдает непонятную ошибку:
possible loss of data due to type conversion Umr.mq4 207 11
int SV[3];
void OnTick()
{
////////////////////////////////////////////////////////////////////////////
nk(SV);Comment(SV[2]);
////////////////////////////////////////////////////////////////////////////
}
void nk (int &mb[3])//Массив данных для 3х первых свечей
{
for(int i = 0; i < ArrayRange(mb, 0);i++)
mb[i]=(NormalizeDouble(Open[i]-Close[i],Digits))/Digits;
};
//Хочу записать целочисленное значения высоты свечи.
Выдает непонятную ошибку:
possible loss of data due to type conversion Umr.mq4 207 11
Раз Андрей не отвечает (пока его нет на связи) попробую, пояснить:
(int)(...) преобразует значение в скобках (если для функции или не для формулы, можно без скобок) в целочисленное значение (отсекает все после запятой без нормализации).
Так можно большинство переменных из одного типа преобразовывать в другой. Но сама переменная при этом тип не меняет - мы получаем только преобразованное значение в нужном нам типе.