Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1320

 
pivomoe:

Após a actualização para a versão 2981, um erro começou a aparecer na linha

Aconselhar como substituir esta linha.

Fórum sobre comércio, sistemas automatizados de comércio e teste de estratégias comerciais

Peculiaridades de mql5, dicas e truques

Ilyas, 2021.05.28 18:18

Estamos a expandir as nossas sequências inicializadoras "{ ... }". Na próxima construção permitiremos a utilização de qualquer expressão, e não apenas constante.

Em vez desta alteração, haverá uma restrição ao uso de constantes para enumerações (como para uma expressão comum): se a constante não pertence ao enumeral, o erro correspondente será produzido.

A análise dos códigos existentes mostrou que a sequência única zero "{0}" é frequentemente utilizada incorrectamente.

Por exemplo, como este:

MqlTradeRequest request={0};


Tal notação significa fixar o valor de zero para o primeiro campo da estrutura e zero para o resto dos campos.

Para a linha de código acima, de acordo com as novas regras, haverá um erro uma vez que o primeiro campo tem o tipo ENUM_TRADE_REQUEST_ACTIONS, uma enumeração que não tem o valor "0".

cannot convert 0 to enum 'ENUM_TRADE_REQUEST_ACTIONS'


O caminho correcto seria o seguinte:

MqlTradeRequest request={};

 
Obrigado.
 
Kira27:

Então estou a escrever -- de que classe devo herdar a minha classe para usar estes métodos da sua biblioteca padrão?

Qual é o problema da minha pergunta? ))))

 

Aqui está o código, o que se passa?

//+------------------------------------------------------------------+
//|                                            Test_Nasledovania.mqh |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

#include <Object.mqh>
#include <Trade\Trade.mqh>

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class Test_Nasledovania : public CObject
  {
private:

public:
                     Test_Nasledovania();
                    ~Test_Nasledovania();

   void              test();
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
Test_Nasledovania::Test_Nasledovania()
  {

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
Test_Nasledovania::~Test_Nasledovania()
  {
  }
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void      Test_Nasledovania::test()
{
Buy  -- Метод Buy не высвечивается как подключеный
}
//+------------------------------------------------------------------+

A classe inclui


A classe Test_Nasledovania : o próprio CObject público é um herdeiro da classe base CObject de toda a biblioteca padrão).

 
Kira27:

Aqui está o código, o que se passa?

A classe inclui


The Test_Nasledovania : a própria classe pública CObject é uma herdeira da classe base CObject de toda a biblioteca padrão).

Para além de ligar a classe de negociação, também é necessário criar um objecto da classe de negociação, e depois consultar os métodos da classe através do objecto criado

***
#include <Trade\Trade.mqh>
//---
CTrade         m_trade;                      // object of CTrade class
***
void OnTick()
  {
   m_trade.Buy(***
  }
 
Kira27:

Qual é o problema da minha pergunta? ))))

Porque a ajuda tem toda a herança de todas estas aulas escritas a preto e branco.

 
Vladimir Karputov:

Para além de ligar uma classe de negociação, também é necessário criar um objecto desta classe de negociação e depois consultar os métodos da classe através do objecto criado

A questão sobre a utilização de métodos de classe em Expert Advisors e scripts é, naturalmente, a criação de objectos. Mas a questão é sobre a utilização de métodos de uma classe base, numa classe descendente. Porque é que precisamos de criar objectos lá?

 
Kira27:

Sobre a utilização de métodos de classes, em Expert Advisors e scripts, é evidente que criamos objectos. Mas a questão é sobre a utilização de métodos de uma classe base, dentro de uma classe descendente. Porque é que precisa de criar objectos lá?

Herdou a sua classe de CObject:

class Test_Nasledovania : public CObject

Desculpe-me, mas que métodos esperava ver?

Документация по MQL5: Стандартная библиотека / Базовый класс CObject
Документация по MQL5: Стандартная библиотека / Базовый класс CObject
  • www.mql5.com
Базовый класс CObject - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Aqui está um exemplo de utilização de métodos de uma classe base dentro de uma classe herdada sem utilização de um objecto

#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

//#include <Object.mqh>
#include <Trade\Trade.mqh>

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class Test_Nasledovania : public CTrade
  {
private:

public:
                     Test_Nasledovania();
                    ~Test_Nasledovania();

   void              test();
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
Test_Nasledovania::Test_Nasledovania()
  {

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
Test_Nasledovania::~Test_Nasledovania()
  {
  }
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void      Test_Nasledovania::test()
{
Buy
}
//+------------------------------------------------------------------+

Quero utilizar assim todos os métodos incluídos em

De que classe devo herdar a minha classe, para poder usar métodos de todas estas classes dentro da minha classe sem criar objectos? se for sequer possível?))

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
Artyom Trishkin:

Herdou a sua classe de CObject:

Desculpe, que métodos esperava ver?

Concordo)))), fui estúpido))), a classe base de todos estes métodos, não permite utilizar métodos de classes dos seus descendentes)))))

Razão: