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

 
Здравствуйте, подскажите, пожалуйста, как программно можно понять, что цена подошла к круглому уровню?
 
profitnik:
Здравствуйте, подскажите, пожалуйста, как программно можно понять, что цена подошла к круглому уровню?
Нормализовать цену до нужного количества знаков после запятой, NormalizeDouble()
 

Подскажите, пожалуйста, как правильно возвращать несколько значений результатов расчета функции?

Допустим, у меня функция ABC - я хочу получить сразу значения трех переменных, как это делать?


int ABC()
  {
   int A=1;
   int B=1;
   int C=1;

  return (A,B,C)
 }
 
-Aleks-:

Подскажите, пожалуйста, как правильно возвращать несколько значений результатов расчета функции?

Допустим, у меня функция ABC - я хочу получить сразу значения трех переменных, как это делать?

//int a, b, c;

OnTick()
 {
 //int a, b, c;
 ABC(a, b, c);
 Print(a," | ", b," | ", c);
 }

void ABC(int &A,int &B,int &C)
  {
   A=1;
   B=1;
   C=1;
 }
Вроде так
 
Vitaly Muzichenko:
Вроде так

 

Спасибо.

Но я что т не соображу, если на вход у меня 2 переменных для расчета, а выйти должно 3 (с разными типами int и double), то тут как быть?

 
-Aleks-:

 

Спасибо.

Но я что т не соображу, если на вход у меня 2 переменных для расчета, а выйти должно 3 (с разными типами int и double), то тут как быть?


OnTick()
 {
   double x,y,c;

   int    q=5;
   double w=0.1;
   ABC(q,w);

   Print(x," | ", y," | ", c);
 }

void ABC(int A,double B)
  {
   x=A+B;
   y=A-B;
   c=A*B;
  }
 
-Aleks-:

 

Спасибо.

Но я что т не соображу, если на вход у меня 2 переменных для расчета, а выйти должно 3 (с разными типами int и double), то тут как быть?

int a, b;
double c;

OnTick()
 {
 a=11; b=3;
 ABC(a, b, c);
 Print(a," | ",b," | ",c);
 }

void ABC(int &A,int &B,double &C)
  {
   A=B+4;
   B=A-2;
   C=(double)A/B;
 }
 

Извиняюсь за тугодумие, но лучше мне на примере моем понять, как это организовать - есть функция, которая много раз вызывается в коде в разных местах - сейчас она возвращает одно значение, а надо ещё, допустим 2 _High и _Low - как тут быть?


int BarPeresek_iMAf(int PeriodMA)
  {
   int TFT=0;
   int shiftMAT=0;
   int typeMAT=0;
   int priceMAT=0;
   int BarPeresek=0;
   if(Bars>PeriodMA)
     {
      for(int X=1;X<1000; X++)
        {
         double MAT=NormalizeDouble(iMA(Symbol(),TFT,PeriodMA,shiftMAT,typeMAT,priceMAT,X),Digits);
         if((Low[X]>MAT && High[X]>MAT) || 
            (Low[X]<MAT && High[X]<MAT))BarPeresek++;
         else {BarPeresek++; break;}
        }

     }
   double _High=High[BarPeresek]; //Надо получить сразу из функции
   double _Low=Low[BarPeresek];   //Надо получить сразу из функции
   return BarPeresek;
  }
 
-Aleks-:

Извиняюсь за тугодумие, но лучше мне на примере моем понять, как это организовать - есть функция, которая много раз вызывается в коде в разных местах - сейчас она возвращает одно значение, а надо ещё, допустим 2 _High и _Low - как тут быть?



OnTick()
{
   double _High=High[BarPeresek_iMAf(Per_MA)];
   double _Low=Low[BarPeresek_iMAf(Per_MA)];
} 

int BarPeresek_iMAf(int PeriodMA)
  {
   int TFT=0;
   int shiftMAT=0;
   int typeMAT=0;
   int priceMAT=0;
   int BarPeresek=0;
   if(Bars>PeriodMA)
     {
      for(int X=1;X<1000; X++)
        {
         double MAT=NormalizeDouble(iMA(Symbol(),TFT,PeriodMA,shiftMAT,typeMAT,priceMAT,X),Digits);
         if((Low[X]>MAT && High[X]>MAT) || 
            (Low[X]<MAT && High[X]<MAT))BarPeresek++;
         else {BarPeresek++; break;}
        }
     }
   return BarPeresek;
  }

 
Nikolay Gaylis:

 

Э не, мне надо из функции получить значение - _High и _Low  это просто пример...