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

 
D.h. Ihre Wahl ist die Arbeitsebene. Wenn Sie in den externen Variablen ein Verbot/Erlaubnis für Formularobjekte (die für die Anzeige verwendet werden) festlegen, können Sie die Optimierung durchführen.
 

Hallo noch mal. Vielen Dank für die vorherige Antwort - sehr hilfreich. Bitte helfen Sie erneut. Ich habe die Funktion, die ich von einem Expert Advisor benötige, der den Gewinn (Verlust) des Kontos für heute (wenn f0_5(0)), gestern (wenn f0_5(1)), usw. zählt:

double f0_5(int ai_0) {
   double ld_ret_4 = 0;
   for (int pos_12 = 0; pos_12 < OrdersHistoryTotal(); pos_12++) {
      if (!(OrderSelect(pos_12, SELECT_BY_POS, MODE_HISTORY))) break;
               if (OrderCloseTime() >= iTime(OrderSymbol(), PERIOD_D1, ai_0) && OrderCloseTime() < iTime(OrderSymbol(), PERIOD_D1, ai_0) + 86400) ld_ret_4 = ld_ret_4 + OrderProfit() + OrderCommission() + OrderSwap();
   }
   return (ld_ret_4);
}

Das Ergebnis sollte (eigentlich) ein Dezimalbruch sein, aber die Funktion gibt aus irgendeinem Grund eine ganze Zahl zurück. Bitte helfen Sie mir, die Funktion so zu ändern, dass sie ein Bruch mit zwei Nachkommastellen ist.

Obwohl ich vielleicht hier vermasselt haben: überprüft mit Print(), aber die Funktion tatsächlich zählt normal? Bitte helfen Sie mir zu verstehen.

 
MaxZ:

Hier ist der berühmte Idnikator.

Können Sie so ein Bild bekommen? :))))))



Hier ist sie.

 
Das steht da:
ArrayCopy(array2,array1,0,Bars*6-60,60);
// теперь array2 содержит 10 последних баров из истории (имеется в виду, что последний бар - это текущий бар, бар с индексом [0])

Warum sollte array2 die letzten 10 Takte enthalten?
Denn Bars*6 - 60 liefert nicht den Wert 10. Ich kann überhaupt keine Logik erkennen.
Zum Beispiel gibt es 1000 Takte in der Historie. Dann ist Balken*6 - 60 = 1000*6 - 60 = 6000 - 60 = 5940. Wo sind die letzten 10 Takte?
 
hoz:
Das steht da:

Warum sollte array2 die letzten 10 Takte enthalten?
Denn Bars*6 - 60 liefert nicht den Wert 10. Ich kann überhaupt keine Logik erkennen.
Zum Beispiel gibt es 1000 Takte in der Historie. Dann ist Balken*6 - 60 = 1000*6 - 60 = 6000 - 60 = 5940. Wo sind die letzten 10 Takte?

Sie überraschen mich wieder! Die sogenannten letzten 10, von 0 bis zum 10. Balken haben wir auf dem Chart in Kontakt mit dem Preis! Vergessen Sie den dreißigsten und fünftausendsten Balken in der Geschichte! Wir sind sie bereits durchgegangen und brauchen sie nur noch für den Prüfer. Und wir brauchen die neuesten, die bei Null anfangen, und natürlich die neuen in der Zukunft - das ist unser Ziel! ;))
 
borilunad:

Sie überraschen mich wieder! Die sogenannten letzten 10, von 0 bis zum 10. Balken haben wir auf dem Chart in Kontakt mit dem Kurs! Vergessen Sie den dreißigsten und fünftausendsten Balken in der Geschichte! Wir sind sie bereits durchgegangen und brauchen sie nur noch für den Prüfer. Und wir brauchen die neuesten, die bei Null anfangen, und natürlich die neuen in der Zukunft - das ist unser Ziel! ;))

Letzteres, d. h. näher am aktuellen Preis, habe ich bereits verstanden. Aber diesen Teil des CodesBars*6 - 60 verstehe ich nicht. Was wird er zurückgeben? Ich möchte verstehen, wie sie logisch berechnet werden kann. Darf ich Sie um eine Erklärung bitten? Vielleicht ist es für jemanden einfach, aber ich bin kein ausgebildeter Programmierer, daher fällt es mir schwer, diesen Informationsfluss zu verstehen. Ich lese den Leitfaden und stelle nach und nach die Fragen, die sich mir stellen. Ich hoffe sehr, dass die Fragen bald mehr Relevanz haben werden als jetzt.
 
hoz:
Das steht da:
Warum sollte array2 die letzten 10 Takte enthalten?
Denn Bars*6 - 60 liefert nicht den Wert 10. Ich kann überhaupt keine Logik erkennen.
Zum Beispiel gibt es 1000 Takte in der Historie. Dann ist Balken*6 - 60 = 1000*6 - 60 = 6000 - 60 = 5940. Wo sind die letzten 10 Takte?
5940 -Initialer Index des ursprünglichen Arrays zum Kopieren der letzten 10 Takte (Takt - 6 Indizes).
 

Roll:
5940 -Der Startindex des ersten Arrays zum Kopieren der letzten 10 Takte (Takt ist 6 Indizes).

Liebe Experten, ist da nicht ein Fehler im Lehrbuch?

Hier ist meine Argumentation:

Am Anfang des Codes wird die Funktionint ArrayCopyRates aufgerufen, die die Daten der Balken des aktuellen Diagramms in ein zweidimensionales Array vom Typ RateInfo[][6] kopiert und die Anzahl der kopierten Balken oder -1 im Falle eines Fehlers gemäß dem Beispiel dieser Funktion zurückgibt:

double array1[][6];
ArrayCopyRates(array1,"EURUSD", PERIOD_H1);
Print("Текущий бар ",TimeToStr(array1[0][0]),"цена открытия ", array1[0][1]);

der aktuelle Balken ist der Balken mit dem Index 0-0 . Um zum ursprünglichen Code zurückzukehren, kopieren wir also das Element mit dem Index 0-0 (den aktuellen Balken) von array1 nach array2 mit dem Index 0-0, erhalten wir die letzten 10 Balken (wobei der letzte Balken der aktuelle Balken ist, der mit dem Index [0]), was im Gegensatz zu dem steht, was wir im Tutorial geschrieben haben... Durch Kopieren des Elements mit dem Index Bars*6-60,60 von Array1 in Array2 mit dem Index 0 erhalten wir also Informationen über Bars aus der Historie.

 

Hallo.

Ich habe einen benutzerdefinierten Indikator.

Ich schreibe einen EA...und ich habe eine Frage...wie kann ich auf meinen Indikator zugreifen? Genauer gesagt, nehmen Sie die Daten aus dem angegebenen Balken (in meinem Fall muss ich den 2. Balken nehmen). Ich habe windowsPriceMax, aber so weit ich es verstanden habe, zeigt es nur den letzten Wert der Subwindow-Chart und es ist nicht klar, wenn ich zum Beispiel 3 Zeilen auf dem Indikator haben, was wird es angezeigt?

 
Tragedy:

Hallo.

Ich habe einen benutzerdefinierten Indikator.

Ich schreibe einen EA...und ich habe eine Frage...wie kann ich auf meinen Indikator zugreifen? Genauer gesagt, nehmen Sie die Daten aus dem angegebenen Balken (in meinem Fall muss ich den 2. Balken nehmen). Ich habe windowsPriceMax erhalten, aber soweit ich es verstehe, gibt es nur den letzten Wert des Diagramms aus, und ich verstehe nicht, wenn ich 3 Zeilen auf dem Indikator habe, was wird er ausgeben?



double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)

Berechnung des angegebenen Custom Indikators. Der benutzerdefinierte Indikator muss kompiliert werden (eine Datei mit EX4-Erweiterung) und sich im Terminal-Verzeichnis\experts\indicators befinden.
Parameter:

Symbol - Symbolname des Instruments, auf dessen Daten der Indikator berechnet wird. NULL bedeutet das aktuelle Symbol.
timeframe - Zeitraum. Kann einer der Diagrammzeiträume sein. 0 bedeutet die Periode des aktuellen Diagramms.
name - Benutzerdefinierter Name des Indikators.
... - Parameterliste (falls erforderlich). Die übergebenen Parameter sollten mit der Reihenfolge der Deklaration und dem Typ der externen (externen) Variablen des benutzerdefinierten Indikators übereinstimmen.
mode - Index der Indikatorzeile. Kann von 0 bis 7 sein und muss dem Index entsprechen, der von einer der SetIndexBuffer-Funktionen verwendet wird.
shift - Index des aus dem Indikatorpuffer erhaltenen Wertes (Verschiebung relativ zum aktuellen Takt um die angegebene Anzahl von Perioden zurück).

Grund der Beschwerde: