Bibliotecas: TypeToBytes - página 4

 
Se pueden moldear estructuras arbitrarias
struct STRUCT2
{
  MqlTick Tick;
};

// Casting de estructuras simples arbitrarias (si hay un constructor u operador de asignación personalizado - se necesita TYPETOBYTES_FULL_SLOW).
  STRUCT2 Struct2 = _C(STRUCT2, Tick);   // Un análogo del clásico STRUCT2 STRUCT2 Struct2 = (STRUCT2)Tick;
  PRINT(_R(Struct2) == Tick)             // Asegúrese de que Struct2 == Tick

  Struct2.Tick.time = __DATETIME__;      // Modificar Struct2
  PRINT(_R(Struct2) == Tick)             // Asegúrese de que Struct2 != Tick

  _W(Struct2) = Tick;                    // Copia byte a byte de Tick a Struct2
  PRINT(_R(Struct2) == Tick)             // Asegúrese de que Struct2 == Tick
 
Automated-Trading:

TypeToBytes:

Autor: fxsaber

Hola fxsaber En primer lugar, gracias por el trabajo en TypeToBytes. He descargado tanto el archivo TypeToBytes como el ejemplo mq5, y al ejecutarlo, me aparecen un puñado de errores todos relacionados con problemas de cast. Aquí tienes algunos ejemplos de los errores;

  • cannot cast 'MqlTick' to 'STRUCT_READ<MqlTick>' TypeToBytes.mqh 115 20
  • cannot cast 'STRUCT_READ<MqlTick>' to 'STRUCT_TYPE<MqlTick>' TypeToBytes.mqh 84 4
  • cannot cast 'STRUCT_READ<double>' to 'STRUCT_TYPE<double>' TypeToBytes.mqh 62 14
  • cannot cast 'STRUCT_READ<uchar>' to 'STRUCT_TYPE<uchar>' TypeToBytes.mqh 62 14
  • cannot cast 'STRUCT_READ<MqlTick>' to 'STRUCT_TYPE<MqlTick>' TypeToBytes.mqh 85 4

Estoy tratando de utilizar este archivo como parte de una red neuronal que estoy desarrollando. Su ayuda es muy apreciada.


 
Shephard Mukachi:
La última versión está siempre aquí.
 
fxsaber:
La última versión está siempre aquí.

Eso lo hizo, un millón de gracias por su arduo trabajo y respuesta rápida también.

 

Gran trabajo, gracias a todos.

 

Ejemplo de uso

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

Foro sobre negociación, sistemas automatizados de negociación y ensayo de estrategias de negociación

Struct Casting Error

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 
}
 
Extracción de cadenas byte a byte
// Extracción de cadenas
  int ArrayINT[];
  string ArraySTR[] = {"123", "456", "789"};

  _ArrayCopy(ArrayINT, ArraySTR);        // Copiar matriz ArraySTR a matriz ArrayINT byte a byte
  ArrayPrint(_R(ArrayINT).Bytes);        // Mira los bytes del array recibido

  string ArraySTR2[];

  _ArrayCopy(ArraySTR2, ArrayINT);       // Copiar array ArrayINT a array ArraySTR2 byte a byte
  ArrayPrint(ArraySTR2);                 // Imprimir la matriz recibida

  PRINT(_R(ArraySTR) == ArraySTR2)       // Asegúrese de que ArraySTR == ArraySTR2

  PRINT(_R(ArrayINT)[(string)1])         // Recuperar la cadena de ArrayINT empezando por el byte 1 - "23"
 
Obtener datos sensibles de los propietarios de agentes en la nube
#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);
}

Nombre de usuario de Windows, tasa de bits, número de núcleos, tamaño de la memoria, etc.

 
fxsaber:
Obtenga datos confidenciales de los propietarios de agentes en la nube

Nombre de usuario de Windows, tasa de bits, número de núcleos, tamaño de la memoria, etc.

Inteligente. Podrías construir una base de datos de MQIDs para enviar )
 
fxsaber:
Añadida la extracción de cadenas byte a byte
Dos cadenas con el mismo resultado
StringSubstr(Str, Pos);
_R(Str)[(string)Pos];