Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1320

 
pivomoe:

Después de actualizar a la versión 2981, ha empezado a aparecer un error en la línea

Por favor, indíqueme cómo reemplazar esta línea.

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Peculiaridades de mql5, consejos y trucos

Ilyas, 2021.05.28 18:18

Estamos ampliando nuestras secuencias de inicialización "{ ... En la próxima versión permitiremos utilizar cualquier expresión, no sólo una constante.

En lugar de este cambio, habrá una restricción en el uso de constantes para las enumeraciones (como para una expresión ordinaria): si la constante no pertenece al enum, se producirá el error correspondiente.

El análisis de los códigos existentes ha demostrado que la secuencia de un solo cero "{0}" se utiliza a menudo de forma incorrecta.

Por ejemplo, así:

MqlTradeRequest request={0};


Esta notación significa establecer el valor de cero para el primer campo de la estructura y poner a cero el resto de los campos.

Para la línea de código anterior, según las nuevas reglas, habrá un error ya que el primer campo tiene el tipo ENUM_TRADE_REQUEST_ACTIONS, una enumeración que carece del valor "0".

cannot convert 0 to enum 'ENUM_TRADE_REQUEST_ACTIONS'


La forma correcta sería:

MqlTradeRequest request={};

 
Gracias.
 
Kira27:

Así que estoy escribiendo... ¿de qué clase debería heredar mi clase para utilizar estos métodos de su biblioteca estándar?

¿Qué hay de malo en mi pregunta? ))))

 

Aquí está el código, ¿qué pasa?

//+------------------------------------------------------------------+
//|                                            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 не высвечивается как подключеный
}
//+------------------------------------------------------------------+

La clase incluye


La propia clase Test_Nasledovania : public CObject es heredera de la clase base CObject de toda la biblioteca estándar).

 
Kira27:

Aquí está el código, ¿qué pasa?

La clase incluye


La propia clase Test_Nasledovania : public CObject es heredera de la clase base CObject de toda la biblioteca estándar).

Además de conectar la clase de comercio, también es necesario crear un objeto de la clase de comercio, y luego hacer referencia a los métodos de la clase a través del objeto creado

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

¿Qué hay de malo en mi pregunta? ))))

Porque la ayuda tiene toda la herencia de todas estas clases escrita en blanco y negro.

 
Vladimir Karputov:

Además de conectar una clase de negociación, también es necesario crear un objeto de esta clase de negociación y luego hacer referencia a los métodos de la clase a través del objeto creado

La pregunta sobre el uso de métodos de clases en Asesores Expertos y scripts es, por supuesto, la creación de objetos. Pero la pregunta es sobre el uso de métodos de una clase base, en una clase descendiente. ¿Por qué tenemos que crear objetos allí?

 
Kira27:

Sobre el uso de métodos de clases, en Asesores Expertos y scripts, no hace falta decir que creamos objetos. Pero la pregunta es sobre el uso de métodos de una clase base, dentro de una clase descendiente. ¿Por qué hay que crear objetos allí?

Ha heredado su clase de CObject:

class Test_Nasledovania : public CObject

Disculpe, pero ¿qué métodos esperaba ver?

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

Este es un ejemplo de uso de métodos de una clase base dentro de una clase heredada sin utilizar un objeto

#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
}
//+------------------------------------------------------------------+

Quiero utilizar así todos los métodos incluidos en

¿De qué clase debería heredar mi clase, para poder utilizar los métodos de todas estas clases dentro de mi clase sin crear objetos? Si es que es posible))

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

Has heredado tu clase de CObject:

Lo siento, ¿qué métodos esperabas ver?

Estoy de acuerdo))), fui un estúpido))), la clase base de todos estos métodos, no permite usar métodos de clases de sus descendientes)))

Razón de la queja: