[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 22

 
skyjet:

Hallo! Mein Ziel ist es, den Indikator durch die Erstellung einer Funktion in den EA zu übertragen.

Der erste Schritt, nämlich die Erstellung der Funktion, ist getan. Aber der nächste Punkt - die Prüfung - funktioniert nicht.

Der Indikator zeichnet Kanäle. Es verfügt über 4 Puffer und eine Vielzahl von Variablen. Ich habe das alles in die Funktion eingefügt.

Aber wenn ich einen Test-Expert Advisor erstelle, um die Genauigkeit seiner Funktion zu überprüfen, indem ich den Indikator und meine Funktion vergleiche, kann ich keine Kompilierung erreichen.

Im EA sind ständig Fehler mit externen Variablen aufgetaucht, die nicht vorhanden waren, als ich die Funktion erstellt habe.

Bitte geben Sie mir einen Rat oder einen Link zu einem Beispiel. Ich habe die Artikel von GODZILLA verwendet, aber seine Beispiele sind anders als meine.

Das Schema sieht in etwa wie folgt aus:

  • Übertragen Sie alles, was in indicator init() war, in eine separate Funktion, z. B. fInit_Indicator(), und schreiben Sie sie in init() des EA, wobei Sie daran denken, alles, was die Initialisierung von Indikatorpuffern betrifft, aus dem Code zu entfernen.
  • Kopieren Sie alle globalen Indikatorvariablen und platzieren Sie sie in den globalen Variablen des EA. Vergessen Sie nicht, die Größe von Indikatorpuffern zu definieren, wenn sie im EA deklariert werden. Etwas wie gd_Buf1[100], gd_Buf2[100] usw. Ich denke, dass 100 Werte für Sie ausreichend sind.
  • Benennen Sie die Start()-Funktion des Indikators um, z. B. fMyIndicator(), und platzieren Sie sie in der Start()-Funktion des EA vor dem Code für die Ordereröffnung (um eine Entscheidung zu treffen).
  • Vergessen Sie auch nicht, dass sich der Indikatorpuffer von dem "Nicht-Indikatorpuffer" unterscheidet. Hierfür gibt es mehrere Lösungen:
  • Wenn ein neuer Balken eintrifft, werden alle Daten im Array "Nicht-Indikator" verschoben, wodurch der 0-Index freigegeben wird, auf dem der neu berechnete Wert platziert wird.
  • Wenn ein neuer Balken eintrifft, wird das gesamte "Nicht-Indikator-Array" neu berechnet.

Probieren Sie es aus - es ist nicht schwer.

 
999666:
Helfen Sie mir, eine Bedingung zu schreiben, die den EA veranlasst, das Los nach dem Öffnen von n Aufträgen mit zwei Mal zu multiplizieren
if (MyOrders >= n) Lots *= 2;
 

Guten Tag!

Ich bin noch dabei, mich mit Arrays vertraut zu machen.

Ich muss bei jedem neuen Tick Werte für die Anzahl der Punkte in das Array laden.

DieGröße des Feldes ist jedes Mal anders. Was sollte ich in diesem Fall tun, verwenden ArreyResize auf jeder Iteration der Schleife?

 

Guten Tag, zum Thema "Arrays".

es gibt eine Zelle dieses Typs

12345,p,fgh,2011-01-01,55,66

Wie kann ich 55 davon bekommen?

Danke.

 

Wenn das Array heterogen ist, sollten Sie wahrscheinlich alle Elemente in den String-Typ konvertieren und dann das gewünschte Element mit

StringFinde(https://www.mql5.com/ru/forum/138609/page22#613148). Korrigieren Sie mich, wenn ich falsch liege.

 
TarasBY:

Nicht hilfreich: Wenn es nicht schwierig ist, zwei Bedingungen zu haben if (LotConst_or_not) gd_200 = Lot;

sonst gd_200 = Kontostand() * Risikoprozent / 100,0 / 10000,0;

Ersetzen Sie ihn durch einen Expert Advisor, der nicht den Saldo, sondern die Anzahl der offenen Aufträge berechnet.

Für eine Antwort wären wir Ihnen sehr dankbar.

 
TarasBY: Nicht hilfreich: Wenn es nicht schwierig ist, zwei Bedingungen zu haben if (LotConst_or_not) gd_200 = Lot;

sonst gd_200 = Kontostand() * Risikoprozent / 100,0 / 10000,0;

Ersetzen Sie ihn durch einen Expert Advisor, der nicht den Saldo, sondern die Anzahl der offenen Aufträge berechnet.

Für eine Antwort wären wir Ihnen sehr dankbar.


 
Snegovik:

Guten Tag, zum Thema "Arrays".

es gibt eine Zelle dieses Typs

12345,p,fgh,2011-01-01,55,66

Wie kann ich 55 davon bekommen?

Danke.


https://book.mql4.com/ru/variables/arrays
 
999666:
Helfen Sie mir, eine Bedingung zu schreiben, die den EA veranlasst, das Los mit zwei Mal zu multiplizieren, nachdem n Aufträge geöffnet wurden
Wenn Sie die nächsten (4 usw.) Aufträge mit 3 bereits geöffneten Aufträgen mit 2 x Lots öffnen wollen, dann:
int Opened_pos=0;
for (int i=OrdersTotal()-1; i>=0; i--)
{ if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
  { if (OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL))
    { Opened_pos++;
} } }
if (Opened_pos>=4) double lot=lot*2;
 
Fox_RM:

Guten Tag!

Ich bin noch dabei, mich mit Arrays vertraut zu machen.

Ich muss bei jedem neuen Tick Werte für die Anzahl der Punkte in das Array laden.

Die Größe des Feldes ist jedes Mal anders. Was sollte ich in diesem Fall tun, verwenden ArreyResize auf jeder Iteration der Schleife?

1-Item: Ihre Philosophie , die Größe des Feldes zu ändern, ist von Anfang an fehlerhaft. In 99 von 100 Fällen können Sie nur 10 Zellen für die Verarbeitung von Indikatorwerten verwenden;

2. Die Neuberechnung dieser Messwerte bei jedem Ticken ist eine Laune des uninformierten Gehirns.

Grund der Beschwerde: