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

 
Igor Makanu:

alocação de memória será no exemplo 1 e no exemplo 2

Exemplo 2 é declaração e inicialização, exemplo 1 apenas declaração

Já mais claro poderia ter sido escrito sobre isso na ajuda. Declarei-o imediatamente porque tenho cálculos estáticos em classes e não preciso criar objeto através de um novo operador.

Diga-me, eu quero fazer uma coisa dessas, significa que quero declarar uma classe, depois declarar uma matriz e armazenar na matriz um ponteiro para a classe, é possível fazer ou não?

 
Seric29:

Diga-me, eu quero fazer tal coisa, então eu quero declarar uma classe e depois declarar uma matriz e armazenar na matriz um ponteiro para a classe, é possível fazer ou não?

repetidas vezes.... Uma classe é antes de tudo um tipo de dado, como int, duplo...

você quer um conjunto deste tipo de dados? - declarar um array, se o array for dinâmico, então redimensioná-lo, então inicializar TODOS os ELEMENTOS com os dados necessários - você precisa de apontadores, então inicializá-los com apontadores para uma classe, você precisa de instâncias de uma classe, então cada elemento do array não será um apontador, mas um objeto em si

essa é a essência do OOP, qualquer classe é, antes de tudo, um tipo de dado de usuário.... não sei o quanto dizer sobre isso, mas a metodologia é a mesma que com um tipo de dado regular, e o que você vai escrever dentro da classe é um assunto pessoal, mas a inicialização de uma nova instância sempre começará com um construtor, e que construtor existe - por padrão, com ou sem parâmetros - permite que você escolha como inicializar o objeto...... ugh, mas ainda assim ler um livro, não há como fazê-lo com perguntas aqui

 
Igor Makanu:

Normalmente eles determinam as ordens superiores/inferiores por seus preços abertos, depois adicionam algum valor e obtêm um novo preço ao qual ou monitoram quando o preço quebra esta condição de nível e colocam uma nova ordem ou imediatamente colocam uma grade de ordens pendentes visando o número máximo de ordens e então rastreiam esta grade.

Agradeço seu interesse, mas me referia à grade pontilhada na tabela.


Você pode informar como os níveis horizontais são calculados para uma grade em mt4 e em mt5? Eles se deslocam quando eu percorro a tabela sem uma escala fixa e se deslocam emmt4 e mt5 um pouco diferente. Talvez alguém saiba como é calculado, assim você não precisa adivinhar com recuos, amarrações e assim por diante.

 
Andrey Sokolov:

Obrigado por não passar por nós, mas não estou falando sobre isso, estou falando sobre a grade pontilhada na tabela.


Você pode me dizer como os níveis horizontais são calculados para a grade em mt4 e em mt5? Se a escala não for fixa, eles se deslocam quando eu percorro a tabela, e se deslocam emmt4 e em mt5 um pouco diferente. Talvez alguém saiba como é calculado, por isso não tenho que adivinhar com recuos e encadernações e coisas assim.

Ela apenas divide a janela em partes iguais, dependendo da resolução da tela.

Estou me dividindo verticalmente em 15 partes em MT4 e MT5

 
Igor Makanu:

repetidas vezes.... Uma classe é antes de tudo um tipo de dado, como int, duplo...

Você quer um conjunto de dados desse tipo? - declare um array, se o array for dinâmico, então redimensione-o, então inicialize TODOS os ELEMENTOS com os dados necessários - você precisa de apontadores, então inicialize-os com apontadores para a classe, você precisa de instâncias de classe, então cada elemento do array não será um apontador, mas o próprio objeto

essa é a essência do OOP, qualquer classe é, antes de tudo, um tipo de dado de usuário.... não sei o quanto dizer sobre isso, mas a metodologia é a mesma que com um tipo de dado regular, e o que você vai escrever dentro da classe é uma questão pessoal, mas a inicialização de uma nova instância começará sempre com um construtor, e que construtor - por padrão, com parâmetros ou sem parâmetros - você pode escolher como inicializar o objeto...... ugh, mas ainda ler livros, não há como fazê-lo desta forma

Sim, eu percebi que isto não é possível porque quando você cria um array, o programa precisa especificar o tipo, e porque eu quero salvar um ponteiro de diferentes classes em um array, ele não funcionará porque o array não pode ser de tipo diferente ou diverso em mql, em s++ o fez, mas não com objetos tão complexos. Portanto, minha idéia não vai funcionar aqui.

 
Seric29:

Sim, eu percebi que isto não é possível porque quando você cria um array, o programa exige que você especifique o tipo, e porque eu quero salvar um ponteiro de diferentes classes em um array, isto não funcionará porque o array não pode ser de diferentes tipos ou variedades em mql, em C++ o fez, mas não com objetos tão complexos. Portanto, minha idéia não vai funcionar aqui.

Tudo é feito. Você herda seus objetos da classe base e cria um array com o tipo da classe base. E todos os objetos herdados podem estar na matriz.
 
Artyom Trishkin:
Tudo é feito. Você herda seus objetos da classe base e cria um array com o tipo da classe base. E todos os objetos herdados podem estar na matriz.

E mostrar o exemplo mais simples e mais primitivo, onde há 2 classes e depois herança e como colocar referências a cada classe em um conjunto de 2 elementos (0 primeira classe 1 2)?

 
Andrey Sokolov:

Makar, por que você está escrevendo algo que é claramente falso? Ao rolar o gráfico você pode mudar o offset das linhas horizontais da grade, e elas se deslocamum pouco diferente emmt4 e em mt5.

Eles não!

Eles só mudam quando há uma janela indicadora, em todos os outros casos eles não mudam.

 
Seric29:

E mostrar o exemplo mais simples e primitivo onde existem 2 classes herdadas e como colocar referências a cada classe em um conjunto de 2 elementos (0 primeira classe 1 2)?

class CBase{
protected:
   int v;
   public:
                  CBase(): v(0)  {            }
           int    getV()         { return(v); }
   virtual int    calc() = 0;
};

class A:public CBase
{
   public:
   virtual int calc() {return(--v);} //декремент 
};

class B:public CBase
{
   public:
   virtual int calc() {return(++v);} //инкремент
};

//+------------------------------------------------------------------+
void OnStart()
{
// 2 указателя которые инициализируем экземплярами обьектов  A и B
   CBase *arr_base[2];
   arr_base[0] = new A;
   arr_base[1] = new B;
// вызовем 10 раз метод calc() для каждого обьекта   
   for(int j=ArraySize(arr_base)-1; j>=0; j--)
   {
      for(int i=0; i<10; i++)
         {
            arr_base[j].calc();
         }
   }
   
   Print("A.v = ",arr_base[0].getV());
   Print("B.v = ",arr_base[1].getV());
//удалим обьекты   
   for(int j=ArraySize(arr_base)-1; j>=0; j--)
   {
      delete arr_base[j];
   }   
}
//+------------------------------------------------------------------+

2020.03.22 21:21:38.544 tst (EURUSD,H1) A.v = -10

2020.03.22 21:21:38.544 tst (EURUSD,H1) B.v = 10

 
Igor Makanu:

2020.03.22 21:21:38.544 tst (EURUSD,H1) A.v = -10

2020.03.22 21:21:38.544 tst (EURUSD,H1) B.v = 10

Obrigado. E as funções devem ser virtuais simples não posso, eu mesmo já vou experimentar.

Razão: