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

 
Taras Slobodyanik:

das Format der Kommentare kann von Makler zu Makler variieren.

Ich habe das Fehlen von "An" und "Von" nicht bemerkt.
 
Artyom Trishkin:
Ich habe das Fehlen von "An" und "Von" nicht bemerkt.
Artem, sehen Sie sich meine Frage oben an....
 

Einen guten Tag an Sie alle!

Können Sie mir bitte sagen, ob es eine Funktion in MQL4 (oder in MQL5, die aber in MQL4 funktioniert ) gibt , die das Array LoY[2][7] in das Array LoY[7][2] und umgekehrt umwandelt. So etwas wie Transposition. Im Folgenden finden Sie ein Beispiel für die Umwandlung, die ich benötige. Ich möchte genau diese Funktion haben. Ich weiß bereits, wie man ein Array in einer Schleife umwandelt.

Ich danke Ihnen für Ihre Hilfe.

 
ANDREY:

Einen guten Tag an Sie alle!

Können Sie mir bitte sagen, ob es eine Funktion in MQL4 (oder in MQL5, die aber in MQL4 funktioniert ) gibt , die das Array LoY[2][7] in das Array LoY[7][2] und umgekehrt umwandelt. So etwas wie Transposition. Im Folgenden finden Sie ein Beispiel für die Umwandlung, die ich benötige.

Vielen Dank für Ihre Hilfe.

Nur als Hinweis: In klassischen Algorithmen (IT im Allgemeinen) wird eine solche Operation als Zip bezeichnet,

Ich kann eine solche Funktion in der Bibliothek nicht finden. Das ist schrecklich verschwenderisch und ineffizient. Es ist einfacher und schneller, Indizes im Algorithmus/Programm zu ändern oder indirekte Zugriffe zu verwenden, als ALLE Daten in Arrays neu anzuordnen.

 
Maxim Kuznetsov:

Es ist einfacher und schneller, Indizes im Algorithmus/Programm zu ändern oder indirekte Zugriffe zu verwenden, als ALLE Daten in den Arrays neu anzuordnen.

Vielen Dank für Ihre Antwort. Leider bin ich in der Programmierung nicht so fortgeschritten wie Sie. Ich wäre Ihnen sehr dankbar, wenn Sie einen mql4-Code schreiben könnten, der Array-Indizes ändert, um mein Problem zu lösen. Und wenn Sie ein Beispiel für eine indirekte Bezugnahme nennen, werde ich Ihnen doppelt dankbar sein.

Ich werde Ihren Gedankengang besser verstehen und dank Ihnen etwas Neues und Nützliches für mich lernen.

 
ANDREY:

Vielen Dank für Ihre Antwort. Leider bin ich in der Programmierung nicht so fortgeschritten wie Sie. Ich wäre Ihnen sehr dankbar, wenn Sie etwas mql4-Code schreiben könnten, um Array-Indizes zu ändern, um mein Problem zu lösen. Und wenn Sie ein Beispiel für eine indirekte Bezugnahme nennen, werde ich Ihnen doppelt dankbar sein.

Ich werde Ihren Gedankengang besser verstehen und dank Ihnen etwas Neues und Nützliches für mich lernen.

void Convert_7x2_2x7 (const double &src[7][2],double &dst[2][7]) {

   for(int i=0;i<7;i++)

   for(int j=0;j<2;j++) {

dst[j][i]=src[i][j];

   }

}

Es ist kurz, aber es ist das Schlimmste, was man tun kann :-) zwei verschachtelte Schleifen und das Kopieren von Arrays Element für Element.

Wenn Sie Ihren Algorithmus verinnerlicht haben, können Sie die Indizes einfach umbenennen. Ändern Sie im Code einfach i in j und umgekehrt...

 
Maxim Kuznetsov:

void Convert_7x2_2x7 (const double &src[7][2],double &dst[2][7]) {

   for(int i=0;i<7;i++)

   for(int j=0;j<2;j++) {

dst[j][i]=src[i][j];

   }

}

kurz, aber es ist das Schlimmste, was man tun kann :-)

Ich danke Ihnen vielmals. Und ein Beispiel für das Beste? :-)...., damit ich alles verstehe.

Element-für-Element-Kopieren ist langwierig und energieaufwendig... besonders bei großen Arrays...... wenn ich mich nicht irre.

 
Andrei, warum solltest du das tun? Wenn die Daten bereits in einem Array gesammelt sind, können Sie einen Weg finden, sie einfach so zu verwenden, ohne etwas zu verschieben. Oder stellen Sie sie in der richtigen Reihenfolge zu einem Array zusammen. Was möchten Sie bekommen?
 
Aleksei Stepanenko:
Andrei, warum brauchst du es? Wenn die Daten bereits in einem Array gesammelt sind, können Sie einen Weg finden, sie so zu verwenden, wie sie sind, ohne etwas zu verschieben. Oder Sie können sie vorher in der richtigen Reihenfolge zu einem Array zusammenstellen. Was möchten Sie bekommen?

Hier ist mein einfacher Code, um zu zeigen, was ich brauche.

double LoY[2][31],LoU,LoU1;
int S,S1,S2;

void OnTick()
{
//*************************************************** БЛОК 1
if (Minute()==20&&Minute()!=S1)
{
ArrayFill(LoY,0,10,0.5555);

S1=Minute();
}
//*************************************************** БЛОК 2
if (Minute()!=S)
{
LoY[0][S2]=Bid;
ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND);
Print("----LoY[0][1]-- Г ---  [0]  ",  LoY[0][0],"  [1] ",   LoY[0][1],"  [2] ",   LoY[0][2],"  [3] ",   LoY[0][3],"  [4] ",   LoY[0][4],"  [26] ",   LoY[0][26],"  [27] ",   LoY[0][27],"  [28] ",   LoY[0][28],"  [30] ",   LoY[0][30],"  [60] ",   LoY[0][60]);
Print("----LoY[1][0]-- В ---  [0]  ",  LoY[0][0],"  [1] ",   LoY[1][0],"  [2] ",   LoY[2][0],"  [3] ",   LoY[3][0],"  [4] ",   LoY[4][0],"  [26] ",   LoY[26][0],"  [27] ",   LoY[27][0],"  [28] ",   LoY[28][0],"  [30] ",   LoY[30][0],"  [60] ",   LoY[60][0]);
S2++;
if (S2==62)
{
S2=0;
}
S=Minute();
}
}

In Block 1 wird ArrayFill(LoY,0,10,0.5555) ausgeführt und weist den ersten 10 Elementen des Arrays den Wert 0.5555 zu. Danach muss ich die gesamte Nullzeile von Spalte 0 bis Spalte 31 sortieren.

Ich möchte es in Block 2 sortieren, indem ich ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND) verwende; Aber ich kann es nicht sortieren, weil diese Funktion ein zweidimensionales Array nach seiner ersten Dimension sortiert, d. h. nach Zeilen. Und ich habe eine Zeichenfolge zu sortieren nur 1. ArraySort() auf die zweite Dimension, dh die Spalten nicht sortieren zweidimensionalen Array (nur eindimensional).

Also dachte ich, vielleicht sollte ich LoY[2][31] nach dem ersten Block in LoY[31][2] umwandeln, damit ArraySort() die benötigten Werte in Block 2 sortieren kann. Und ich muss alle Werte aus der Zeile Null sortieren, nachdem ArrayFil() die ersten 10 von ihnen geändert hat.

Kann ich zweidimensionale Arrays nach der zweiten Dimension, d. h. nach Spalten, mit einer anderen Funktion oder auf andere Weise sortieren?
Entschuldigung... Ich weiß nicht, wie ich den Code löschen kann. Ich werde also einfach sagen, dass in Zeile 180 ein Fehler vorliegt, anstatt LoY[S2][0]=Bid; wir brauchen LoY[0][52]=Bid;

Vielen Dank für Ihre Hilfe.

 
Möchten Sie die Werte in beiden Zeilen oder nur in der ersten sortieren?
Grund der Beschwerde: