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

 

Warum habe ich Schlusskurse aus einer bestimmten Zeit mit einer bestimmten Menge falsch kopiert? MQL5

copied = CopyClose(_Symbol,PERIOD_H4,Time[59],5,MPI); Alert(copied);
  for(int i = 0; i < 100; i++)
    {
     Alert(MPI[i]);
    };
 
Alexandr Sokolov:

Warum habe ich Schlusskurse aus einer bestimmten Zeit mit einer bestimmten Menge falsch kopiert? MQL5

Wo in mql5 haben Sie Time[] gefunden oder ist es ein eigenes Array?

 
Alexey Viktorov:

Und wo in mql5 haben Sie Time[] gefunden oder ist es ein benutzerdefiniertes Array?

Ja, es ist ein benutzerdefiniertes Array, in das ich die Eröffnungszeiten der Balken des Zeitrahmens kopiert habe, in dem sich der Indikator befindet. Oder wie soll das Datum sonst angegeben werden (vor allem, wenn man bedenkt, dass es in Zukunft auf mehrere Arten kombiniert werden muss)?

 
Alexandr Sokolov:

Ja, es ist ein benutzerdefiniertes Array, in das ich die Eröffnungszeiten der Balken des Zeitrahmens kopiert habe, in dem sich der Indikator befindet. Oder wie kann das Datum anders angegeben werden (zumal es in Zukunft auf verschiedene Weise kombiniert werden muss)?

Ja, es ist etwas falsch daran, die TF eines anderen zu kopieren. Ich habe einen Indikator für mehrere Folds gestartet und festgestellt, dass CopyRates() nicht sofort kopiert wird. Offensichtlich liegt es an den unvorbereiteten Daten für den Zeitraum. Eine einfache Neukompilierung behebt die Situation. Es stellt sich heraus, dass wir zuerst den Punkt "ziehen" und dann kopieren sollten. Aber ich bin noch nicht dazu gekommen. Ich werde es morgen überprüfen. Aber ich hoffe, dass ich Recht habe.

Und ein Rätsel für mich: warum die Eröffnungszeiten der Balken in dem Zeitfenster kopieren, in dem sich der Indikator befindet, wenn stattdessen time[] verwendet werden kann. Und wir sollten die Indizierungsrichtung nicht vergessen.

 
Alexey Viktorov:

Und eine kurze Frage: Warum sollte man die Eröffnungszeit der Balken in das Zeitfenster kopieren, in dem sich der Indikator befindet, wenn man stattdessen time[] verwenden kann? Und vergessen Sie nicht die Indizierungsrichtung.

Die Zeit wird außerhalb von OnCalculate verwendet. Indizierung Richtung ArraySetAsSeries(...,true) in allen Puffern


Wozu ist das gut? - Ich habe einen Trendindikator erstellt (in CodeBase gepostet), er ist "verrauscht". Ich habe eine Verlangsamung vorgenommen - nicht genug. Jetzt möchte ich, dass die Werte jeder Kerze des unteren Zeitrahmens aus den Balken des oberen Zeitrahmens berechnet werden

Was meinen Sie mit "yank"?

 
Alexandr Sokolov:

Die Zeit wird über OnCalculate hinaus verwendet. Indizierung Richtung ArraySetAsSeries(...,true) in allen Puffern


Wozu dient es? - Ich habe einen Trendindikator erstellt (in CodeBase gepostet), er ist "verrauscht". Ich habe eine Verlangsamung vorgenommen - nicht genug. Jetzt möchte ich die Werte für jede Kerze des unteren Zeitrahmens aus den Balken des oberen Zeitrahmens berechnen lassen

Was meinen Sie mit "ausreißen"?

"Ami" ist nicht mein Ausdruck. So lese ich in diesem Forum den periodischen Hinweis auf die Daten des gewünschten Zeitraums.

Ich erinnere mich, dass sogar ich wütend darüber war, dass es nicht funktionierte, und sagte, dass ich "die Periode wie eine Katze an der Quelle zerrte", aber es funktionierte nicht. Nach vielen Diskussionen über das Problem habe ich das Kopieren in eine do while-Schleife verpackt. Wenn es beim ersten Versuch kopiert wurde, ist das ein Glück. Wenn dies nicht der Fall ist, versuchen wir es mit einer leeren for-Schleife für 200-500 Iterationen, was ausreichend zu sein scheint. Wir können noch weiter gehen...

Und dieser Indikator, über den ich vorhin schon etwas gesagt habe, befindet sich noch im Anfangsstadium. Deshalb wird es nicht richtig gemacht. Ich habe gerade überprüft, wie viele Balken mit hohem tf ich für die verfügbaren Balken des aktuellen Zeitraums benötige. Ich kam auf 17 Tagesbarren pro 5000 M5-Barren. Und wenn man das nicht berücksichtigt, dann werden 5000 aktuelle M5-Perioden, 5000 4-Stunden- und 5000 Tageswerte kopiert. Zu viele Extras...

Ein weiterer wichtiger Hinweis: Vor einiger Zeit konnten wir die Indizierung eines Arrays einmal umkehren, jetzt müssen wir sie bei jedem Niesen umleiten. Ich habe schon einmal darüber geschrieben. Deshalb ziehe ich es vor, mit der Standardoption zu arbeiten. Es ist nicht schwer, sich daran zu gewöhnen.

 

GlobalVariable kann standardmäßig nur double sein

double close = GlobalVariableGet("close");


Wenn ich einen nahen Wert ohne Nachkommastellen haben möchte, wäre es dann richtig, ihn so zu schreiben?

int close = GlobalVariableGet("close");
 
Alexey Viktorov:

"Ami" ist nicht mein Ausdruck. So lese ich den regelmäßigen Hinweis auf die richtigen Zeitangaben in diesem Forum.

Ich erinnere mich, dass sogar ich mich darüber ärgere, dass es nicht funktioniert, und sage, dass ich "die Periode wie eine Katze an ihrem Platz zerrt", aber es hilft nicht. Nach vielen Diskussionen über das Problem habe ich das Kopieren in eine do while-Schleife verpackt. Wenn es beim ersten Versuch kopiert wurde, ist das ein Glück. Wenn dies nicht der Fall ist, versuchen wir es mit einer leeren for-Schleife für 200-500 Iterationen, was ausreichend zu sein scheint. Wir können die...

Und der bereits erwähnte Indikator steckt noch in den Kinderschuhen. Deshalb wird es nicht richtig gemacht. Ich habe gerade überprüft, wie viele Balken mit hohem tf ich für die verfügbaren Balken des aktuellen Zeitraums benötige. Ich kam auf 17 Tagesbarren pro 5000 M5-Barren. Und wenn man das nicht berücksichtigt, dann werden 5000 aktuelle M5-Perioden, 5000 4-Stunden- und 5000 Tageswerte kopiert. Das ist eine Menge zusätzlicher...

Ein weiterer wichtiger Hinweis: Vor einiger Zeit konnten wir die Indizierung eines Arrays einmal umkehren, jetzt müssen wir sie bei jedem Niesen umleiten. Ich habe schon einmal darüber geschrieben. Deshalb ziehe ich es vor, mit der Standardoption zu arbeiten. Es ist nicht schwer, sich daran zu gewöhnen.

Warten Sie, haben wir etwas verpasst oder uns missverstanden, denn

Alert(copied);

... ...gibt er 5 zurück, was korrekt ist, aber die Werte in meinem Puffer sind alle gleich.

 
Alexandr Sokolov:

Warten Sie, haben wir etwas verpasst oder uns missverstanden, denn

... Ich gebe 5 zurück, was korrekt ist, aber die Werte im Puffer sind alle gleich

Dann müssen wir herausfinden, die MPI-Array-Dimension und seine Indizierung Richtung, wenn Sie 5 Elemente zu kopieren, warum Zyklus bis 100?

Ich ziehe es vor, in solchen Fällen den Debugger zu verwenden. Ein Array abrufen und alle Array-Felder überprüfen, ohne neu zu starten...

 
Alexey Viktorov:

Dann müssen wir mit der MPI-Array-Größe und der Indizierungsrichtung umgehen, wenn Sie 5 Elemente kopieren, warum dann die Schleife bis 100?

In solchen Fällen ziehe ich es vor, den Debugger zu verwenden. Das Array abrufen und alle Array-Felder überprüfen, ohne neu zu starten...

Ich habe ihn auf 100 eingestellt, weil ich dachte, er würde bei 59 beginnen, aber bei 6 ist er gleich.

Grund der Beschwerde: