Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 94

 
Vikon:
Esto es lo que pasa cuando se llama a una función dentro de una clase: cómo privado: público:, cómo pasar datos a la clase y cómo obtener un resultado de la clase. Hasta ahora, esto es todo.

Dentro de la clase, el resultado tiene que ser calculado de alguna manera. ¿Y cómo entenderá la clase sin tu participación que necesita devolver el resultado ahora, pero no en otro momento?

Por lo tanto, necesitas un método dentro de la clase que pueda ser llamado desde fuera. Así que debe ser público.

Aunque por supuesto puedes hacer un método privado que lea todos los datos dentro de la clase y los escriba en la variable de la clase, y el método público llamará al método privado. Pero algún método debe ser llamado de todas formas. Y lo que se contará allí en el método privado, cuán complejos serán los cálculos y qué variables estarán involucradas en los cálculos - todo depende de usted, y bajo su propia responsabilidad.

 
Vikon:
Esa es la cuestión, cómo llamar a una función dentro de una clase, es decir, cómo private: public:, cómo pasar datos a una clase y cómo obtener el resultado de la clase. De momento, ¡aquí está!
#property version   "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int      inputA=1;
input int      inputB=3;

class ASD
  {
private:
   // Здесь располагаются переменные и функции, доступные только внутри класса
public:
   int Add(int a,int b)
     {
      Print(__FUNCTION__,": Результат сложения: a",a," + b",b," = ",a+b);
      return(a+b);
     }
  } ar;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   ar.Add( inputA, inputB );
  }
//+------------------------------------------------------------------+
Parece que debería funcionar, no he comprobado si es correcto)
 
Alexey Kozitsyn:
Creo que debería funcionar, no lo he comprobado para ver si es correcto)

Aquí tienes, gracias, ya estoy empezando a moverme -

el guión:

#include <ASD.mqh>
ASD ar;
void OnStart()
  {
   ar.fg (3,5);
   ar.sf ();
  }

clase:

class ASD
  {
private:
  int d;
  int g (int a_s,int a_d){d=a_s+a_d;return (d=a_s+a_d); }
public:
void fg (int a_s,int a_d)  { g (a_s,a_d); }
void sf ()                 {Alert (d);}
  };

La alerta da un resultado de 8, pero es una alerta de la clase, y ahora necesito una alerta del script

 
Vikon:

Aquí tienes, gracias, ya estoy empezando a moverme -

el guión:

#include <ASD.mqh>
ASD ar;
void OnStart()
  {
   ar.fg (3,5);
   ar.sf ();
  }

clase:

class ASD
  {
private:
  int d;
  int g (int a_s,int a_d){d=a_s+a_d;return (d=a_s+a_d); }
public:
void fg (int a_s,int a_d)  { g (a_s,a_d); }
void sf ()                 {Alert (d);}
  };

La alerta da un resultado de 8, pero es una alerta de la clase, y ahora necesito una alerta del script

Bien, declaras un método Alert() en la clase y lo llamas ar.Alert(), aunque ahora el método sf() hace lo mismo. No sé muy bien qué quieres ver después de haber escrito un valor en el campo d.
 
Alexey Kozitsyn:
Ok, declaras el método Alert() en la clase y lo llamas ar.Alert(), aunque ahora el método sf() hace lo mismo. No estoy muy seguro de lo que quieres ver después de haber escrito un valor en el campo d.
Si quieres obtener el valor de d sin llamar al método sf(), entonces necesitas añadir un método público int GetD() const { return( d ); }. Y en el script escribe Alert( ar.GetD() );
 
Alexey Kozitsyn:
Parece que debería funcionar, aún no lo he comprobado)

¡Todos! ¡Muchas gracias! Lo tengo -

guión:

#include <ASD.mqh>
ASD ar;
void OnStart()
  {
   ar.fg (3,5);
   Alert ( ar.sf ());
  }

clase:

class ASD
  {
private:
  int d;
  int g   (int a_s,int a_d)  {return (d=a_s+a_d); }
public:
  void fg (int a_s,int a_d)  { g (a_s,a_d); }
  int sf  ()                 {return (d);}    
  
  };


¡Lo masticaré!

 

No recuerdo quién me escribió en este hilo que el probador está roto, pero puedo responder que bien podría estar roto. Se traga diferentes trozos de tiempo o empieza a contar desde un segmento arbitrario (aunque todas las comillas están ahí).

Creo que quien necesita ver lo entenderá.

 
Buenas tardes, ¿podría decirme si la función MRoubd se puede importar desde MSDN
?
(devuelve un número redondeado a un múltiplo de un valor dado)

o cómo redondear, por ejemplo, 2285,13 para que sea un múltiplo de (0,25) 2285,00 __ 2285,25 ___ 2285,50 ___ 2285,75
 
¿Cómo puedo saber el apalancamiento de un par, no de una cuenta?
 
SAMER:
¿cómo puedo saber el apalancamiento de un par y no de una cuenta?

La cantidad de apalancamiento proporcionada:

long liverage=AccountInfoInteger(ACCOUNT_LEVERAGE);