Bibliotheken: TypeToBytes - Seite 4

 
Guss beliebiger Strukturen ist möglich
struct STRUCT2
{
  MqlTick Tick;
};

// Casting beliebiger einfacher Strukturen (wenn es einen Konstruktor oder einen benutzerdefinierten Zuweisungsoperator gibt - TYPETOBYTES_FULL_SLOW wird benötigt).
  STRUCT2 Struct2 = _C(STRUCT2, Tick);   // Ein Analogon des klassischen STRUCT2-Castings STRUCT2 Struct2 = (STRUCT2)Tick;
  PRINT(_R(Struct2) == Tick)             // Sicherstellen, dass Struct2 == Tick

  Struct2.Tick.time = __DATETIME__;      // Ändern Sie Struct2
  PRINT(_R(Struct2) == Tick)             // Stellen Sie sicher, dass Struct2 != Tick

  _W(Struct2) = Tick;                    // Byte-für-Byte-Kopieren von Tick nach Struct2
  PRINT(_R(Struct2) == Tick)             // Sicherstellen, dass Struct2 == Tick
 
Automated-Trading:

TypeToBytes:

Autor: fxsaber

Hallo fxsaber. Zunächst einmal danke ich Ihnen für die Arbeit an TypeToBytes. Ich habe sowohl die TypeToBytes-Datei als auch das mq5-Beispiel heruntergeladen, und wenn ich es ausführe, erhalte ich eine Handvoll Fehler, die alle mit Cast-Problemen zusammenhängen. Hier sind ein paar Beispiele für die Fehler;

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

Ich versuche, diese Datei als Teil eines neuronalen Netzes, das ich entwickle, zu verwenden. Ihre Hilfe ist sehr willkommen.


 
Shephard Mukachi:
Die neueste Version finden Sie immer hier.
 
fxsaber:
Die neueste Version ist immer hier.

Das war's. Vielen Dank für Ihre harte Arbeit und die schnelle Reaktion.

 

Großartige Arbeit, vielen Dank an alle Beteiligten.

 

Beispiel für die Nutzung

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

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Struct Casting Fehler

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 
}
 
Byte-für-Byte-String-Extraktion hinzugefügt
// Extraktion von Zeichenketten
  int ArrayINT[];
  string ArraySTR[] = {"123", "456", "789"};

  _ArrayCopy(ArrayINT, ArraySTR);        // Kopieren des ArraySTR-Arrays in das ArrayINT-Array, Byte für Byte
  ArrayPrint(_R(ArrayINT).Bytes);        // Sehen Sie sich die Bytes des empfangenen Arrays an

  string ArraySTR2[];

  _ArrayCopy(ArraySTR2, ArrayINT);       // Kopieren des ArrayINT-Arrays in das ArraySTR2-Array, Byte für Byte
  ArrayPrint(ArraySTR2);                 // Drucken des empfangenen Arrays

  PRINT(_R(ArraySTR) == ArraySTR2)       // Stellen Sie sicher, dass ArraySTR == ArraySTR2

  PRINT(_R(ArrayINT)[(string)1])         // Abruf der Zeichenkette aus ArrayINT ab Byte 1 - "23"
 
Erlangung sensibler Daten von Cloud-Agent-Besitzern
#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);
}

Windows-Benutzername, Bitrate, Anzahl der Kerne, Speichergröße usw. sind verfügbar.

 
fxsaber:
Erlangung sensibler Daten von Cloud-Agent-Besitzern

Windows-Benutzername, Bitrate, Anzahl der Kerne, Speichergröße usw. sind verfügbar.

Raffiniert. Sie könnten eine Datenbank mit MQIDs zum Versenden erstellen)
 
fxsaber:
Byte-für-Byte-String-Extraktion hinzugefügt
Zwei Zeichenketten mit demselben Ergebnis
StringSubstr(Str, Pos);
_R(Str)[(string)Pos];