Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 374

 
Vitalii Ananev:
Dann brauchen Sie nur den Wert von iHigh(Symbol(),PERIOD_D1,0) nach einer bestimmten Zeitspanne zu nehmen, was nur für die aktuelle Tageskerze sinnvoll ist, die noch nicht vollständig ausgebildet ist. Nimmt man jedoch die Werte der vergangenen Tage, so sind sie jederzeit gleich.
Das ist das Problem, ich muss es mir im Nachhinein ansehen....
 
-Aleks-:
Das ist das Problem, ich muss es mir im Nachhinein ansehen....

Ich verstehe. Sie müssen alle Intraday-Preisextreme fixieren. Ich kann gar nicht schnell genug darüber nachdenken, wie man das bei historischen Daten macht.

Das erste, was einem in den Sinn kommt, ist die Analyse der Fraktale, die sich auf den Intraday-Zeitrahmen bilden.

 

Ich weiß nicht, wie man es deutlicher ausdrücken, im Allgemeinen, wie man den Namen des Arrays als eine Variable setzen?

Zum Beispiel gibt es 2 Arrays Mass1 und Mass2, müssen Sie es die gleiche Funktion, aber durch die Bedingung mit zwei verschiedenen Arrays laufen zu lassen:

if(условие==true)

	И мя_массива=Mass1

else 

	 Имя_массива=Mass2

und Art der Funktion:

A=Имя_массива[123];
 
VANDER:

Ich weiß nicht, wie man es deutlicher ausdrücken, im Allgemeinen, wie man den Namen des Arrays als eine Variable setzen?

Zum Beispiel gibt es 2 Arrays Mass1 und Mass2, müssen Sie es die gleiche Funktion, aber durch die Bedingung mit zwei verschiedenen Arrays laufen zu lassen:

und Art der Funktion:

Und nur zwei Arrays deklarieren, welche Überzeugungen verhindern?
 
VANDER:

Ich weiß nicht, wie man es deutlicher ausdrücken, im Allgemeinen, wie man den Namen des Arrays als eine Variable gesetzt?

Zum Beispiel gibt es 2 Arrays Mass1 und Mass2, müssen Sie es die gleiche Funktion, aber durch die Bedingung mit zwei verschiedenen Arrays laufen zu lassen:

Brunnen und Schriftfunktion:

Niemals. Dennein Array ist eine nummerierte Menge von Variablen.

 
VANDER:

Ich weiß nicht, wie man es deutlicher ausdrücken, im Allgemeinen, wie man den Namen des Arrays als eine Variable setzen?

Zum Beispiel gibt es 2 Arrays Mass1 und Mass2, müssen Sie es die gleiche Funktion, aber durch die Bedingung mit zwei verschiedenen Arrays laufen zu lassen:

Gut und geben Sie eine Funktion ein:

Erstellen Sie eine Funktion, in der Sie Operationen mit dem Array durchführen. Und übergeben Sie der Funktion je nach Bedingung verschiedene Arrays:

//+------------------------------------------------------------------+
double massive_a[];
int a, massive_b[];
//+------------------------------------------------------------------+
void OnTick() {
   if(a==1) WorkWithMassive(massive_a);
   else WorkWithMassive(massive_b);
}
//+------------------------------------------------------------------+
void WorkWithMassive(double &massive[]) {
   // работаем с массивом а
   }
//+------------------------------------------------------------------+
void WorkWithMassive(int &massive[]) {
   // работаем с массивом b
   }
//+------------------------------------------------------------------+
 
Vitalie Postolache:
Und die einfache Deklaration von zwei Arrays verhindert welche Überzeugungen?
werden beide deklariert, es ist nur so, dass die Funktion groß und für alle Arrays gleich ist, so dass es notwendig ist, zu wählen
 
Artyom Trishkin:

Erstellen Sie eine Funktion, in der Sie Operationen mit einem Array durchführen. Und übergeben Sie der Funktion je nach Bedingung verschiedene Arrays:

oops, aber innerhalb der FunktionWorkWithMassive, wie verweisen Sie auf dieses Array?
 
VANDER:
oops, aber innerhalb der FunktionWorkWithMassive, wie verweisen Sie auf dieses Array?

Ein Array wird als Referenz übergeben, und Sie beziehen sich auf das genaue Array, das Sie der Funktion über die Eingabeparameter übergeben. Zum Beispiel (rein hypothetisch)

//+------------------------------------------------------------------+
void WorkWithMassive(double &massive[]) {
   int a=20;
   ArrayResize(massive,a);
   for(int i=a-1; i>=0; i--) {
      massive[i]=iOpen(Symbol(),Period(),a);
      }
   }
//+------------------------------------------------------------------+

Es ist natürlich besser, der Funktion alle notwendigen Parameter zu übergeben:

//+------------------------------------------------------------------+
void WorkWithMassive(string symbol, int timeframe, double &massive[]) {
   int a=20;
   ArrayResize(massive,a);
   for(int i=a; i>=0; i--) {
      massive[i]=iOpen(symbol,timeframe,a);
      }
   }
//+------------------------------------------------------------------+

und Sie können die Überladung von Funktionen verwenden - eine Funktion mit demselben Namen führt je nach Eingabeparameter und Typ unterschiedliche Funktionen aus:

//+------------------------------------------------------------------+
void WorkWithMassive(string symbol, int timeframe, double &massive[]) {
   int a=20;
   ArrayResize(massive,a);
   for(int i=a; i>=0; i--) massive[i]=iOpen(symbol,timeframe,a);
   }
//+------------------------------------------------------------------+
int WorkWithMassive(int inp_value, int array_size, int &massive[]) {
   ArrayResize(massive,array_size);
   massive[array_size-1]=inp_value*2;
   return(massive[array_size-1]+massive[0]);
   }
//+------------------------------------------------------------------+
 
-Aleks-:
Richtig.

1. die Öffnungszeit der Tageskerze zu bestimmen;

Bestimmen Sie die Anzahl der Balken auf der TF, die Sie wünschen (wenn Sie den Tageshöchststand alle 15 Minuten überprüfen möchten - M15 Balken);

3. Empfangen Sie die Daten hoch für num Bars;

3. Vergleichen Sie in der Schleife alle Werte der hohen Balken mit der Variablen dayHigh für die gewünschte Tageskerze (anfangs dayHigh = 0);

4. Wenn high > dayHigh ist, speichern Sie den neuen Wert in der Variablen dayHigh;

Grund der Beschwerde: