Bibliotheken: TradeTransactions - Seite 4

 

Nach den ersten Tests nehme ich an, dass wir für double und datetime getrennte Ressourcen und Namen von globalen Variablen erstellen sollten. Ist dies korrekt?

const RESOURCEDATA<double>ResourceDouble("::Double_"+__FILE__); 
const RESOURCEDATA<datetime>ResourceTime("::Time_"+__FILE__); 

int OnInit()
  {
   _GlobalVariableSet("ResourceName",ResourceDouble.GetFullName()); 
   Print(" ResourceDouble.GetFullName(): ",ResourceDouble.GetFullName());

   _GlobalVariableSet("ResourceName1",ResourceTime.GetFullName());  
   Print(" ResourceTime.GetFullName(): ",ResourceTime.GetFullName());   
   
//---
   return(INIT_SUCCEEDED);
  }
 
Nauris Zukas:

Nach den ersten Tests nehme ich an, dass wir für double und datetime getrennte Ressourcen und Namen von globalen Variablen erstellen sollten. Ist dies korrekt?

Leider ist es sehr schwierig, Ihr Niveau an Programmiersprachenkenntnissen zu erreichen. Vielleicht kann es Ihnen jemand anders erklären.

 
fxsaber:

Leider ist es sehr schwierig, Ihr Niveau an Programmiersprachenkenntnissen zu erreichen. Vielleicht kann es Ihnen jemand anders erklären.

Nun, die Hauptsache ist, dass bei mir bisher alles funktioniert.

 
fxsaber:

Aktualisieren Sie ResourceData.mqh und versuchen Sie diese Indikatoren



Guten Tag, kann man die .mqh nicht in den Indikator übertragen? Oder gibt es einen Trick, um den Indikator nicht jedes Mal zurückzusetzen, wenn man ihn kompiliert? Ich habe eine solche Variante gemacht, aber sie wird beim Kompilieren des Indikators zurückgesetzt:

#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/de/code/22166
#include <GlobalVariables.mqh> // https://www.mql5.com/ru/forum/189649#comment_4854618

const RESOURCEDATA<MqlTick>m_Resource("::"+__FILE__); // Ressource für die Datenübertragung (Ticks)

class CMyTicks
  {
protected:
public:
   //+------------------------------------------------------------------+
   //| Konstrukteur.|
   //+------------------------------------------------------------------+ 
   void CMyTicks()
     {
      _GlobalVariableSet("ResourceName",m_Resource.GetFullName()); // Schreiben des vollständigen Namens der Ressource (schreibgeschützt) in die globale Variable 
     }
   //+------------------------------------------------------------------+
   //| Zerstörer.|
   //+------------------------------------------------------------------+ 
   void ~CMyTicks()
     {
      //_GlobalVariableStreichen("Ressourcenname");
     }

   //+------------------------------------------------------------------+ 
   void CollectTicks()
     {
      MqlTick m_Ticks[];
      CopyTicks(_Symbol,m_Ticks,COPY_TICKS_ALL,0,5); // Erstellte Daten
      m_Resource=m_Ticks; // Aufzeichnung der Daten
     }

  };
//+------------------------------------------------------------------+
// Datenabruf
#property indicator_chart_window
#property indicator_plots 0

#include <Test_Keep_Info_13.mqh>
CMyTicks  Test;

#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/de/code/22166
#include <GlobalVariables.mqh> // https://www.mql5.com/ru/forum/189649#comment_4854618

static const RESOURCEDATA<MqlTick>Resource(_GlobalVariableGet<string>("ResourceName")); // Erstellt eine Ressource auf der Grundlage des in der globalen Variable übergebenen vollständigen Namens 
MqlTick Ticks[];

int OnCalculate(const int rates_total,const int prev_calculated,const int,const double &[])
  {
   if(prev_calculated==0)
     {
      Resource.Get(Ticks); // Lesen von Daten aus der Ressource.
      ArrayPrint(Ticks);   // Drucken der erhaltenen Daten

      if(ArraySize(Ticks)<1)
        {
         Test.CollectTicks();
         Print(" SAVE TICKS ");
        }

      Resource.Get(Ticks); // Lesen von Daten aus der Ressource.
      ArrayPrint(Ticks);   // Drucken der erhaltenen Daten
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+

Und auf dem Konto von "jemand anderes wird erklären", so dass ich bereits wissen, die Antwort, wird "fragen Sie den Autor" sein. Ich danke Ihnen!

 
Nauris Zukas:


Guten Tag, können Sie nicht von .mqh auf den Indikator übertragen? Oder gibt es einen Trick, um den Indikator nicht jedes Mal zurückzusetzen, wenn er kompiliert wird? Ich habe eine solche Variante erstellt, aber sie wird beim Kompilieren des Indikators zurückgesetzt:

Und auf dem Konto von "jemand anderes wird erklären", so dass ich bereits wissen, die Antwort, wird "fragen Sie den Autor" sein. Ich danke Ihnen!

Leider kann ich nicht verstehen, die Frage.

 
fxsaber:

Leider kann ich die Frage nicht verstehen.

Das Objekt ist statisch, aber die Daten werden zerstört. Was ist an meinem Beispiel falsch?

 
Nauris Zukas:

Das Objekt ist statisch, aber die Daten werden zerstört. Was ist an meinem Beispiel falsch?

Leider haben Sie große Lücken in Ihrem Verständnis von OOP, so dass Sie nicht das bekommen, was Sie beabsichtigen. Fragen Sie im Forum nach Hilfe bei allgemeinen OOP-Fragen.

 
fxsaber:

Leider haben Sie große Lücken in Ihrem Verständnis von OOP, so dass es nicht wie beabsichtigt funktioniert. Bitten Sie das Forum um Hilfe bei allgemeinen OOP-Fragen.

Okay, danke.

 

Die Bibliotheksquellen enthalten Convert.mqh, das ein Array eines Typs schnell in ein Array eines anderen Typs umwandelt.

 

Sie können alles über Ressourcen austauschen.

// Beispiel für den Austausch beliebiger Daten (einschließlich String-Arrays).

#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/de/code/22166

#define  PRINT(A) Print(#A + " = " + (string)(A));

void OnStart()
{    
  // Beliebige Daten für das Beispiel
  string Str[] = {"123", "Hello World!"};
  double Num = 5;
  MqlTick Tick = {0};
  Tick.bid = 1.23456;

  const RESOURCEDATA<uint> Resource; // Ressource für die gemeinsame Nutzung von Daten
  CONTAINER<uint> Container;         // Erstellen eines Containers - alles wird in einem Array eines einfachen Typs gespeichert (in diesem Beispiel wird uint gewählt)
  
  // Füllen Sie den Container mit verschiedenen Daten
  Container[0] = Str;
  Container[1] = Num;
  Container[2] = Tick;
    
  // Drucken der im Container gespeicherten Datentypen
  for (int i = 0; i < Container.GetAmount(); i++)
    PRINT(Container[i].GetType())

  Resource = Container.Data;  // Senden der Daten zum Austausch
  
  CONTAINER<uint> Container2; // Hier werden wir die Daten abrufen
  
  Resource.Get(Container2.Data); // Ich habe die Daten
      
  // Abrufen der Daten in ihrer ursprünglichen Form
  string Str2[];
  Container[0].Get(Str2);                // Ich habe das Array
  ArrayPrint(Str2);

  PRINT(Container[1].Get<double>())      // Wir haben eine Nummer
  PRINT(Container[2].Get<MqlTick>().bid) // Wir haben die Struktur  
}