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

 

Ist es möglich, eine Vorlage zu erstellen und sie auf mehrere Funktionen anzuwenden?

template<typename T>
void Fun1(T &y)
{тело
}
void Fun1(T &r,T k)
{тело
}
int Fun1(T &r,T k)
{тело return(0);
}

Wenn Variablen desselben Typs verwendet werden, wäre es sehr nützlich zu wissen, ob es möglich ist, eine Vorlage für mehrere Funktionen zu verwenden.

 
Guten Tag, könnten Sie mir bitte sagen, wie ich Öl-, Index- und Metallnotierungen hinzufügen kann?
 
vfrfhjybgjakjncmrb:
Hallo, könnten Sie mir bitte sagen, wie ich Kurse für Öl, Indizes und Metalle hinzufügen kann?

Das hängt zum einen davon ab, ob das Amt sie ausstrahlt oder nicht. Das hängt auch von dem Terminal ab, in dem Sie arbeiten. Wenn das Büro sie sendet, müssen Sie wissen, auf welchen Konten und unter welchen Bedingungen diese Kurse gesendet werden, vielleicht brauchen Sie nur die Liste der Instrumente zu öffnen und diese Instrumente sind dort zu finden. Wenn das Büro sie zu Bedingungen sendet, die für Sie unmöglich sind, müssen Sie eine Tabelle mit diesen Kursen erstellen und sie jedes Mal aktualisieren. Wissen Sie sicher, dass Ihr Maklerunternehmen Öl senden wird?

 
Seric29:

Ist es möglich, eine Vorlage zu erstellen und sie auf mehrere Funktionen anzuwenden?

Wenn Variablen desselben Typs verwendet werden, wäre es sehr nützlich zu wissen, ob es möglich ist, eine Vorlage für mehrere Funktionen zu verwenden.

Nein. Eine vollständige Beschreibung jeder Funktion muss separat gegeben werden. Sonst können Sie Ihren eigenen Code später nicht mehr lesen.

 
Wie kann ich einen bestimmten Indikator aus allen Charts in einem Zug entfernen? Das Anwenden einer neuen Vorlage funktioniert nicht. Wie wäre es mit einem Drehbuch?
 
Ilya Prozumentov:

Nein. Eine vollständige Beschreibung jeder Funktion muss separat angegeben werden. Sonst können Sie Ihren eigenen Code nach einer Weile nicht mehr lesen.

Das ist sehr bedauerlich. Wenn Sie das nicht tun, können Sie Ihren eigenen Code sowieso nicht mehr lesen. Ich möchte nur kompakte Programme schreiben, weil man oft Variablen desselben Typs in Funktionen verwendet, deshalb habe ich gefragt. Ich dachte, es wäre möglich, "Klassen" zu verwenden, aber ich bin noch nicht mit ihnen vertraut. So weiß ich, ob ich für viele Funktionen Vorlagen erstellen muss.

 

Wer kann mir sagen, warum dieser Eintrag nicht funktioniert. Ich möchte auf die Felder von Strukturen zugreifen, in denen ein Array gespeichert ist, und dieses drehen, je nachdem, welche Bedingung erfüllt ist, wobei die Ausführung der Bedingung von der FunktionArrayDimension abhängt.

   struct SD1{
   int a[10];//int q[10][2];
};SD1 a1;

struct SD2{
   int a[10][2];
};SD2 a2;

template<typename T>//,typename W
void MoveArray(T & s){//,W&e
   //Alert(ArrayDimension(s.a));
     int r=0;r=ArrayDimension(s.a);Print("r-ранг: ",r);if(r==1)пишу условие что если ранг равен 1му 
      {for(int cn=0; cn<=8; cn++)                              то крутить этот цикл
     {                
      s.a[cn]=s.a[cn+1];
     }} else if (r==2)            если ранг равен 2ум
      {for(int cn=0; cn<=8; cn++) крутить этот цикл
     {                
      s.a[cn][0]=s.a[cn+1][0];
      s.a[cn][1]=s.a[cn+1][1];
     }}  
}

Schließlichkommt es in die erste Schleife, obwohl diese Bedingungif(r==1)falsch ist, warum es dorthin kommt, wenn der Rang 2um ist, wie es trotz des Falsch in den Körper kommt, wo etwas ausgeführt wird.

   MoveArray(a2);в OnTick
   for(int i=0;i<10;i++){Print("q: ",i,": ",a2.a[i][0]);}
int yy=ArrayDimension(a2.a);Print("Ранг: ",yy," ");
 
Seric29:

Schade. Sie können Ihren eigenen Code sowieso nicht lesen, wenn Sie es nicht tun oder wenn Sie es nicht tun. Ich möchte nur kompakte Programme schreiben, weil man oft Variablen desselben Typs in Funktionen verwendet, deshalb habe ich gefragt. Ich dachte, es wäre möglich, "Klassen" zu verwenden, aber ich bin noch nicht mit ihnen vertraut. So weiß ich, ob ich für viele Funktionen Vorlagen erstellen muss.

Ich kann nicht nachvollziehen, wie die Kompaktheit erreicht werden soll. Im obigen Beispiel werden 2 Zeilen eingespart. Wenn Sie sich diese sparen wollen, können Sie eine Makrosubstitution schreiben und diese in der Zeile vor der Funktion verwenden

#define  templ(T) templeate<typename T>

templ(T1) void Funct(T1 a)
 
Ilya Prozumentov:
#define  templ(T) template<typename T>

templ(T1) void Funct(T1 a)

Ist es notwendig,templ(T1) vor jede Funktion zu schreiben, die eine Variable oder das erforderliche Argument annimmt? Warum wirdtempl(T) deklariertundtempl(T1) aufgerufen, sollte ich vor jeder Funktion eine Zahl hinzufügen(templ(T1)templ(T2)templ(T3)) oder sollte ich überalltempl(T1) schreiben?Und wenn mehrere Parameter intemplate<typename T>gewertet werden, wie würde es dann sein, wie diesestemplate<typename T,typename P,typename Q>-templ(T,P,Q).

 
Ich habe ein Problem! Ich möchte Gewinn mit einem anderen EA zu schleppen, aber dieser EA lässt mich nicht ziehen Stop-Loss für Gewinn! Kann das jemand korrigieren! Der Autor antwortet nicht!
Dateien:
cm-MA_Gread.mq4  18 kb
Grund der Beschwerde: