[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 51

 
vikon писал(а) >>

Ich weiß, wie man eine Bestellung mit einem Code öffnet.

Ich muss ein halbautomatisches System mit Verwaltungseigenschaften erstellen.

Ich eröffne eine Position manuell, aber der EA überwacht die Losgröße und ändert sie standardmäßig in MT (service/settings/trading/default volume).

Ist es möglich, dies zu tun?

Nein. Zumindest nicht in MQL4

 
granit77 >> :

Eine Referenz wäre hilfreich:

double iWPR( string symbol, int timeframe, int period, int shift)

Richtig ist also:

VIELEN DANK!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 
Leute, wie kann man die Entstehungszeit einer bestimmten Säule im MACD ermitteln, ohne ein Preisdiagramm zu verwenden?
 
Noterday >> :
Leute, wie kann man die Entstehungszeit eines bestimmten Balkens im MACD ermitteln, ohne das Preisdiagramm zu verwenden?

Die Spalte entspricht dem Zeitpunkt der Balkenbildung auf dem Preisdiagramm,

Das heißt, Sie müssen die Nummer eines bestimmten Balkens kennen.

 

Welche Regeln gibt es für die Code-Optimierung? Ich interessiere mich für die Regeln beim Schreiben, nicht für den Algorithmus.

Um genauer zu sein, möchte ich Ihnen ein Beispiel nennen:

es gibt zwei "identische" Skripte:

int start()
  {
//----
  int start=GetTickCount();
  int Massiv[100000000];
  int x=ArraySize( Massiv);
  for (int a=0; a<= x; a++)
    {
    Massiv[ a]= a;
    }
  Alert("прошло времени: ",GetTickCount()- start);
//----
   return(0);
  }

и

int start()
  {
//----
  int start=GetTickCount();
  int Massiv[100000000];
  for (int a=0; a<=ArraySize( Massiv); a++)
    {
    Massiv[ a]= a;
    }
  Alert("прошло времени: ",GetTickCount()- start);
//----
   return(0);
  }

der erste ist doppelt so schnell wie der zweite. (bei mir sind es 4 Sekunden)

Es ist klar, dass Arrays von hundert Millionen nicht oft verwendet werden :-) und in Wirklichkeit ist der Gewinn ein paar Millisekunden für ein gewöhnliches Array und dass das Hauptproblem in fehlerhaften Algorithmen liegt und nicht in solchen Kleinigkeiten, aber trotzdem...

 
beruk >> :

Welche Regeln gibt es für die Code-Optimierung? Ich bin an den Regeln für das Schreiben interessiert, nicht an dem Algorithmus.

Um genauer zu sein, möchte ich Ihnen ein Beispiel nennen:

es gibt zwei "identische" Skripte:

и

der erste ist doppelt so schnell wie der zweite. (bei mir sind es 4 Sekunden)

Es ist klar, dass Arrays von hundert Millionen nicht oft verwendet werden :-) und in Wirklichkeit wird der Gewinn ein paar Millisekunden für ein gewöhnliches Array betragen und dass das Hauptproblem in fehlerhaften Algorithmen und nicht in solch winzigen Details liegt, aber trotzdem...

Es gibt keine Regeln im eigentlichen Sinne. Das heißt, Sie können es so schreiben, wie Sie es für richtig halten, und es wird funktionieren. Natürlich wird es mit unterschiedlicher Effizienz funktionieren.

Für jede Operation sind die Kosten in Form von Zeitausdruck bekannt - Sie können sie in den Sprachstandards finden, ebenso wie den Arbeitsablauf von Schleifen und anderen Sprachkonstrukten (der C-Standard - ich erwähne ihn, weil ich bezweifle, dass Sie versucht haben, ihn zu verstehen, ausgehend von den Grundlagen - der Hersteller hat empfohlen, eben diesen Sprachstandard in allen nicht spezifizierten Fällen zu konsultieren).

Im zweiten Fall rufen Sie ständig die Funktion ArraySize(Massiv) auf - dies ist die teuerste Operation (Funktionsaufruf - irgendeine, nicht diese), während die Vergleichsoperation in jeder Schleife aufgerufen wird.

In diesem Fall: die Schleife

for (int a=ArraySize(Massiv)-1;a>0;a--)

macht das Gleiche, nur wesentlich schneller. Ich meine die Art und Weise, wie die Schleife organisiert ist. Wenn Sie umfangreiche Berechnungen in einer Schleife durchführen, gibt es keinen großen Unterschied.

Es gibt ein "aber" - wenn Sie einen Tester oder neu trainierte Netzwerke verwenden, wird der Unterschied sehr groß sein und sehr, sehr .... erscheinen.

Ja, noch eine Sache: Sie haben einen Fehler im ersten Skript - Sie überschreiten die Array-Grenzen. Lesen Sie die Handbücher - dort steht alles drin. Sie sollten es so schreiben:

int x=ArraySize(Massiv);
for (int a=0;a<x;a++)

Viel Glück!

 

Guten Tag

Bitte erklären Sie, wie diese Passage im FileOpen-Tutorial zu interpretieren ist

===

Der Inhalt der Einträge in den Dateien

Bei jeder Kombination von Modi werden die Datensätze ohne Lücken in die Datei geschrieben. Wenn Dateien im Modus FILE_BIN gebildet werden, werden die Datensätze nacheinander geschrieben. Je nach Art der in die Datei geschriebenen Daten (und der zu diesem Zweck verwendeten Aufzeichnungsfunktionen) kann eine Kombination von Zeilenendezeichen ("\r\n") zwischen Gruppen von Datensätzen geschrieben werden. Wenn Dateien im FILE_CSV-Modus erzeugt werden, werden die Datensätze durch ein Dateitrennzeichen (normalerweise ';') getrennt, und Gruppen von Datensätzen (bestehend aus Zeichenketten) werden durch eine Kombination von Zeilenendzeichen ("\r\n") getrennt.

===

Mit "int FileOpen(string filename, int mode, int delimiter=';') " ist alles klar.

Wo soll ich ("\r\n") einsetzen? Kann es mit FILE_CSV verwendet werden? Geben Sie mir bitte ein Beispiel mit ("\r\n"), ich bin so dumm.

 
Hallo! Ich muss einen Expert Advisor für diesen Indikator schreiben: https://www.mql5.com/ru/code/8663 , ich meine HP.mq4 (wenn es nach oben geht kaufen, wenn es nach unten geht verkaufen). Er überzieht zwar, aber bei großen Zeiträumen, z.B. 100-200, ist das erträglich. Oder Sie können ein Signal MA hinzufügen, wenn das Signal unter diesem Indikator ist - kaufen, wenn höher - verkaufen.
 
teetrinker >> :

Guten Tag

Bitte erklären Sie, wie diese Passage im FileOpen-Tutorial zu interpretieren ist

===

Der Inhalt der Einträge in den Dateien

Bei jeder Kombination von Modi werden die Datensätze ohne Lücken in die Datei geschrieben. Wenn Dateien im Modus FILE_BIN gebildet werden, werden die Datensätze nacheinander geschrieben. Je nach Art der in die Datei geschriebenen Daten (und der zu diesem Zweck verwendeten Aufzeichnungsfunktionen) kann eine Kombination von Zeilenendezeichen ("\r\n") zwischen Gruppen von Datensätzen geschrieben werden. Wenn Dateien im FILE_CSV-Modus erzeugt werden, werden Datensätze mit einem Dateitrennzeichen (normalerweise ';') getrennt, und Gruppen von Datensätzen (bestehend aus Zeichenfolgen) werden mit einer Kombination von Zeilenendezeichen ("\r\n") getrennt.

===

mit "int FileOpen(string filename, int mode, int delimiter=';')" ist alles klar.

aber wo sollte "\r\n" verwendet werden? Kann es mit FILE_CSV verwendet werden?

Nirgendwo. Im Handbuch steht in klarem Russisch: "Gruppen von Datensätzen (die Zeichenketten bilden) werden durch eine Kombination von Zeilenendzeichen ("\r\n") getrennt".

 

Könnten Sie mir einen Tipp geben?

In meinem EA sind in einem Block mehrere Warnungen hintereinander und in einem anderen Block mehrere hintereinander

im Protokoll im Test sind sie nicht in der Reihenfolge, sondern sortiert - 2 Warnungen aus dem ersten Block, 3 aus dem zweiten, dann 3 aus dem ersten und die letzten 2 aus dem zweiten

einen 500-Sekunden-Schlupf nach jedem einzelnen setzen, d.h. eine halbe Sekunde und keine Aktion - alle sind immer noch zufällig und in 1 Sekunde können alle 10 gesetzt werden

Was ist der Grund dafür?

Wie können die Ausschreibungen in der richtigen Reihenfolge erfolgen?