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

 
JRandomTrader #:

Dies wird seit jeher bei der Datenübertragung verwendet.

Bequem. Dem kann man nicht widersprechen. Aber wie ich schon sagte, sollten Sie immer bedenken, wie viele Daten Sie zurücksetzen können.

 
Vitaly Muzichenko #:

Nehmen wir ein Beispiel, das zum Thema passt

Es gibteinen Code für das Upgrade

Das wird in diesem Code nicht funktionieren, weil der Indikatorpuffer unabhängig von uns lebt und wir darin keinen Ringpuffer organisieren - es gibt keine Möglichkeit, diesen MT zu erklären.

 
Mihail Matkovskij #:

Mit ArrayCopy können Sie nur Daten von einem anderen Array übertragen. Aber man kann sie nicht verschieben.

Wer hat Ihnen diesen Blödsinn erzählt?

Lesen Sie genau, wie es gemacht wird.

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Alle Fragen von Neulingen auf MQL4 und MQL5, jede Hilfe und Diskussion über Algorithmen und Codes

Alexey Viktorov, 2022.02.13 18:21

In diesem Code müssen Sie ein Array angeben

int  ArrayCopy(
   void&        dst_array[],         // куда копируем
   const void&  src_array[],         // откуда копируем
   int          dst_start=0,         // с какого индекса пишем в приемник
   int          src_start=0,         // с какого индекса копируем из источника
   int          count=WHOLE_ARRAY    // сколько элементов
   );

Von welchem Index geschrieben und welcher kopiert werden soll, hängt von der Richtung des Array-Offsets ab. Wenn also Index 0 immer frische, neue Daten enthalten soll, kopieren Sie von 0 und schreiben Sie von 1. Somit sind die Werte in Index 0 und 1 identisch, und anschließend wird ein neuer Wert in 0 kopiert.

Und ich bezweifle sehr, dass ArrayCopy() die gleiche Schleife enthält wie die Benutzerschleife. Wenn Sie also ein Array mit einer bestimmten Größe haben, wird es bei jedem Tick um 1 verschoben und dann in den Indikatorpuffer kopiert, der als Zeile angezeigt wird...


 
JRandomTrader #:

Es wird in diesem Code nicht funktionieren, weil der Indikatorpuffer unabhängig von uns lebt und wir keinen Ringpuffer in ihm organisieren - es gibt keine Möglichkeit, dieses MT zu erklären.

Ich verstehe.

Nun, es funktioniert - lassen Sie es so weit funktionieren, noch kein Ergebnis, wir müssen auf unsere "Freunde" aus dem Pindos warten, bis der Markt öffnet, und es ist nicht bald.

Ich werde sehen, was ich arbitrieren kann.

 
JRandomTrader #:

oder sogar

Und niemand hat die Fuge bemerkt!

static int head=0;
for(i=head,count=0;count<ArraySize(A);count++)
  {
   -if(++i>=ArraySize(A))i=0;
   DoSomething(A[i]);
   +if(++i>=ArraySize(A))i=0;
  }
 
JRandomTrader #:

Und niemand hat die Fuge bemerkt!

Ich sehe es immer noch nicht.

 
Vitaly Muzichenko #:

Ich verstehe es immer noch nicht.

i sollte am Ende der Schleife, nach der Verwendung, inkrementiert werden.

Sie können aber auch am Ende der Schleife und am Anfang der nächsten Schleife prüfen, ob das Array überläuft.

 
Alexey Viktorov #:

Wer hat Ihnen so einen Unsinn erzählt?

Lesen Sie genau, wie es gemacht wird.


Ich wusste nicht, dass diese Funktion so universell ist. Aber selbst wenn das der Fall ist, was macht das für einen Unterschied? ArrayCopy verschiebt Daten schneller als eine normale Schleife?

 
Vitaly Muzichenko #:

Der Code funktioniert jetzt, aber wegen des Zyklus gibt es Zweifel an der Geschwindigkeit.

Was wird es sein?

Ich möchte einige Küchen für Arbitrage-Möglichkeit zu testen, wird der Indikator die Differenz der Werte zeichnen, arbeitet auf Timer einmal in 100ms. Verzögerungen bei der Codeausführung sind in dieser Situation kritisch.

Dann weiß ich es nicht. Versuchen Sie ArrayCopy. Die Funktion scheint in der Lage zu sein, Daten zu verschieben. Aber es wird kaum schneller gehen als eine normale Schleife. Nun, wer weiß... Sie müssen es probieren.

 
Mihail Matkovskij #:

Dann weiß ich es nicht. Versuchen Sie ArrayCopy. Die Funktion scheint in der Lage zu sein, Daten zu verschieben. Aber es ist unwahrscheinlich, dass es schneller geht als eine normale Schleife. Nun, wer weiß... Sie müssen es probieren.

Ich weiß nicht, wo ich anfangen soll