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

 
Vikon:
Eis a questão de chamar uma função dentro de uma classe: como privada: pública:, como passar dados para a classe e como obter um resultado da classe. Até agora é isso!

Dentro da classe, o resultado tem que ser calculado de alguma forma. E como a classe sem seu envolvimento entenderá que precisa devolver o resultado agora, mas não em algum outro momento?

Portanto, você precisa de um método dentro da classe que possa ser chamado de fora. Portanto, deve ser público.

Embora, naturalmente, você possa fazer um método privado que lerá todos os dados dentro da classe e os escreverá na variável de classe, e o método público chamará o método privado. Mas algum método deve ser chamado de qualquer maneira. E o que será contado lá em método privado, como os cálculos serão complexos e que variáveis estarão envolvidas nos cálculos - tudo depende de você, e de sua própria responsabilidade.

 
Vikon:
Esse é o ponto, como chamar uma função dentro de uma classe, ou seja, como privada: pública:, como passar dados para uma classe e como obter o resultado da classe. Até agora, aqui 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 deve funcionar, ainda não verifiquei se está correto)
 
Alexey Kozitsyn:
Acho que deve funcionar, ainda não verifiquei se está correto)

Aqui, obrigado, eu já estou começando a me mover -

o roteiro:

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

classe:

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);}
  };

Alerta dá um resultado de 8, mas é um alerta da classe, e agora eu preciso de um alerta do roteiro

 
Vikon:

Aqui, obrigado, eu já estou começando a me mover -

o roteiro:

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

classe:

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);}
  };

Alerta dá um resultado de 8, mas é um alerta da classe, e agora eu preciso de um alerta do roteiro

Ok, você declara um método Alert() na classe e o chama de ar.Alert(), embora agora o método sf() faça o mesmo. Não sei bem o que você quer ver depois de ter escrito um valor no campo d?
 
Alexey Kozitsyn:
Ok, você declara método Alert() na classe e o chama de ar.Alert(), embora agora o método sf() faça o mesmo. Não sei bem o que você quer ver depois de ter escrito um valor para o campo d?
Se você quiser obter o valor de d sem chamar o método sf(), então você precisa adicionar um método público em GetD() const { return( d ); }; }. E no roteiro escreva Alert( ar.GetD() );
 
Alexey Kozitsyn:
Parece que deve funcionar, ainda não checado)

A todos! Muito obrigado! Consegui -

roteiro:

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

classe:

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);}    
  
  };


Vou mastigar!

 

Não me lembro quem me escreveu neste tópico que o testador está quebrado, mas posso responder que ele pode muito bem estar quebrado. Ou engole diferentes pedaços de tempo ou começa a contar a partir de um segmento arbitrário (embora todas as citações estejam lá).

Acho que quem precisa ver vai entender.

 
Boa tarde, você poderia me dizer se a função MRoubd pode ser importada da MSDN
?
(retorna um número arredondado para um múltiplo de um determinado valor)

ou como arredondar, por exemplo, 2285,13 para ser um múltiplo de (0,25) 2285,00 __ 2285,25 ___ 2285,50 ___ 2285,75
 
Como posso saber a alavancagem de um par, não de uma conta?
 
SAMER:
como posso saber a alavancagem de um par em vez de uma conta?

A quantidade de alavancagem fornecida:

long liverage=AccountInfoInteger(ACCOUNT_LEVERAGE);