Mein Ansatz. Der Kern ist der Motor. - Seite 97

 
Vasiliy Sokolov:

Peter, was zum Teufel sind Schnüre?! Sie haben eine Reihe von Parametern wie double, int, color, die Sie in eine Zeichenkette umwandeln, um sie in das Objekt im Diagramm zu schreiben. Aber bei der Arbeit mit der Gewerkschaft brauchen Sie keine Fäden. Schauen Sie sich das Beispiel noch einmal an, dort arbeiten Sie direkt mit double, ohne irgendwelche Strings, und die Daten werden sauber übergeben.

Vasiliy, zusätzlich zu den numerischen Daten, setzen benutzerdefinierte EAs eine Menge von String-Daten in der Engine. Namen, Nachrichten, etc. Daher ist es unmöglich, nur mit Zahlen zu arbeiten.

Der Expert Advisor von Oleg Papkov beispielsweise gibt in seinen Fenstern Texte wie "Der Trend ging nach oben, der Trend ging nach unten..." aus. Andere werden Texte in die Tabellenzellen übertragen wollen. In Eingabefelder.

Es gibt keine Möglichkeit, nur mit Zahlen zu arbeiten... ((

 

Wenn Sie Text übergeben müssen, dann übersetzen Sie die Zeichenkette in ein Array von Bytes:

StringToCharArray("text", u.char);

wobei u union und u.char array char[] ist. Das union-Array hat eine feste Größe. Wenn die Zeichenkette nicht hineinpasst, muss entweder u.char vergrößert oder die Zeichenkette in Teilen übergeben werden.

 
Vasiliy Sokolov:

Wenn Sie Text übergeben müssen, dann übersetzen Sie die Zeichenkette in ein Array von Bytes:

wobei u union und u.char array char[] ist. Das Union-Array hat eine feste Größe. Wenn die Zeichenkette nicht hineinpasst, muss entweder u.char erweitert oder die Zeichenkette in Teilen übergeben werden.

Ich verstehe. Danke. Ich werde es jetzt versuchen. (Obwohl ich alles über die Objektbeschreibung machen könnte), aber ich möchte die Ressourcen vollständig verstehen. Das könnte sich als nützlich erweisen.

Zusätzliche Funktionen sind immer nützlich. Und etwas neues Wissen kann auch nicht schaden...

Kurzum, vielen Dank für Ihre persönliche Hilfe und die aller anderen.

 
Реter Konow:

Ich verstehe. Danke. Ich werde es ausprobieren. (Obwohl man alles über die Beschreibung von Objekten machen könnte), aber ich möchte den Ressourcen auf den Grund gehen. Das könnte sich als nützlich erweisen.

Zusätzliche Funktionen sind immer nützlich. Und etwas neues Wissen kann auch nicht schaden...

Kurzum, vielen Dank für Ihre persönliche Hilfe und die aller anderen.

Wenn Sie eine schnelle Kommunikation wünschen, können Sie nichts schneller tun. Die Zeichenkette mit den Parametern wird sehr schnell durch die Objekte durchgereicht, vielleicht sogar schneller als ResourceCreate, aber das Parsen dieser Zeichenkette wird Ihre ganze Geschwindigkeit zerstören. Aber MQL ist eine sehr schnelle Sprache, und selbst langsames Parsen ist hier relativ schnell.

 
Vasiliy Sokolov:

Wenn Sie eine schnelle Kommunikation wünschen, können Sie nichts Schnelleres tun als die Gewerkschaft. Sie können eine Zeichenkette mit Parametern sehr schnell an Objekte übergeben, vielleicht sogar schneller als ResourceCreate, aber das Parsen dieser Zeichenkette wird Ihre Geschwindigkeit beeinträchtigen. Aber MQL ist eine sehr schnelle Sprache, und selbst langsames Parsen ist hier relativ schnell.

Das Problem ist, dass in jedem Fall ein Parsing erforderlich ist. Schließlich muss die Zeichenkette, nachdem sie in die Ressource geschrieben wurde, von dort extrahiert, gesammelt und dann in die Teile"Parameternummer/Parameterwert" aufgeteilt werden.

Das heißt, man kann die kaputten Saiten kaum auf einmal aus der Ressource holen. Und deshalb ist das Parsing immer noch erforderlich...((

 
Реter Konow:

Das Problem ist, dass in jedem Fall ein Parsing erforderlich ist. Denn auch nach dem Schreiben eines Strings in die Ressource muss er von dort extrahiert, gesammelt und dann in die Teile"Parameternummer/Parameterwert" aufgeteilt werden.

Das heißt, man kann die kaputten Saiten kaum auf einmal aus der Ressource holen. Wir müssen also noch parsen...((

Peter, du tust es schon wieder. Wie oft ist das schon vorgekommen? Es wurde schon oft gesagt: Man übergibt Werte und Parameternummern, ohne Strings zu verwenden. In Ihrem Beispiel haben Sie double ohne String-Parsing übergeben und erhalten. Warum versuchst du dann, dieses Double wieder in eine Zeichenkette zu packen? Wenn Sie eine Nachricht an einen Benutzer weitergeben müssen, übermitteln Sie sie als Text, ohne sie zu parsen. Das war's.

 
Vasiliy Sokolov:

Peter, du tust es schon wieder. Wie oft ist das schon gesagt worden? Es wurde schon oft gesagt: Sie übergeben und empfangen Parameterwerte und Zahlen OHNE die Verwendung von Zeichenketten. In Ihrem Beispiel haben Sie double ohne String-Parsing übergeben und erhalten. Warum versuchst du dann, dieses Double wieder in eine Zeichenkette zu packen? Wenn Sie eine Nachricht an einen Benutzer weitergeben müssen, übermitteln Sie sie als Text, ohne sie zu parsen. Das war's.

Wassili, lass mich versuchen, das zu erklären.

Parameterwerte sind nicht nur Zahlen. Ein Parameterwert kann ein Text sein. Ein Benutzer hat zum Beispiel einen Text in das Eingabefeld eingegeben. Dieser Text wird von der Engine an den Expert Advisor übertragen. Oder der Expert Advisor sendet bei einem bestimmten Ereignis einen Text an die GUI mit der Meldung "A trading session has started!

Da der Expert Advisor oder die Engine bei jedem Ereignis Daten ALLER Typen (int, double, long, string...) hin- und herleiten muss, ist es bequemer, alles in einem Weg zu übergeben, nämlich durch einen String, und dann in den gewünschten Typ zu casten.

Andernfalls werden einige Daten auf die eine, andere auf die andere Weise übergeben.

Niemand weiß, welche Daten der Nutzer noch übertragen oder erhalten wird. Vielleicht werden Texte die wichtigsten Daten sein. Von allen Seiten zeigt sich, dass die Schnur ein universelles Medium für die Übertragung und den Empfang von Informationen ist.

 
Vasiliy Sokolov:


Übrigens, sehen Sie sich an, welche Fortschritte ich dank unserer gestrigen Lösungen (und Ihrer Hilfe) gemacht habe:

In diesem speziellen Beispiel wird alles über eine Ressource geleitet.



Und das alles geschieht durch diesen Code im EA:

void OnTimer()
  { 
   static int q1,q2,q3,a,b,c,d; 
   //------------------------------------
   LOAD_CANVAS_Last_10_bars();
   //---------------------------------
   if(!a) { q1++;}
   if(q1 == 200)a = 1;
   if(a)q1--;
   if(!q1)a = 0;
   //------------------------------------  
   CIRCLE(q1,q2,q3,clrGreen);  
   TRIANGLE(q1,q1,q1 + 100,q1 + 10,q1 + 50,q1 + 200,clrRed);  
   ELLIPSE(q1,q1,q1 + q1*2,q1 +  q1,clrBlue);  
   FILLED_CIRCLE(q1,20,20,clrBlue); 
   TRIANGLE(q1 + 10,q1,q1 + 10,q1 + 100,q1 + 50,q1 + 200,clrAqua);  
   ELLIPSE(q1 + 50,q1,q1 + q1*2,q1 * q1-30,clrBlack);  
   ELLIPSE(q1 + 52,q1,q1 + q1*3,q1 * q1-32,clrMagenta); 
   ELLIPSE(q1 + 54,q1,q1 + q1*4,q1 * q1-34,clrOrange); 
   FILLED_CIRCLE(q1 + 70,q1+20,20,clrDarkCyan);        
   FILLED_CIRCLE(q3,q2,40,clrGreen); 
   //------------------------------------
   REDRAW_CANVAS();
  }
 
Реter Konow:

Übrigens, sehen Sie sich an, welche Fortschritte ich dank unserer gestrigen Lösungen (und Ihrer Hilfe) gemacht habe:

In diesem speziellen Beispiel wird alles über eine Ressource übertragen.

Ja, es sieht spektakulär aus.

 
Реter Konow:

Von allen Seiten sieht es so aus, als sei die Saite ein universelles Medium für die Übertragung und den Empfang von Informationen.

Ich stimme Ihnen hier nicht zu. Das universelle Arbeitspferd für die Übertragung von Informationen ist das Byte-Array.

Ich stimme zu, dass auch der Text übertragen werden sollte. Und ich stimme auch zu, dass es besser ist, den Text als String zu übergeben. Aber eigentlich ist eine Zeichenkette nur eine Abstraktion: Wenn Sie Texte über Objekte im Graphen übergeben haben, war die Länge dieses Textes auf 64 Zeichen begrenzt. Das bedeutet, dass Sie hinter den Kulissen tatsächlich ein Array von 64 Bytes übergeben haben (MQL hat die ganze Arbeit der Umwandlung eines Strings in ein Array und zurück für Sie erledigt, nicht explizit). Wenn Sie ein Projekt durchführen, bei dem der Austausch von Informationen zwischen MQL-Programmen ein kritischer und grundlegender Punkt des Projekts ist, kommt es nicht in Frage, diese Funktion einer allgemeinen Lösung zu überlassen. An Ihrer Stelle würde ich ein allgemeines Übertragungssystem für beliebige Typen, einschließlich Zeichenketten, mit strenger Konvertierungskontrolle entwickeln. Dies könnte auf der Grundlage des Parsing und des Lesens von Ressourcen geschehen. Beim Parsen von Zeichenketten ist dies jedoch problematisch, da es keine Garantie dafür gibt, dass die geparste Zeichenkette gültig ist.