// Ler/gravar campos privados de estruturas simples#include <TypeToBytes.mqh>
template <typename T>
struct STRUCT
{
private:
T Data; // campo privadopublic:
T GetData( void ) const
{
return(this.Data);
}
};
voidOnStart()
{
STRUCT<int> Struct = {0};
_W(Struct) = 2; // Acesso de gravação ao campo privadoPrint(Struct.GetData()); // certifique-se de que sejaPrint(_R(Struct)[0]); // Acesso de leitura ao campo privado
}
A biblioteca prescreve uma classe de contêiner que armazena variáveis e matrizes de quaisquer outros tipos simples em uma matriz de um determinado tipo.
// Exemplo de trabalho com um contêiner#include <TypeToBytes.mqh>
#define PRINT(A) Print(#A + " = " + (string)(A));
voidOnStart()
{
// Dados arbitrários para o exemplostring Str[] = {"123", "Hello World!"};
double Num = 5;
MqlTick Tick = {0};
Tick.bid = 1.23456;
CONTAINER<long> Container; // Criar um contêiner - tudo será armazenado em uma matriz de um tipo simples (no exemplo, escolhemos long)// Preencher o contêiner com dados diferentes
Container[0] = Str;
Container[1] = Num;
Container[2] = Tick;
ArrayPrint(Container.Data); // Saída do conteúdo da matriz na qual o contêiner armazena todos os dados// Imprimir os tipos de dados armazenados no contêinerfor (int i = 0; i < Container.GetAmount(); i++)
PRINT(Container[i].GetType())
// Vamos obter os dados propriamente ditos string Str2[];
Container[0].Get(Str2); // Obteve a matriz
ArrayPrint(Str2);
PRINT(Container[1].Get<double>()) // Temos um número
PRINT(Container[2].Get<MqlTick>().bid) // Temos a estrutura
Container[1] = "Replace"; // Dados substituídos pelo índice// Verificar se a substituição foi realizada
PRINT(Container[1].GetType())
PRINT(Container[1].Get<string>())
}
fxsaber: A biblioteca contém uma classe de contêiner que armazena variáveis e matrizes de quaisquer outros tipos simples em uma matriz de um determinado tipo.
string Str;
REPORT::ToString(Str);
double Balance[];
REPORT::GetBalanceHistory(Balance);
#ifdef __TYPETOBYTES__
CONTAINER<uchar> Container;
Container[0] = Str; // colocar a string de relatório no contêiner
Container[1] = Balance; // adicionou também um array duplo do histórico de alterações de saldo ao contêiner
::FrameAdd(NULL, 0, ::AccountInfoDouble(ACCOUNT_BALANCE), Container.Data); // Enviou um quadro com relatório de string e matriz de saldo#else // __TYPETOBYTES__
Receber um quadro com dados diferentes
CONTAINER<uchar> Container;
while (::FrameNext(Pass, Name, ID, Value, Container.Data))
{
string Str;
Container[0].Get(Str); // Obter a string de relatório do quadrodouble Balance[];
Container[1].Get(Balance); // Obter a matriz dupla correspondente do quadro// .....
Duas linhas com o mesmo resultado
A biblioteca contém uma classe de contêiner que armazena variáveis e matrizes de quaisquer outros tipos simples em uma matriz de um determinado tipo.
Exemplo de aplicação prática no Report-bible
Enviar um quadro com dados diferentes
Receber um quadro com dados diferentes
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Perguntas dos iniciantes em MQL5 MT5 MetaTrader 5
fxsaber, 2017.08.23 14:10
Você precisa usar o Frame Mode para gravar os dados dos agentes em um arquivo.
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Nova versão do MetaTrader 5 build 1640: criando e testando seus próprios instrumentos financeiros
fxsaber, 2017.10.10 07:51
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Versão beta do MetaTrader 5 build 1995: Calendário econômico, programas MQL5 como serviços e API para linguagem R
fxsaber, 2019.02.18 16:36
Olá. Então está funcionando.
É assim que funciona.
Eu o obtive daqui para o MT4
https://www.mql5.com/ru/forum/5905/page11#comment_6134460É assim.