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

 
Aleksei Stepanenko:

oder erstellen Sie eine separate Array-Druckfunktion:

Und rufen Sie sie von überall aus an

Alexey, ich habe für eine lange Zeit schweigen, aber ich kann nicht sehen, dies ruhig... Warum IntegerToString() verwenden, wenn eine explizite Typumwandlung in diesem Fall viel einfacher und weniger teuer ist...

eStr+=(string)i+": "+DoubleToString(eArray[i],4)+", ";
 

Keine Ahnung, Gewohnheit :)

 
Aleksei Stepanenko:

oder erstellen Sie eine separate Array-Druckfunktion:

Und rufen Sie sie von überall aus an

Vielen Dank für Ihr Verständnis und Ihre Klarstellung. Ich halte inne, um die Informationen zu studieren und zu verstehen, die für mich neu sind.

 
Alexey Viktorov:

Alexey, ich habe für eine lange Zeit schweigen, aber ich kann nicht sehen, es ruhig... Warum IntegerToString() verwenden, wenn eine explizite Typkonvertierung in diesem Fall viel einfacher und weniger teuer ist...

Und auch Ihnen danke ich für Ihre wertvollen Ergänzungen.

 
Können Sie mir sagen, wo ich nachschauen und nachlesen kann, wie man ein externes Fenster für einen EA erstellt?
 
MakarFX:
Können Sie mir bitte sagen, wo ich nachschauen und nachlesen kann, wie man ein externes Fenster für EA erstellt.

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

tcl.Eval("toplevel .myWin ; wm title .myWin {Окношко}" ); // простите, не удержался
 
Aleksei Stepanenko:

oder erstellen Sie eine separate Array-Druckfunktion:

Und rufen Sie sie von überall aus an

Ich habe beschlossen, eine eigene Druckfunktion für das Array zu erstellen. Oder besser gesagt, machen Sie keinen, sondern verwenden Sie die ( PrintArray() ) Das haben Sie bereits getan.

Was habe ich getan?

Ich habe den Aufruf der Benutzerfunktion PrintArray() innerhalb der Funktion OnTick() platziert... wie in Kovalevs Lehrgang beschrieben.

2. ich habe den Körper der PrintArray() Funktion außerhalb der OnTick() Funktion platziert... ... wie in Kovalevs Tutorial beschrieben.

Alle neuen Variablen aus dem Körper dieser Funktion sind lokal. Sie werden in dieser Funktion deklariert und initialisiert.

int P1=0;
double LoY[31];
void OnTick()
{
if (P1==0)
{
for(int r=0; r<31;r++)
{
LoY[r]=1.6104+(r*2)*0.0001;
P1=1;
}
}
//*************************************************************  Б Л О К    N 2
for(int x=0; x<31;x++)
{
if (Bid < LoY[x] )
{
LoY[x]=Bid;
}
}
ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND);
PrintArray(LoY);
}
//****************************

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);
   }

Ich habe keine Änderungen an Ihrer Funktion vorgenommen. Aber der Compiler gibt aus irgendeinem Grund 6 Fehler aus. Und alle stehen im Zusammenhang mit der Benutzerfunktion.

Ich wäre Ihnen sehr dankbar, wenn Sie mir sagen könnten, was ich falsch gemacht habe.
Ich danke Ihnen.

 
ANDREY:

Ich habe beschlossen, eine eigene Druckfunktion für das Array zu erstellen. Oder besser gesagt, keine erstellen, sondern die verwenden ( PrintArray() ) was Sie bereits getan haben.

Was habe ich getan?

Ich habe den Aufruf der Benutzerfunktion PrintArray() innerhalb der Funktion OnTick() platziert... wie in Kovalevs Lehrgang beschrieben.

2. ich habe den Körper der PrintArray()-Funktion außerhalb der OnTick()-Funktion platziert... ... wie in Kovalevs Tutorial beschrieben.

Alle neuen Variablen aus dem Körper dieser Funktion sind lokal. Sie werden innerhalb dieser Funktion deklariert und initialisiert.

Ich habe keine Änderungen an Ihrer Funktion vorgenommen. Aber der Compiler erzeugt aus irgendeinem Grund 6 Fehler. Und sie alle beziehen sich auf eine Benutzerfunktion.

Ich wäre Ihnen sehr dankbar, wenn Sie mir sagen würden, was ich falsch gemacht habe.
Ich danke Ihnen.

Ich weiß es nicht mehr genau und bin zu faul, um es nachzuprüfen. Versuchen Sie, eckige Klammern hinzuzufügen

void PrintArray(double &eArray[])
 

Aleksei Stepanenko:

string str="";

for(int r=0; r<31;r++)
   {
   LoY[r]=1.6104+r*0.0001;
   str+="--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+", ";
   }
Print(str);


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.

 
Alexey Viktorov:

Ich weiß es nicht mehr genau, und ich bin zu faul, um nachzusehen. Versuchen Sie, eckige Klammern hinzuzufügen

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 Ihre Hilfe und Entschuldigung für die Unannehmlichkeiten.

Grund der Beschwerde: