[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 301

 
laveosa:

Ich habe alles genau gleich gemacht, mehr als einmal, aber da ist immer noch dieses Loch.
Dann suchen Sie Cheburashka in Ihrer Wohnung! Sicherlich seine Mätzchen! ;)
 
laveosa., halten Sie die Geschichte bis gestern eurusdm1 Download über Import in Anführungszeichen.
Dateien:
eurusd1.zip  548 kb
 
Ich habe versucht, einen Indikator zu überprüfen, ich habe die Zahlen auf dem Diagramm, aber sie ändern sich nicht, ich werde versuchen, es auf eine andere Art und Weise, ich brauche den beigefügten Indikator, um den Preis als ein Kreuz, das auf einem Zickzack oder Alarm oder Druck steht zu fixieren, aber es friert auf die Verbindung.
Dateien:
 

Eine Frage an die Experten!

Ich habe oft Assistenten in meinen EAs. Um den Code nicht mit sich wiederholenden Momenten zu "übersäen", wie:

double maFast = iMA(NULL, 0, i_maFastPeriod, 0, i_maMethod, i_maPrice, index);
double maSlow = iMA(NULL, 0, i_maSlowPeriod, 0, i_maMethod, i_maPrice, index);

Solche Wiederholungen können in Ordnung sein. Ich wollte sie durch das Schreiben separater Funktionen loswerden.

Hier ist der Anfang:

//+-------------------------------------------------------------------------------------+
//| Получаем машку с заданными параметрами                                              |
//+-------------------------------------------------------------------------------------+
double GetMA(double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index)
{
   switch (typeOfMA)
   {
      case 1:      return (iMA(NULL, i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex));
      case 2:      return (iMA(NULL, i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex));
      case 3:      return (iMA(NULL, i_filtrMATF, i_filtrMAPeriod, i_filtrMAShift, i_filtrMAMethod, i_filtrMAApplied, i_filtrMAIndex));
   }
}
//+-------------------------------------------------------------------------------------+
//| Получаем сигнал от скользящих средних                                               |
//+-------------------------------------------------------------------------------------+
int GetStateOfMA()
{
   if (GetMA(1, i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex) > 
      GetMA(2, i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex))
      return (CROSS_UP);
}

Wir können noch weiter gehen, indem wir globale Variablen für Wipes deklarieren, z. B. fastMA und slowMA, und sie per Referenz über die Funktion zurückgeben:

GetMA(double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index)

Sie würden dann etwa so aussehen:

//+-------------------------------------------------------------------------------------+
//| Получаем машку с заданными параметрами                                              |
//+-------------------------------------------------------------------------------------+
double GetMA(double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index, double& fastMA, double& slowMA)
{
   switch (typeOfMA)
   {
      case 1:      return (iMA(NULL, i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex));
      case 2:      return (iMA(NULL, i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex));
      case 3:      return (iMA(NULL, i_filtrMATF, i_filtrMAPeriod, i_filtrMAShift, i_filtrMAMethod, i_filtrMAApplied, i_filtrMAIndex));
   }
}
//+-------------------------------------------------------------------------------------+
//| Получаем сигнал от скользящих средних                                               |
//+-------------------------------------------------------------------------------------+
int GetStateOfMA()
{
   GetMA(double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index, double& fastMA, double& slowMA);
   if (fastMA > slowMA)
       return (CROSS_UP);
   if (fastMA < slowMA)
       return (CROSS_DN);
   return (CROSS_NO);
}

Die Frage ist folgende:

Ich habe irgendwo gehört oder gelesen, dass der Switch-Operator langsam ist. Beeinträchtigt er in diesem Fall nicht die Leistung von EA im Allgemeinen? Wie langsam ist sie im Allgemeinen?

Viele Parameter kommen hier heraus, wird ein Expert Advisor dadurch nicht verlangsamt?

Ich schreibe und denke über Produktivität nach, da stellt sich die Frage, da ich kein gelernter Programmierer bin, es selbst zu verstehen, kommt nicht wirklich heraus...

 

Victor, der Funktionsaufruf ist viel mehr eine Bremse als ein Schalter. Sie können die Geschwindigkeit selbst überprüfen. Schreiben Sie einen Testcode mit einer Schleife. Hier werden Sie Ihren Code überprüfen. Messen Sie die Zeit am Eingang. Vergleichen Sie sie dann mit der Ausgabezeit.

Der Schalterbediener ist einer der schnellsten Bediener. Das ist schneller, als durch die Bedingungen zu rennen.

Der Schalter sollte mit einem Standard für Ausnahmen verwendet werden. Damit Sie im Falle einer fehlerhaften Bedingung wissen, warum der Code nicht funktioniert.

 

Hmm. Ich schätze, dass man eine Konstante für case nicht als Variable verwenden kann, wie es in der Dokumentation steht. Hier steht eine Art von Zielkonstante, Zeichenkonstante oder Zeichenausdruck.

Es funktioniert nur, wenn Sie einen Buchstaben vom Typ String, d.h. 1 Zeichen (wenn mehr als 1 Zeichen, flucht der Compiler) oder eine Zahl eingeben.

Sonst nichts.
Er enthält einige Zielkonstanten, Zeichenausdrücke und Zeichenkonstanten.

 

Wo kann ich etwas über die Verwendung globaler Terminalvariablen mit praktischen Beispielen lesen? Insbesondere möchte ich, dass jeder Expert Advisor nur mit seinem Anteil an der Einlage handelt und dass sein Gewinn/Verlust die MM der anderen Expert Advisors nicht beeinflusst.

 
Ekburg:

Hallo zusammen

Können Sie mir sagen, was die Ursache für den Fehler "shutdown by timeout" ist, wenn ich den Expert Advisor im Terminal ausführe, und wie ich dieses Problem lösen kann?

 
[quote=Roman.]Ändern Sie die Küche.[/quote]Das ist die Sache, die Küche ist nicht beteiligt: der Verkaufsauftrag ist in der EA-Log. natürlich können Sie davon ausgehen, dass der Makler den Code des heruntergeladenen MT4 distributive geändert hat und korrigiert die Richtung des Geschäfts, aber es wäre zu unverschämt, denke ich.
 
Kann ich Programmcodes anhängen, anstatt den gesamten Code hierher zu kopieren? Wo suchen die Administratoren?
Grund der Beschwerde: