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

 
Seric29:

Um ponteiro para uma função é passado como um parâmetro. Vejo que ninguém descobriu como fazer isso com as aulas. Também ainda não está claro para mim por que um ponteiro para uma classe deve ser devolvido.

Aqui estão amostras interessantes, mas não são relevantes para a minha pergunta.

Também vi algo semelhante no guia, mas já fechei estes locais porque minhas mãos doem e tenho trabalho a fazer.

Por que eu deveria brincar com uma tarefa tão simples? Você pode simplesmente obter os dados necessários através de um objeto de classe

Estou familiarizado com referências, indicadores e indicadores de função, mas raramente os utilizo na prática. E, em geral, acho que eles são necessários apenas para economizar memória - e os Expert Advisors com indicadores não são jogos, então podemos gerenciar com variáveis comuns e objetos de classe noescopo global

 
Alexandr Sokolov:

Por que chegar a tais extremos com uma tarefa tão simples? Você pode simplesmente obter os dados necessários através de um objeto de classe

Estou familiarizado com referências, indicadores e indicadores de funções, mas raramente os utilizo. Na minha opinião, eles são necessários apenas para economizar memória, os Expert Advisors com indicadores não são jogos, portanto, podemos usar variáveis comuns e objetos de classe no escopo global.

Eu não quero me apressar em uma tarefa simples e, claro, eu modifico meus programas onde a função era chamada antes, escrevo uma expressão aritmética para simplificar os cálculos ou mudo para uma função sobrecarregada simplificada, então eu quero traduzir o programa para classes. Mas como você escreveu acima e raramente as usa, e agora a questão é que as classes estão lá, mas criar indicações para as funções desta classe é impossível, porque este tipo de programação é necessário, se você faz uma não pode fazer a outra, não é programação, mas o diabo sabe o quê.

 
Seric29:

Eu não quero me apressar em uma tarefa simples, e é claro que eu refaço meus programas onde anteriormente uma função era chamada, escrevo uma expressão aritmética para simplificar os cálculos ou mudo para uma função sobrecarregada simplificada, então eu quero traduzir o programa em classes. Mas como você escreveu acima e raramente as usa, e agora a questão é que as classes estão lá, mas criar indicadores para as funções desta classe é impossível, por que este tipo de programação é necessário, se você faz uma você não pode fazer a outra, não é programação, mas o diabo sabe o quê.

Uma classe é um modelo de algum objeto, e para usar a funcionalidade que está neste modelo - você deve primeiro criar um objeto.

Em essência, o nome da classe atua como um tipo de dado, como int, double, string, etc., mas com funcionalidade estendida. Você não pode declarar uma variável sem especificar seu tipo.

E além disso, você pode simplesmente separar a função da classe e ela pode ser usada na classe e separadamente da classe sem criar um objeto

 

Pode haver qualquer outro motivo pelo qual o indicador não funciona, exceto que seu arquivo foi excluído da pasta apropriada? (o indicador é compilado e funciona em um terminal, mas não em outro)


 
Alexandr Sokolov:

A classe é um modelo de algum objeto, e para usar a funcionalidade que está neste modelo - você tem que criar um objeto primeiro.

Na verdade, o nome da classe atua como um tipo de dado, como int, double, string, etc., mas com funcionalidade estendida. Você não pode declarar uma variável sem especificar seu tipo.

E além disso, você pode simplesmente separar a função da classe e ela pode ser usada na classe e separadamente da classe sem criar um objeto

A menos que. Bem, é que as aulas são um tema complicado, e há toneladas de exemplos no livro de referência sobre passagem, sobre criação de links e ponteiros, acho que é possível (pelo menos em c++ é possível, mas mql4 não tem nada a ver com c++), é necessário entender como funciona. A ajuda mostrou estes exemplos que eles são muito complicados e sobrecarregados, em vez de tomar uma aula e mostrar um exemplo simples eles a sobrecarregaram com cálculos e informações extras e eu não consigo entender o que eles significam, eu fechei todos estes links por causa do cansaço e cansaço. Ok, então vou apenas puxar funções da classe.

 
Alexandr Sokolov:

Pode haver qualquer outro motivo pelo qual o indicador não funciona, exceto que seu arquivo foi excluído da pasta apropriada? (o indicador é compilado e funciona em um terminal, mas não em outro)


Do mercado?

 
Alexandr Sokolov:

Pode haver qualquer outro motivo pelo qual o indicador não funciona, exceto que seu arquivo foi excluído da pasta apropriada? (o indicador é compilado e funciona em um terminal, mas não em outro)


ver mensagens em logs de terminais e Expert Advisor

sua captura de tela mostra apenas que este indicador não tem código fonte

 
Alexandr Sokolov:

Pode haver qualquer outro motivo pelo qual o indicador não funciona, exceto que seu arquivo foi excluído da pasta apropriada? (o indicador é compilado e funciona em um terminal, mas não em outro)


Talvez precise de bibliotecas adicionais
 
Сергей Таболин:

Do mercado?

Não

Igor Makanu:

ver mensagens nos logs do terminal e do Expert Advisor

Sua captura de tela mostra apenas que este indicador não tem fonte

Obrigado

MakarFX:
Talvez precise de bibliotecas adicionais

Exatamente não, eu o escrevi - eu saberia

 

Por favor, diga-me por que o compilador gera um aviso no seguinte código de script de teste MQL4:

#property strict

struct st_sig {
   string   sym;           // Symbol
   int      age;           // Bars ago
}; st_sig Signals[];

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart() {

   BubbleSort(Signals);
   
}

//+----------------------------------------------------------------------------+
void BubbleSort(st_sig &sig[]) {
  double t;
  int    i, j, n=ArraySize(sig);

  for (i=n-1; i>0; i--) {
    for (j=0; j<i; j++) {
      if (sig[j].age>sig[j+1].age) {
        t=sig[j].age;
        sig[j].age=sig[j+1].age;
        sig[j+1].age=t;       // Line#27 with warning
      }
    }
  }
}

Um aviso na linha 27 sobre o descasamento de tipos de dados. Ambas as variáveis têm o mesmo tipo de int. Abaixo está uma captura de tela da compilação do roteiro.

Se eu substituir a linha 27 por

sig[j+1].age=(int)t;

o aviso não aparece.

Qual é o truque?

Razão: