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

 
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()
  }
//---------------------------------------------------------------------
По-моему в условных операторах неправильно проставлены знаки сравнения. Они должны быть с точностью до наоборот. Скажите прав ли я? И если нет, то почему так?  
 
Step:
Hallo! Ich habe eine kleine Frage beim Studium von MQL4. Das Problem findet sich in der Anleitung auf dieser Website. Hier ist die Bedingung: Problem 25. Erstellen Sie ein Programm, in dem folgende Bedingungen realisiert werden: Wenn die Rate den angegebenen Wert übersteigt, wird eine Nachricht ausgegeben, in der mit Worten angegeben wird, dass die Rate den Wert übersteigt (bis zu 100 Punkte); in den anderen Fällen wird die Nachricht darüber informieren, dass die Rate den angegebenen Wert nicht übersteigt.
Und hier ist der Lösungsvorschlag:


Zeigt mögliche Lösungen auf. Nützlich für die Ausbildung.

Es gibt noch andere Möglichkeiten. Es gibt noch andere Fehler.

Vertrauen Sie sich selbst mehr. Experiment.

 
Step:
Hallo! Beim Studium von MQL4 habe ich eine kleine Frage. Die Aufgabe befindet sich in der Anleitung auf dieser Website. Hier ist die Bedingung: Problem 25. Erstellen Sie ein Programm, das folgende Bedingungen erfüllt: Wenn die Rate den angegebenen Wert überschreitet, gibt es eine Meldung aus, dass die Rate den Wert überschreitet (bis zu 100 Punkte); in den anderen Fällen gibt es die Meldung aus, dass die Rate den angegebenen Wert nicht überschreitet.
Und hier ist der Lösungsvorschlag:


P.S.

Insbesondere die Nützlichkeit dieses Beispiels im Umgang mit einem Array,

die mögliche Darstellung von Daten in Worten,

die Verwendung der Funktion NormalizeDouble und der vordefinierten Variablen Point.

Möglichkeit, ein einfacheres Hobby zu wählen.

 

Offenbar gibt es keine Möglichkeit, externe Variablen direkt in der Klasse zu deklarieren. Welche Möglichkeiten gibt es dann? Wenn ich diese externen spezifischen Variablen, die nur bei Verwendung dieser Klasse benötigt werden, nicht im Expert Advisor selbst oder an anderer Stelle deklarieren möchte. Ich denke, die einzige Möglichkeit besteht darin, einen Inluder zu erstellen, der diese externen Variablen deklariert. Und dann sollte die Klasse mit einbezogen werden, richtig?

Um die Klasse aufrufen zu können, müssen Sie die Klasse selbst einbinden. Ist das so? Oder kann es auch andere Varianten geben?

Das sieht für mich einfach nicht gut aus. Eine Menge verschachtelter Einschlussdateien zu erstellen... Deshalb habe ich eine solche Frage.

Oder ist es immer noch möglich, wie in einer gewöhnlichen Bibliothek, externe Variablen zu deklarieren und die erforderlichen Bibliotheken zu importieren, bevor die Klasse deklariert wird? Ich meine so etwas wie das hier:

// Объявляем внешние переменные
extern type Var1;
extern type Var2;
extern type Var3;

// Подключаем требуемые библиотеки
//#include <LBase.mqh>
//+---
//#include <Logging.mqh>
#import "user32.dll"
     int GetAncestor;
     int PostMessageA;
#import
//
class CLogging
{
   protected:
 // защищенные данные
   public:
 // открытые данные
};
Das habe ich noch nie gesehen. Ich frage mich also, ob ich auf dem richtigen Weg bin...
 
Beim Übertragen des Indikatorcodes in den Expert Advisor tritt ein Fehler auf. Ich habe sie als globale Variablen auf dem Terminalbildschirm über Comment ausgegeben.

if(BullBear!="")
{
retXB=(zz[A4]-zz[B4])/(zz[A4]-zz[X4]+0.000001);
retAC=(zz[C4]-zz[B4])/(zz[A4]-zz[B4]+0.000001);



Geben Sie sie als globale Variablen über Comment auf dem Terminalbildschirm aus. Es gab keine Nullen, nur negative Zahlen. Dann änderte ich

//---- indicator buffers
double zz[1500];
zu

//---- indicator buffers
double zz[300];
fiel alles an seinen Platz, legte es zurück. Kein Fehler! Was war der Grund dafür? Ich habe auch das Internet ausgeschaltet.
 
semargl988:

Beim Übertragen des Indikatorcodes in den Expert Advisor tritt ein Fehler auf. Null-Division im Code-Teil

...

Geben Sie sie als globale Variablen über Comment auf dem Terminalbildschirm aus. Es gab keine Nullen, nur negative Zahlen. Dann änderte ich

...

zu.

...

fiel alles an seinen Platz, setzte es wieder an seinen Platz. Keinerlei Fehler! Was war die Ursache? Ich habe das Internet weiter ausgeschaltet.

Außerdem erhielt ich die Fehlermeldung "zero divide", bei der die Null im Nenner des Bruchs nicht übergeben werden konnte. Vor der Aufteilung führe ich eine formale Prüfung durch:

if(znamenatel==0)
{
 какое-то действие;
}

Und der Fehler ist verschwunden. D.h. der Compiler sollte angewiesen werden, was zu tun ist, wenn der Nenner=0 ist, auch wenn der Programmierer 100% sicher ist, dass dort keine 0 steht.

 

Hallo, können Sie mir bitte mit dem Code helfen? Ich brauche die EA zu tun, die elementare Sache - offene Positionen bei der Annäherung an die vertikale (d.h. streng Zeit, nicht Preis) Linie, und zwar für eine bestimmte shi-Intervall, das ich hier 120 d.h. wie ich verstehe - 2 Minuten. Die Farbe der Linie sollte bestimmen, ob es sich um einen Kauf oder Verkauf handelt. Ich habe im Internet recherchiert und ihn umgeschrieben und folgendes erhalten:

void OnTick()
{
int AllObject = ObjectsTotal();
for ( int i = 0; i < AllObject; i++)
{

string NameObj = ObjectName(i);
Colorrr = ObjectGet(NameObj, OBJPROP_COLOR);
Vremyaaa = (ObjectGet(NameObj, OBJPROP_TIME) - shi);
if(Vremyaaa == TimeLocal())
break;
}

int kolpos = 0;

if((Colorrr == Green)||(Colorrr == Aqua)){operacia = "OP_BUY";}
if((Colorrr == Red)||(Colorrr == Purple)){operacia = "OP_SELL";}
for (int pos = 0; pos < OrdersTotal(); pos++)
{
if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true)
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
kolpos++;
}
}
}
if(kolpos == 0)
{
if (iTime(NULL,0,1) == Vremyaaa)
{
int ticket = OrderSend(Symbol(), operacia, Lot, Bid, 10, 0, 0, "5", Magic, 0, col);
}

}

}

Aus irgendeinem Grund wird er nicht gehandelt. Es werden keine Fehler in das Protokoll geschrieben...
 
dmitriyriy666:

Hallo, können Sie mir bitte mit dem Code helfen? Ich brauche die EA zu tun, die elementare Sache - offene Positionen bei der Annäherung an die vertikale (d.h. streng Zeit, nicht Preis) Linie, und zwar für eine bestimmte shi-Intervall, das ich hier 120 d.h. wie ich verstehe - 2 Minuten. Die Farbe der Linie sollte bestimmen, ob es sich um einen Kauf oder Verkauf handelt. Ich habe im Internet recherchiert und ihn umgeschrieben:

void OnTick()
{
int AllObject = ObjectsTotal();
for ( int i = 0; i < AllObject; i++)
{

string NameObj = ObjectName(i);
Colorrr = ObjectGet(NameObj, OBJPROP_COLOR);
Vremyaaa = (ObjectGet(NameObj, OBJPROP_TIME) - shi);
if(Vremyaaa == TimeLocal())
break;
}

int kolpos = 0;

if((Colorrr == Green)||(Colorrr == Aqua)){operacia = "OP_BUY";}
if((Colorrr == Red)||(Colorrr == Purple)){operacia = "OP_SELL";}
for (int pos = 0; pos < OrdersTotal(); pos++)
{
if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true)
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
kolpos++;
}
}
}
if(kolpos == 0)
{
if (iTime(NULL,0,1) == Vremyaaa)
{
int ticket = OrderSend(Symbol(), operacia, Lot, Bid, 10, 0, 0, "5", Magic, 0, col);
}

}

}

Der Code lässt sich aus irgendeinem Grund nicht handeln. Es werden keine Fehler protokolliert...

Wenn Ihre Zeit mit der Terminalzeit übereinstimmt, können Sie TimeLocal() verwenden, aber TimeCurrent() ist zuverlässiger .

Ändern Sie den Typ der Operacia-Variablen in int und entfernen Sie die Anführungszeichen OP_BUY und OP_SELL

 
AlexeyVik:

Wenn Sie die gleiche Zeit wie die Terminalzeit haben, können Sie TimeLocal() verwenden, aber TimeCurrent() ist zuverlässiger .

Ändern Sie den Typ der Operacia-Variablen in int und entfernen Sie die Anführungszeichen OP_BUY und OP_SELL



Ich danke Ihnen. Über TimeCurrent ist es wahr, meine Zeit stimmt nicht mit der Serverzeit überein. Ich habe es repariert, aber es funktioniert immer noch nicht... Schreibt keine Fehler in das Protokoll.


P.S. In meinem vorherigen Beitrag wurde irgendwie Code ohne Leerzeichen eingefügt. Aber ich glaube, ich habe alle geschweiften Klammern richtig gesetzt.

 

MT4 - 625, Meldung des Testers beim Versuch, Eulen mit der Bibliothek zu testen:

2014.03.29 18:38:48.753 'C:\Programmdateien\Admiral1\MQL4\Bibliotheken\ingLib094.mq4' ist keine 32-Bit-Version

Davor hat die Eule problemlos kompiliert, und auch in der Bibliothek gab es kein einziges Wort. Eigentlich verstehe ich das überhaupt nicht.

Mein System (ich meine Windows) ist 32-Bit, ich hatte noch nie ein anderes. Siebte.

Die Bibliothek ist meine Heimatbibliothek, und zwar mit allem Drum und Dran. Läuft gut in Echtzeit auf dem neuen Build. Auch mit anderen Eulen. Und im Tester in früheren Versionen ohne Probleme.

Aber im Tester will es sich nicht öffnen, und der Grund dafür wird einem sogar aus den Fingern gesaugt.

Und in allen Handbüchern findet sich kein Wort über 32-Bit-Fälle.