Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1415

 
ANDREY:

Ich habe eckige Klammern hinzugefügt void PrintArray(double &eArray[]) Der Compiler hat keine Fehler oder Warnungen angezeigt.
BUT..... hat die Funktion Print() aus irgendeinem Grund nicht ein einziges Mal gedruckt.

Ich verstehe Ihre Faulheit, denn ich bin selbst so. Wenn Sie nicht zu faul sind und mein Enthusiasmus es ersetzt, wäre ich Ihnen dankbar, wenn Sie mir sagen könnten, was mit der benutzerdefinierten Funktion sonst noch falsch ist.

Vielen Dank für die Hilfe und Entschuldigung für den Ärger.

Vielleicht ist das Feld leer? Überprüfen Sie dies, indem Sie die Funktion ein wenig ändern

void PrintArray(double &eArray)
   {
   int eSize=ArraySize(eArray);
   string eStr="Размер массива "+eSize+" : ";
   for(int i=0; i<eSize; i++)
      {
      eStr+=IntegerToString(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(str);
   }
Wenn er 0 ausgibt, suchen Sie nach einem Problem beim Füllen des Arrays.
 
Alexey Viktorov:

void PrintArray(double &eArray)
   {
   int eSize=ArraySize(eArray);
   string eStr="Размер массива "+eSize+" : ";
   for(int i=0; i<eSize; i++)
      {
      eStr+=IntegerToString(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(str);
   }

Ich habe einen Fehler gefunden. In der letzten ZeilePrint(str);haben Sie str anstelle vonestr übergeben. Ich habe es repariert und alles war in Ordnung.

Dank Ihnen habe ich dieses Thema jetzt nicht nur in groben Zügen, sondern im Detail verstanden. Die einzige unbeantwortete Frage bezog sich auf die Pluspunkte aus meinem Beitrag

Vielen Dank für Ihre Hilfe und Unterstützung.

 
Maxim Kuznetsov:

im Forum und in Publikationen über C#, Delphi und alles andere...

Ich habe das noch nie gemacht, kann mir jemand einen Link für "Dummies" geben?
 
ANDREY:

Ich habe einen Fehler gefunden. In der letzten ZeilePrint(str); haben Sie str anstelle vonestr übergeben. Ich habe es repariert und alles war in Ordnung.

Dank Ihnen habe ich dieses Thema nun nicht nur in groben Zügen, sondern im Detail verstanden. Die einzige unbeantwortete Frage bezog sich auf die Pluspunkte aus meinem Beitrag

Vielen Dank für Ihre Hilfe und Unterstützung.

Ich war es nicht, der es weitergegeben hat,

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Alle Fragen von Neulingen zu MQL4 und MQL5, Hilfe und Diskussion von Algorithmen und Codes

Aleksei Stepanenko, 2021.03.13 09:04

Print("-LoY[0]-", DoubleToString(LoY[0],4), "---LoY[1]--", DoubleToString(LoY[1],4), "---LoY[2]--" , DoubleToString(LoY[2],4), "---LoY[3]--" , DoubleToString(LoY[3],4),................  "---LoY[30]--" ,  DoubleToString(LoY[30],4) );

Möglicherweise möchten Sie ein Array drucken oder eine separate Funktion zum Drucken eines Arrays erstellen:

void PrintArray(double &eArray)
   {
   string eStr="";
   int eSize=ArraySize(eArray);
   for(int i=0; i<eSize; i++)
      {
      eStr+=IntegerToString(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(str);
   }

Und rufen Sie sie von überall aus an

PrintArray(LoY);

Ich habe einfach nicht darauf geachtet. Ich verstehe nur nicht, wie die Kompilierung ohne Fehler ablaufen konnte...

Wie lautet die Antwort, wenn Sie es herausgefunden und die ganze Sequenz geschrieben haben?

ANDREY:

Ich glaube, ich habe es endlich herausgefunden (ich bin ein bisschen ein Langweiler) ......

Bei der ersten Iteration ist die String-Variable str leer. Die Zeichen =+ weisen str an, sich selbst leer (ohne Werte) zuzuweisen und an die leere Zeichenkette eine Zeichenkette mit Werten anzufügen, nämlich"--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+",";. Der Wert dieser Zeichenfolge ist " --LoY[0]--, --1.6104-- ". Nach diesen Operationen erhält str bei der ersten Iteration den Wert "--LoY[0]--, --1.6104-- ". So wie ich es in Ihrer Terminologie verstanden habe, wird dies als das erste Element bezeichnet.

Bei der zweiten Iteration hat str bereits das erste Element mit dem Wert " --LoY[0]--, --1.6104-- "Die Zeichen =+ weisen str an, sich den Wert des ersten Elements zuzuweisen und selbst mit dem Wert des ersten Elements, eine Zeichenkette mit anderen Werten hinzufügen, nämlich "--LoY["+"+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+",";. Der Wert dieser Zeichenfolge ist bereits " --LoY[1]--, --1.6105--". Nach diesen Operationenerhält str bei der zweiten Iteration den Wert"--LoY[0]-- --1.6104-- --LoY[1]-- --1.6105--".Das heißt, str hat das zweite Element erhalten und bei der dreißigsten Iteration wird str 30 Elemente mit unterschiedlichen Werten der Array-Elemente enthalten.

Wenn die Schleife beendet ist, wird die String-Variable str mit 30 Elementen einmal außerhalb der Schleife ausgegeben.
Ich habe lange gebraucht, um diesen Algorithmus herauszufinden, denn als du von Addition sprachst, habe ich nur auf das rote Pluszeichen "--LoY["+IntegerToString(r)+"]--,"+DoubleToString(LoY[r],4)+" geachtet, nicht auf str+=

Es ist mir also immer noch ein Rätsel, welche Rolle die roten Pluszeichen "--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+" in diesem Algorithmus spielen

Ich danke Ihnen für Ihre Hilfe.

Und was für ein Rätsel bleibt es, wenn alles richtig geplant ist...
 
MakarFX:
Ich habe es noch nie gemacht, kann jemand einen Link für "Dummies" angeben?

Wenn Sie noch nie in C#, Delphi oder ähnlichem geschrieben haben, wird es Ihnen nicht helfen... Windows wird wie überall erstellt, aber zuerst müssen Sie lernen, wie man es "überall" macht.

Zunächst ein kurzer Kurs in C#, WinForms (zum Beispiel). Davon sollte es eine ganze Reihe im Internet geben. Dies geht ein wenig über den Rahmen des Forums hinaus.

 

Alexey Viktorov .

Alexey Viktorov:


Und was für ein Geheimnis bleibt, wenn alles richtig geschrieben ist...

Ich habe diesen Algorithmus lange Zeit nicht verstanden, weil ich bei der Addition nur auf die roten Pluszeichen "--LoY["+IntegerToString(r)+"]--,"+DoubleToString(LoY[r],4)+" geachtet habe, nicht aber auf str+=

Deshalb ist es mir immer noch ein Rätsel, welche Rolle diese roten Pluszeichen"--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+" in diesem Algorithmus spielen

Aus der Art und Weise, wie ich mein Verständnis beschrieben habe, ergibt sich eindeutig, dass die Verbindung von Zeichenketten bei jeder Iteration an einer Stelle und einmal zusammen mit der Zuweisungsoperation str+= erfolgt

Das heißt, mit dem Symbol + wird der Wert eines Elements in der String-Variablen str mit dem Wert eines anderen Elements derselben String-Variablen str
verbunden (plus). Und ich verstehe immer noch nicht, was diese roten + bedeuten str +="--LoY["+IntegerToString(r)+"]--,"+DoubleToString(LoY[r],4)+",";. Über die Werte, die zwischen diesen roten Pluszeichen liegen, wird keine Summierung vorgenommen ..... , wie es mir scheint. Wenn ich richtig liege, welche Funktion haben diese roten Pluspunkte? Und wenn ich mich irre, habe ich wohl etwas nicht verstanden.

Übrigens, in Ihrem Beitrag, in der gelben Zeile, gibt es nur ein solches rotes Plus vor +DoubleToString(LoY[r],4). Aber ich sehe es nicht danach.

Ich danke Ihnen für Ihre Hilfe.

 
Alexey Viktorov:

Es ist nur nicht klar, wie die Kompilierung ohne Fehler ablief, es ist nicht klar...


Und ich habe str innerhalb des Körpers der Benutzerfunktion selbst initialisiert, als ich sah, dass der Compiler darauf hinwies, dass str undefiniert war. Aber ich habe vergessen, Ihnen davon zu erzählen.
Dann habe ich str überall aus der Benutzerfunktion gelöscht und eStr anstelle von str in der letzten Zeile der Benutzerfunktion in Klammern gesetzt.

 
Maxim Kuznetsov:

Wenn Sie noch nie in C#, Delphi oder ähnlichem geschrieben haben, wird es Ihnen nicht helfen... Windows wird wie überall sonst erstellt, aber zuerst müssen Sie lernen, wie man es "überall" macht.

Zunächst ein kurzer Kurs in C#, WinForms (zum Beispiel). Davon sollte es eine ganze Reihe im Internet geben. Dies würde den Rahmen des Forums ein wenig sprengen.

Nun kann das Formular erstellt werden.


Ich bin mehr daran interessiert, wie der Datenaustausch zwischen meinem Fenster und dem Expert Advisor erfolgen soll.

 
void PrintArray(double &eArray[])
   {
   string eStr="";
   int eSize=ArraySize(eArray);
   for(int i=0; i<eSize; i++)
      {
      eStr+=string(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(eStr);
   }
 

Aleksei Stepanenko:

void PrintArray(double &eArray[])
   {
   string eStr="";
   int eSize=ArraySize(eArray);
   for(int i=0; i<eSize; i++)
      {
      eStr+=string(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(eStr);
   }


Danke für die Klarstellung.

Übrigens habe ich die gelben Pluszeichen entfernt, und der Compiler gab einen Fehler aus. Sie spielen also eine gewisse Rolle in dieser ganzen Konstruktion. Aber was.... ich immer noch nicht verstehe. Wozu werden sie benötigt, wenn die Addition von Zeichenfolgen nur durch die Verwendung von blauen Pluszeichen erfolgt. Nach Ihren Erklärungen zu urteilen, gibt es nichts anderes in dieser Konstruktion ....., wenn ich mich nicht irre.

Und über string(i)... Über die Typenumwandlung .... ist für mich mehr oder weniger klar. Unklar ist, dass..... string der Name eines Variablentyps ist. i ist eine Zählervariable, die den Index eines Array-Elements angibt. Und warum stehti in Klammern ()? Ich habe bisher gedacht, dass Klammern ein Funktionsmerkmal sind. Zum Beispiel: Print( ). Und in einigen Funktionen werden verschiedene Daten in Klammern gesetzt. Aber was bedeuten Klammern oder welche Funktion haben Klammern in Bezug auf i und dieses ganze Konstrukt - string(i)? Auf den ersten Blick sieht es so aus, als hätte die i-Variable vorher den Typ int (Ganzzahl) gehabt , und dann haben Sie den Typ der i-Variable von int in string (Zeichenkette) geändert. Aber Klammern mit einem i darin lassen mich das nicht glauben.

Vielen Dank für die Erklärung.