Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1320

 
pivomoe:

Dopo l'aggiornamento alla versione 2981, un errore ha iniziato ad apparire nella linea

Per favore, consigliate come sostituire questa linea.

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Peculiarità di mql5, consigli e trucchi

Ilyas, 2021.05.28 18:18

Stiamo espandendo le nostre sequenze di inizializzazione "{ ... Nella prossima build permetteremo di usare qualsiasi espressione, non solo costante.

Al posto di questa modifica, ci sarà una restrizione sull'uso delle costanti per le enumerazioni (come per un'espressione ordinaria): se la costante non appartiene all'enum, verrà prodotto l'errore corrispondente.

L'analisi dei codici esistenti ha mostrato che la sequenza di zero singolo "{0}" è spesso usata in modo scorretto.

Per esempio, così:

MqlTradeRequest request={0};


Tale notazione significa impostare il valore zero per il primo campo della struttura e azzerare il resto dei campi.

Per la linea di codice qui sopra, secondo le nuove regole, ci sarà un errore poiché il primo campo ha il tipo ENUM_TRADE_REQUEST_ACTIONS, un'enumerazione che non ha il valore "0".

cannot convert 0 to enum 'ENUM_TRADE_REQUEST_ACTIONS'


Il modo corretto sarebbe:

MqlTradeRequest request={};

 
Grazie.
 
Kira27:

Quindi sto scrivendo: da quale classe dovrei ereditare la mia classe per usare questi metodi dalla loro libreria standard?

Cosa c'è di sbagliato nella mia domanda? ))))

 

Ecco il codice, cosa c'è di sbagliato?

//+------------------------------------------------------------------+
//|                                            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 classe include


La classe Test_Nasledovania : public CObject è essa stessa un'erede della classe base CObject di tutta la libreria standard).

 
Kira27:

Ecco il codice, cosa c'è di sbagliato?

La classe include


La classe Test_Nasledovania : public CObject stessa è un'erede della classe base CObject dell'intera libreria standard).

Oltre a collegare la classe di trading, dovete anche creare un oggetto della classe di trading, e poi fare riferimento ai metodi della classe attraverso l'oggetto creato

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

Cosa c'è di sbagliato nella mia domanda? ))))

Perché l'aiuto ha l'intera eredità di tutte queste classi scritta nero su bianco.

 
Vladimir Karputov:

Oltre a collegare una classe di trading, dovete anche creare un oggetto di questa classe di trading e poi fare riferimento ai metodi della classe attraverso l'oggetto creato

La domanda sull'uso di metodi di classe in Expert Advisors e script è ovviamente la creazione di oggetti, ma la domanda riguarda l'uso di metodi di una classe base in una classe discendente. Perché abbiamo bisogno di creare oggetti lì?

 
Kira27:

Per quanto riguarda l'uso di metodi di classi, in Expert Advisors e script, va da sé che creiamo oggetti. Ma la domanda riguarda l'uso di metodi di una classe base, all'interno di una classe discendente. Perché avete bisogno di creare oggetti lì?

Avete ereditato la vostra classe da CObject:

class Test_Nasledovania : public CObject

Mi scusi, ma quali metodi si aspettava di vedere?

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

Ecco un esempio di come usare i metodi di una classe base in una classe ereditata senza usare un oggetto

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

Voglio usare così tutti i metodi inclusi in

Da quale classe dovrei ereditare la mia classe, in modo da poter utilizzare i metodi di tutte queste classi all'interno della mia classe senza creare oggetti? Se è possibile)))

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

Avete ereditato la vostra classe da CObject:

Scusa, quali metodi ti aspettavi di vedere?

Sono d'accordo))), sono stato stupido))), la classe base di tutti questi metodi, non permette di utilizzare metodi di classi dei suoi discendenti)))

Motivazione: