Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1747

 
Andrey Sokolov #:

Obrigado.

Acontece que existem funções diferentes com o mesmo nome, mas vocênão pode tornar possível a passagem de um número diferente de parâmetros?

Pode, mas é menos que os parâmetros, o botão de exemplo tem muitos parâmetros, mas
//+------------------------------------------------------------------+ 
//| Создает кнопку                                                   | 
//+------------------------------------------------------------------+ 
bool ButtonCreate(const long              chart_ID=0,               // ID графика 
                  const string            name="Button",            // имя кнопки 
                  const int               sub_window=0,             // номер подокна 
                  const int               x=0,                      // координата по оси X 
                  const int               y=0,                      // координата по оси Y 
                  const int               width=50,                 // ширина кнопки 
                  const int               height=18,                // высота кнопки 
                  const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // угол графика для привязки 
                  const string            text="Button",            // текст 
                  const string            font="Arial",             // шрифт 
                  const int               font_size=10,             // размер шрифта 
                  const color             clr=clrBlack,             // цвет текста 
                  const color             back_clr=C'236,233,216',  // цвет фона 
                  const color             border_clr=clrNONE,       // цвет границы 
                  const bool              state=false,              // нажата/отжата 
                  const bool              back=false,               // на заднем плане 
                  const bool              selection=false,          // выделить для перемещений 
                  const bool              hidden=true,              // скрыт в списке объектов 
                  const long              z_order=0)                // приоритет на нажатие мышью 

Ele desenhará mesmo com um mínimo de parâmetros

ButtonCreate(0,InpName,0,x,y,x_size,y_size,InpCorner);
 
Andrey Sokolov #:

Saudações. Você poderia me dizer se e como isso pode ser feito?

É possível escrever suas próprias funções para que você possa passar um número diferente de parâmetros para as funções escritas?

Como, por exemplo, nesta função, você pode passar 4 ou 5 parâmetros.


/********************Script program start function*******************/
void OnStart()
 {
  double a = 2.87,
         b = 3.62,
         c = 0;
  Print("Fu(a, b) ", Fu(a, b));
  Fu(a, b, c);
  Print("Fu(a, b, c) ", c);
 }/******************************************************************/
double Fu(double x, double y)
 {
  return x*y;
 }/******************************************************************/
void Fu(double x, double y, double & z)
 {
  z = x+y;
 }/******************************************************************/
/*****************************End program****************************/

O resultado é

2021.11.15 00:01:54.629 00 USDJPY,M15: Fu(a, b, c) 6.49
2021.11.15 00:01:54.629 00 USDJPY,M15: Fu(a, b) 10.3894
 

Por favor, ajude-me, eu não consigo descobrir qual é o erro

   for(i=limit;i>=0;i--)
     {
      if(up)
        {
         if(Label1Buffer[i+1]<Input1){a+=1;}
         else {up=false;}
        }
      if(!up)
        {
         if(Label1Buffer[i+1]>0){a-=1;}
         else {up=true;}
        }
      Label1Buffer[i]=a;

Eu queria uma onda uniforme, mas por alguma razão "0" vai duas vezes


 

Por quea NormalizeDouble às vezes não funciona?

Quando imprimo um array para o log, quase todos os valores duplos são impressos na casa decimal especificada, e cerca de 3-4 valores (de uma centena) com 15 dígitos.

...

2021.11.15 04:01:07.821Sov2EURUSD,M1: 9.9
2021.11.15 04:01:07.724 Sov2 EURUSD,M1: 9.800000000000001
2021.11.15 04:01:07.675 Sov2 EURUSD,M1: 9.9
2021.11.15 04:01:07.626 Sov2 EURUSD,M1: 9.6
2021.11.15 04:01:07.577 Sov2 EURUSD,M1: 9.1

...

 
MakarFX #:

Por favor, ajude-me, eu não consigo descobrir qual é o erro

Queria uma onda uniforme, mas por alguma razão "0" vai duas vezes


porque as condições são confusas, em uma iteração do loop você só deve ter a bandeira para cima em um estado, e você pode ter a verdadeira e na mesma iteração do loop se tornar falsa

Eu o escreveria dessa forma em geral:

   int y = 0, shift = 1;
   const int max_value = 100;
   const int min_value = 0;
   for(int i = rates_total - 1; i >= 0; i--)
   {
      Label1Buffer[i] = y; 
      y += shift;
      if(y >= max_value || y <= min_value) shift *= -1;
   }
 
Igor Makanu #:

porque as condições são confusas, em uma iteração do loop você só deve ter a bandeira para cima em um estado, mas você pode ter a verdadeira e na mesma iteração do loop se tornar falsa

Eu o escreveria dessa forma em geral:

Muito obrigado, Igor, muito obrigado.
 

Você pode me dizer como fazer isso corretamente?

   for(i=limit;i>=0;i--)
     {
      Label1Buffer[i] = MathRand(); 
      Label2Buffer[i] = Label1Buffer[i+1]+Label1Buffer[i+2]+Label1Buffer[i+3]+Label1Buffer[i+4]+Label1Buffer[i+5]; 
     }

não entrar todos os elementos que eu quero somar, mas apenas especificar 5 elementos

 
Sergey Zhukov #:

Se você renomeá-lo para *.mq4, tudo está bem.

Se você a compila dessa maneira, você recebe erros.

Eu não tenho erros


 
MakarFX #:

Eu não tenho erros.


O meu é parecido com o seguinte:

e

De qualquer forma, não é crítico. Obrigado por sua ajuda.