Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 561

 
Forexman77:

Lieber, ich brauche deine Hilfe.

Ich optimiere meinen Expert Advisor durch den Indikator, der Code des Indikators ist unten.

Optimierung ist langsam, ich habe einen Code in der EA, um den Indikator auf eine neue Bar, die nicht ganz geeignet ist, neu zu berechnen gemacht.

Bitte sehen Sie sich den Code des Indikators an und überlegen Sie, was Sie tun können, damit die Neuberechnung schneller erfolgt.


Warum glauben Sie, dass der Blinker schuld ist?
 
Vladon:

die Anzahl der Zeichen und die Schriftgröße wie folgt berechnen?

Die Schriftgröße gibt Ihnen nicht das Wissen, das Sie brauchen. Sie müssen mehrere Objekte übereinander zeichnen. Nur das erste Objekt hat einen Ankerpunkt. Wie erhält man den Ankerpunkt des 2. und der folgenden Objekte?
 
Vladon:


Erzwungener Abschluss des EA, wenn der Benutzer den EA entlädt.

ist es besser, die Daten direkt zu Beginn zu erfassen.

Es ist nicht möglich, dies über Start zu tun. Gleiches Bild.
----------------------------------------------------
stringo 25.03.2014 13:28

Die Deinit-Laufzeit ist auf 10 Sekunden begrenzt.

Im Testgerät wird bei normaler Beendigung das Stop-Flag nicht gesetzt, so dass Deinit ruhig abgeschlossen wird.

----------------------------------------------------

Vielleicht gibt es eine 10-Sekunden-Grenze für die Ausführung einer Funktion?
 
Hallo! Beim Studium von MQL4 ist eine kleine Frage aufgetaucht. Das Problem ist in der Anleitung auf dieser Website beschrieben. Hier ist die Bedingung: Aufgabe 25. Erstellen Sie ein Programm, in dem die folgenden Bedingungen realisiert werden: Wenn der Wechselkurs über das angegebene Niveau gestiegen ist, dann geben Sie eine Meldung aus, in der Wörter darauf hinweisen, dass der Kurs das Niveau überschreitet (bis zu 100 Punkte); in anderen Fällen, um zu informieren, dass der Kurs das angegebene Niveau nicht überschreitet.
Und hier ist der Lösungsvorschlag:
//--------------------------------------------------------------------
extern double Level=1.3200;                     // Заданный уровень 
string Text[101];                               // Объявление массива
//--------------------------------------------------------------------
int init()                                      // Спец. ф-ия init()
  {                                             // Присвоение значений
   Text[1]="один ";            Text[15]="пятнадцать ";
   Text[2]="два ";             Text[16]="шестнадцать ";
   Text[3]="три ";             Text[17]="семнадцать ";
   Text[4]="четыре ";          Text[18]="восемнадцать ";
   Text[5]="пять ";            Text[19]="девятнадцать ";
   Text[6]="шесть ";           Text[20]="двадцать ";
   Text[7]="семь ";            Text[30]="тридцать ";
   Text[8]="восемь ";          Text[40]="сорок ";
   Text[9]="девять ";          Text[50]="пятьдесят ";
   Text[10]="десять ";         Text[60]="шестьдесят";
   Text[11]="одиннадцать ";    Text[70]="семьдесят ";
   Text[12]="двенадцать ";     Text[80]="восемьдесят ";
   Text[13]="тринадцать ";     Text[90]="девяносто";
   Text[14]="четырнадцать ";   Text[100]= "сто";
   // Вычисление значений
   for(int i=20; i<=90; i=i+10)                // Цикл по десяткам
     {
      for(int j=1; j<=9; j++)                  // Цикл по единицам
         Text[i+j]=Text[i] + Text[j];          // Вычисление значения   
     }
   return;                                     // Выход из init()
  }
//--------------------------------------------------------------------
int start()                                     // Спец. ф-ия start()
  {
   int Delta=NormalizeDouble((Bid-Level)/Point,0);// Превышение 
//--------------------------------------------------------------------
   if (Delta>=0)                                // Цена не выше уровня
     {
      Alert("Цена ниже уровня");                // Сообщение
      return;                                   // Выход из start()
     }
//--------------------------------------------------------------------
   if (Delta<100)                               // Цена более 100
     {
      Alert("Более ста пунктов");               // Сообщение
      return;                                   // Выход из start()
     }
//--------------------------------------------------------------------
   Alert("Плюс ",Text[Delta],"pt.");            // Вывод на экран
   return;                                      // Выход из start()
  }
//---------------------------------------------------------------------
По-моему в условных операторах неправильно проставлены знаки сравнения. Они должны быть с точностью до наоборот. Скажите прав ли я? И если нет, то почему так?  
 
Vladon:

Wie kommen Sie darauf, dass der Blinker schuld ist?

Ich habe zum Beispiel die AMA optimiert, das geht viel schneller, obwohl der Indikator komplex ist.

Ich werde nicht mit Sicherheit sagen, dass der Indikator daran schuld ist. Ich habe damit noch nicht viel Erfahrung.

Aber wie kann man es beschleunigen? Habe ich hier alles richtig gemacht oder kann ich etwas ändern?

Im Prinzip reicht es aus, wenn der Indikator anhand der letzten 100 Balken berechnet wird, aber wenn ich die Zahl 100 statt 500 einstelle, verschwinden die Werte.

extern int Limit=70;

if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
 
   limit1=Bars-counted_bars-1;
   if (limit1>Limit && Limit>0) limit1=Limit;
   limit2=limit1;
   limit3=limit2;
   limit4=limit3;
   if(limit1>0) 
     {
      limit1=500-Period_MA_1-1;
      limit2=limit1-p2;
      limit3=limit2-p3;
      limit4=limit3-p4;
     }
Wenn Sie die Optimierung mit dieser Geschwindigkeit durchführen, wird ihre Fertigstellung Bart auf den Boden wachsen und die verdienten Mullen werden nicht nützlich sein) Nun, oder der Markt wird ganz anders sein.
 
alxm:
Guten Tag. Können Sie mir sagen, ob es möglich ist, die Breite/Höhe in einem Diagramm eines OBJ_TEXT-Objekts programmatisch zu definieren oder zu berechnen?

Text wahrscheinlich nicht, aber Etikett bitte

docs.mql4.com/de/constants/objectconstants/enum_object_property

OBJPROP_XSIZE und OBJPROP_YSIZE Eigenschaften

 
Vladon:


Danke für die Hilfe mit dem Schleifenoperator, es hat alles gut geklappt.
 
Forexman77:



Aber wie kann man es beschleunigen? Habe ich hier alles richtig gemacht oder gibt es etwas, das ich ändern kann?



Nun, hier können Sie sofort sehen, das Chaos bei der Neuberechnung, zum Beispiel, ein Balken wurde hinzugefügt.

limit1=Bars-counted_bars-1;

Die Grenze1 wird zwei... Und dann

 if(limit1>0) 
     {
      limit1=500-Period_MA_1-1;

Wie auch immer, die Neuberechnung ist völlig falsch...

 
Vladon:



Vielen Dank, einen schönen Tag noch :) >)
 
splxgf:


Nun, hier kann man sofort sehen, dass die Neuberechnung schief gelaufen ist, zum Beispiel wurde ein Balken hinzugefügt.

Die Grenze1 wird zwei... Und dann

Wie auch immer, die Neuberechnung ist völlig falsch...

Was ist der richtige Weg, um das zu tun? Das ist der Grund für meine Frage. Ich weiß nicht wirklich, wie man Indikatoren zählt.

Ich werde raten:
limit1=Bars-counted_bars;

sollte es so sein?

Ich weiß nicht, was hier los ist.

if(limit1>0) 
     {
      limit1=500-Period_MA_1-1;
Im Allgemeinen genügt es mir, den Indikator auf den letzten 100 Balken berechnen zu lassen.