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

 
Seric29:

Ich habe die Idee, eine Funktion zu schreiben, die ein Array aufnimmt und verschiebt. Die Frage ist, wie diese Funktion zu machen, so dass es selbst bestimmt, welche Art von Array eindimensional oder 2-dimensional ist, so dass ich nicht in den Argumenten jedes Mal angeben müssen, dass das Array 2-dimensional oder regelmäßig ist. Gleichzeitig möchte ich eine Vorlage anwenden, so dass ich den Typ des Arrays nicht angeben muss.

Wie kann ich es so einrichten, dass ich den Typ des Arrays nicht angeben muss?

Überladen Sie:

template<typename T>
void MoveArray(T &array1[][]) // 2ух мерный.
{
// тело
}
template<typename T>
void MoveArray(T &array1[])// одномерный.
{
// тело
}
 
Ilya Prozumentov:

Überlastung zu tun:

Kann die zweite Dimension dynamisch sein?
 
Alexey Viktorov:
Kann die zweite Dimension dynamisch sein?

Es ist nicht dynamisch, sondern wird einfach als empfangenes Argument geschrieben, einfach in eckige Klammern setzen.

 

Wie kann ich die Aufzählung der möglichen Bedingungsvarianten in einer Schleife (oder auf andere Weise) implementieren?


Zum Beispiel gibt es 2 Indikatoren MA und MACD, d.h. sie repräsentieren 3 mögliche Zustandsvarianten:

1 Option - if(iMA ...) {...};

2. Szenario - if(iMACD ...) {...};

Variante 3 - if(iMA ... iMACD ...) {...};


Es ist einfach, Eingabeparameter zu kombinieren, aber wie kann ich Bedingungen kombinieren? Dies ist besonders nützlich, wenn es mehr als 2 Indikatoren oder Formeln gibt


Geben Sie Links zu Beispielen an, falls vorhanden

 
Alexandr Sokolov:

Wie lässt sich die Aufzählung der möglichen Bedingungsvarianten in einer Schleife (oder auf andere Weise) implementieren?

Wenn ich es richtig verstanden habe, findet sich die Antwort in diesem Thema.

 

Hallo noch einmal, wieder verstehe ich etwas Offensichtliches nicht.

Wie kann man also ein Array an eine Funktion übergeben?

double b[5]={1,2,3,4,5};
void OnStart()
  {
//---
Func(b[]);

  }
//+------------------------------------------------------------------+
void Func(double &a[])
      {
         Alert(a[3]);
      }

Irrtümer:
']' - Ausdruck erwartet
b' - Parameterumwandlung nicht erlaubt

Angenommen, ich weiß, wie ich den ersten Fehler beheben kann:

Func(b[3]);

Aber was ist in diesem Fall, wird nur das dritte Element weitergegeben? Das macht keinen Sinn.
Wie kann ich das Array als Ganzes übergeben?
Ich danke Ihnen.

 
Mikhail Sobolev:

Hallo noch einmal, wieder verstehe ich etwas Offensichtliches nicht.

Wie kann man also ein Array an eine Funktion übergeben?

Irrtümer:
']' - Ausdruck erwartet
b' - Parameterumwandlung nicht erlaubt

Angenommen, ich weiß, wie ich den ersten Fehler beheben kann:

Aber was ist in diesem Fall, wird nur das dritte Element weitergegeben? Das macht keinen Sinn.
Wie kann ich das Array als Ganzes übergeben?
Ich danke Ihnen.

Func(b);
 
int OnCalculate (const int rates_total,      // размер массива price[] 
                 const int prev_calculated,  // обработано баров на предыдущем вызове 
                 const int begin,            // откуда начинаются значимые данные 
                 const double& price[]       // массив для расчета 
                );

Bitte erklären Sie die Mechanik des variablen Beginns


Dieser Link scheint Informationen zu enthalten:https://www.mql5.com/ru/docs/basis/function/events, aber ich verstehe sie entweder nicht oder habe sie nicht gefunden. Ich kann nicht verstehen, was der Standardwert am Anfang ist und wie er sich ändert, wenn die Zyklen in den Indikatoren durchlaufen werden


Ich weiß zum Beispiel, dass return() innerhalb der Funktion OnCalculate() den Rückgabewert der Variablen prev_calculated zuweist, die dann beim nächsten Aufruf von OnCalculate(), d.h. beim nächsten Tick, für die Berechnungen verwendet wird


Beschreiben Sie bitte mit denselben einfachen Worten die Mechanik des Variablenbeginns innerhalb der Funktion OnCalculate()

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 

Guten Tag.

Können Sie mir bitte sagen, warum die Funktion OnTick mit diesem Code keine Daten in die Datei schreibt?

//=== Daten in Datei schreiben ===

h1=FileOpen("test_bar.csv",FILE_CSV|FILE_WRITE|FILE_READ,",");

FileSeek(h1, 0, SEEK_END);

FileWrite(h1, TimeToStr(Time[1],TIME_DATE|TIME_MINUTES),i,Open[1],High[1],Low[1],Close[1], Parabola57Up, ");

FileClose(h1);


Und zwar während der Geschichtsprüfung. Wenn der Expert Advisor online arbeitet, zeichnet er weiter auf.

Dankeschön

 
Alexandr Sokolov:

Wie kann ich die Aufzählung der möglichen Bedingungsvarianten in einer Schleife (oder auf andere Weise) implementieren?


Zum Beispiel gibt es 2 Indikatoren MA und MACD, d.h. sie repräsentieren 3 mögliche Zustandsvarianten:

1 Option - if(iMA ...) {...};

2. Szenario - if(iMACD ...) {...};

Variante 3 - if(iMA ... iMACD ...) {...};


Es ist einfach, Eingabeparameter zu kombinieren, aber wie kann ich Bedingungen kombinieren? Dies ist besonders nützlich, wenn es mehr als 2 Indikatoren oder Formeln gibt


Geben Sie mir einige Links zu Beispielen, wenn Sie welche haben.

Ich möchte eine Selbstoptimierung durchführen, aber nicht nur durch Eingabeparameter von Indikatoren.

Ich verstehe es,aber wie kann man eineSchleifevon Bedingungen machen? Es gibt beispielsweise 3 Indikatoren (die Auswahl der Eingabeparameter in der Schleife lassen wir der Einfachheit halber unberücksichtigt) und es gibt 7 mögliche Kombinationen von Bedingungen/Kombinationen

Die ersten drei Bedingungen haben beispielsweise einen Indikator
1) if(Indikator #1 ...) {...};
2) if(Indikator #2 ...) {...};
3) if(Indikator #3....) {...};

Die zweiten drei Bedingungen für zwei Indikatoren sind
4) if(#1 ... && #2 ...) {...};
5) if(#1 ... && #3 ...) {...};
6) if(#2 ... && #3 ...) {...};

Und in der letzten siebten Bedingung alle drei verfügbaren Indikatoren
7) if(#1 ... && #2 ... && #3 ...) { ...};

Und wenn es auch möglich ist, wäre es gut, die Aufzählung der logischen Bedingungen zu schleifen. Schreiben Sie zum Beispiel nicht && || > < == usw., sondern eine Schleife

. Es wäre schön, wenn wir jede mögliche Variante manuell schreiben könnten und der EA alle möglichen Varianten der Eingabeparameter, kombinierten oder individuellen Indikatoren und logischen Bedingungen kombinieren und prüfen würde.