Bibliotecas: TypeToBytes - página 4

 
A fundição de estruturas arbitrárias está disponível
struct STRUCT2
{
  MqlTick Tick;
};

// Fundição de estruturas simples arbitrárias (se houver um construtor ou operador de atribuição personalizado - TYPETOBYTES_FULL_SLOW é necessário).
  STRUCT2 Struct2 = _C(STRUCT2, Tick);   // Um análogo da conversão clássica de STRUCT2 STRUCT2 Struct2 = (STRUCT2)Tick;
  PRINT(_R(Struct2) == Tick)             // Certifique-se de que Struct2 == Tick

  Struct2.Tick.time = __DATETIME__;      // Modificar Struct2
  PRINT(_R(Struct2) == Tick)             // Certifique-se de que Struct2 != Tick

  _W(Struct2) = Tick;                    // Cópia byte a byte de Tick para Struct2
  PRINT(_R(Struct2) == Tick)             // Certifique-se de que Struct2 == Tick
 
Automated-Trading:

TypeToBytes:

Autor: fxsaber

Olá, fxsaber. Primeiramente, obrigado pelo trabalho no TypeToBytes. Fiz o download do arquivo TypeToBytes e do exemplo mq5 e, ao executá-lo, obtive vários erros, todos relacionados a problemas de conversão. Aqui estão alguns exemplos dos erros;

  • cannot cast 'MqlTick' to 'STRUCT_READ<MqlTick>' TypeToBytes.mqh 115 20
  • Não é possível converter 'STRUCT_READ<MqlTick>' em 'STRUCT_TYPE<MqlTick>' TypeToBytes.mqh 84 4
  • Não é possível converter 'STRUCT_READ<double>' em 'STRUCT_TYPE<double>' TypeToBytes.mqh 62 14
  • Não é possível converter 'STRUCT_READ<uchar>' em 'STRUCT_TYPE<uchar>' TypeToBytes.mqh 62 14
  • Não é possível converter 'STRUCT_READ<MqlTick>' em 'STRUCT_TYPE<MqlTick>' TypeToBytes.mqh 85 4

Estou tentando usar esse arquivo como parte de uma rede neural que estou desenvolvendo. Sua ajuda é muito bem-vinda.


 
Shephard Mukachi:
A versão mais recente está sempre aqui.
 
fxsaber:
A versão mais recente está sempre aqui.

É isso, muito obrigado por seu trabalho árduo e pela resposta rápida.

 

Excelente trabalho, obrigado a todos vocês.

 

Exemplo de uso

  • Определение байтового смещения поля структуры по его имени.

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Erro de fundição de estrutura

fxsaber, 2017.05.12 12:17

#include <TypeToBytes.mqh>
struct ID
{
    int num;  //4
    uchar name[255];
};

struct ID2
{
   uchar id[sizeof(ID)];
};


void OnStart()
{
     ID id = {0};       
     _W(id) = 1234;        
     _W(id)[_OFFSET(id, name)] = "someone";

     //---
     ID2 id2 = {0};
     _W(id2) = id;
     
     ID idx = {0};
     _W(idx) = id2;
     
     printf("idx.num = %d, idx.name = %s",idx.num,CharArrayToString(idx.name));    // 1,234,000 
}
 
Adicionada a extração de strings byte a byte
// Extração de strings
  int ArrayINT[];
  string ArraySTR[] = {"123", "456", "789"};

  _ArrayCopy(ArrayINT, ArraySTR);        // Copiar a matriz ArraySTR para a matriz ArrayINT, byte a byte
  ArrayPrint(_R(ArrayINT).Bytes);        // Veja os bytes da matriz recebida

  string ArraySTR2[];

  _ArrayCopy(ArraySTR2, ArrayINT);       // Copiar a matriz ArrayINT para a matriz ArraySTR2, byte a byte
  ArrayPrint(ArraySTR2);                 // Imprimir a matriz recebida

  PRINT(_R(ArraySTR) == ArraySTR2)       // Certifique-se de que ArraySTR == ArraySTR2

  PRINT(_R(ArrayINT)[(string)1])         // Recupere a string do ArrayINT começando pelo byte 1 - "23"
 
Obter dados confidenciais dos proprietários de agentes de nuvem
#include <TypeToBytes.mqh>

input int Range = 0;

template <typename T>
struct ARRAY
{
  T Array[];
  
  void operator +=( const T Value )
  {
    const int i = ArrayResize(this.Array, ArraySize(this.Array) + 1) - 1;
    
    this.Array[i] = Value;
  }
};

#define  TOSTRING(A) #A + " = " + (string)(A)
#define  ADD(A,B) Str += TOSTRING(TerminalInfo##A(B));

void GetPrivateData( ARRAY<string> &Str )
{
  Str += TOSTRING(MQLInfoString(MQL_PROGRAM_PATH));
  
  ADD(Integer, TERMINAL_BUILD)
  ADD(Integer, TERMINAL_COMMUNITY_ACCOUNT)
  ADD(Integer, TERMINAL_COMMUNITY_CONNECTION)
  ADD(Integer, TERMINAL_CONNECTED)
  ADD(Integer, TERMINAL_DLLS_ALLOWED)
  ADD(Integer, TERMINAL_TRADE_ALLOWED)
  ADD(Integer, TERMINAL_NOTIFICATIONS_ENABLED)
  ADD(Integer, TERMINAL_MAXBARS)
  ADD(Integer, TERMINAL_MQID)
  ADD(Integer, TERMINAL_CODEPAGE)
  ADD(Integer, TERMINAL_CPU_CORES)
  ADD(Integer, TERMINAL_DISK_SPACE)
  ADD(Integer, TERMINAL_MEMORY_PHYSICAL)
  ADD(Integer, TERMINAL_MEMORY_TOTAL)
  ADD(Integer, TERMINAL_MEMORY_AVAILABLE)
  ADD(Integer, TERMINAL_MEMORY_USED)
  ADD(Integer, TERMINAL_X64)
  ADD(Integer, TERMINAL_OPENCL_SUPPORT)
  ADD(Integer, TERMINAL_SCREEN_DPI)
  ADD(Integer, TERMINAL_PING_LAST)

  ADD(Double, TERMINAL_COMMUNITY_BALANCE)

  ADD(String, TERMINAL_LANGUAGE)
  ADD(String, TERMINAL_COMPANY)
  ADD(String, TERMINAL_NAME)
  ADD(String, TERMINAL_PATH)
  ADD(String, TERMINAL_DATA_PATH)
  ADD(String, TERMINAL_COMMONDATA_PATH)
}

void OnTesterPass()
{
  ulong Pass;
  string Name;
  long ID;
  double Value;
  uchar Data[];

  while (FrameNext(Pass, Name, ID, Value, Data))
  {
    string Str[];
    
    _ArrayCopy(Str, Data);
    
    ArrayPrint(Str);
  }
}

double OnTester()
{
  ARRAY<string> Str;  

  GetPrivateData(Str);
  
  FrameAdd("Temp", 0, 0, _R(Str.Array).Bytes);
  
  return(0);
}

O nome de usuário do Windows, a taxa de bits, o número de núcleos, o tamanho da memória, etc. estão disponíveis.

 
fxsaber:
Obter dados confidenciais dos proprietários de agentes de nuvem

Nome de usuário do Windows, taxa de bits, número de núcleos, tamanho da memória, etc. estão disponíveis.

Inteligente. Você poderia criar um banco de dados de MQIDs para enviar)
 
fxsaber:
Adicionada a extração de strings byte a byte
Duas cadeias de caracteres com o mesmo resultado
StringSubstr(Str, Pos);
_R(Str)[(string)Pos];