[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 1084

 
khorosh:

Es wäre genauer, es so zu formulieren:



Das ist sogar noch wahrer, und jetzt funktioniert es:

//--------------------------------------------------------------------
int start() // Спец. функция start
{
if(Fun_New_Bar())//проверка наличия нового бара
return; // Выход из start()
}
//--------------------------------------------------------------------
bool Fun_New_Bar() // Ф-ия обнаружения ..
{ // .. нового бара
static datetime New_Time=0; // Время текущего бара
bool New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
Alert("Сформировался новый бар"); // Вывод на экран
}
}
//--------------------------------------------------------------------

 
Und übrigens, warum markiere ich den Code als Code, wenn ich einen Kommentar schreibe und er die gleiche Farbe hat? Oder sollte ich ihn wie markieren, damit er wie echter Code in Farbe aussieht?
 
kolyango:

Ich habe es auf M1 ausprobiert und die Meldung erscheint nicht, nachdem der nächste Balken gebildet wurde. Heißt das, dass es nicht funktioniert?


Und es wird nicht funktionieren - Sie haben das Programm nicht richtig geschrieben. Das liegt daran, dass Sie keine Ahnung haben, wie Ihr eigener Code funktionieren wird. Schauen wir uns das mal an. Gremium der Fachberater:

int start(){ // Спец. функция start
  if(Fun_New_Bar()){ //проверка наличия нового бара
    Alert("Сформировался новый бар"); // Вывод на экран
  }
  return(0); // Выход из start()
}

Ein neuer Tick kommt an und die Funktion Fun_New_Bar() wird aufgerufen. Wenn das Hauptprogramm den Wert true erhält, wird eine Warnmeldung angezeigt. Andernfalls beendet der EA seine Arbeit mit einem Return und wartet auf einen neuen Tick. Alles wiederholt sich auf einen neuen Tick.

Sie sagen, dass der Code nicht funktioniert? Sehen Sie sich nun an, was Sie in Ihrem Unterprogramm haben.

bool Fun_New_Bar(){ // Ф-ия обнаружения нового бара
  static datetime New_Time=0; // Время текущего бара
  bool New_Bar=false; // Нового бара нет
  if(New_Time!=Time[0]){ // Сравниваем время
    New_Time=Time[0]; // Теперь время такое
    New_Bar=true; // Поймался новый бар
  }
}

Eine boolesche Funktion wird deklariert. Da es sich um eine Funktion und nicht um eine Prozedur handelt, sollte sie etwas an das Hauptprogramm zurückgeben, von dem sie aufgerufen wird. Da die Funktion boolesch ist, sollte sie einen booleschen Wert zurückgeben. Wo haben Sie einen String, der etwas an das Hauptprogramm zurückgibt? Das bedeutet, dass zu Beginn des Programms, da die Funktion nichts zurückgibt, die Klammern des Ausdrucks if(Fun_New_Bar()) immer falsch sind und die Warnmeldung nie erscheint.

Gehen wir noch weiter. Warum haben Sie datetime New_Time=0; als statisch deklariert? Wie lautet Ihre Begründung? Sie haben eine Variable deklariert und sie sofort mit Null initialisiert. Beim nächsten Tick passiert das Gleiche - die Variable wird deklariert und wieder mit Null initialisiert. If(Neue_Zeit!=Zeit[0]){ In dieser Zeile wird geprüft, ob der Wert der Variablen nicht gleich der aktuellen Zeit ist. Nun, ja, die Variable hat Null, aber die aktuelle Zeit ist nicht Null. Die Bedingung ist erfüllt, der aktuelle Zeitwert wird in die Variable geschrieben, der Parameter New_Bar wird true. Beim nächsten Tick wird New_Time nicht mehr gleich Time[0] sein, es wird wieder erfolgreich auf Ungleichheit geprüft und die nächsten beiden Operationen werden ausgeführt. Mit anderen Worten, bei der Überprüfung der Bedingung if(Neue_Zeit!=Zeit[0]) wird der Ausdruck in Klammern bei jedem Tick wahr sein. IMMER. Das wirft die Frage auf: Wenn es immer wahr ist, warum zum Teufel sollte dieser Scheck hier sein? Vielleicht sollten wir sie einfach entfernen? Warum sollten wir New_Time=Time[0] und New_Bar=true zuweisen, wenn diese beiden Variablen nirgendwo verwendet werden?Warum zum Teufel brauchen wir diese beiden Aufgaben? Möchten Sie herumspielen? Oder sind Sie zu faul zum Denken?

 

Wie mache ich eine globale Variable für einen EA verfügbar, der auf einem zweiten MT4-Terminal läuft, das gerade läuft?

 
DhP:

Wie mache ich eine globale Variable für einen EA verfügbar, der auf einem zweiten MT4-Terminal läuft, das gerade läuft?


Über eine API oder über ein Textdokument.
 
drknn:

Über eine API oder über ein Textdokument.

Wie?
 
DhP:

Wie?

Über die API weiß ich nicht, wie das geht - ich habe gelesen, dass es möglich ist. Durch Textdokument - Sie müssen eine DLL in einer anderen Sprache als MQL4 schreiben. Zum Beispiel in Delphi oder C++. Die DLL muss in der Lage sein, auf die Datei außerhalb des Terminals zuzugreifen. Das ist durchaus machbar. Im weiteren Verlauf ist alles klar: Der Expert Advisor gibt einen neuen Wert der globalen Variable in ein Textdokument ein, und der andere Expert Advisor liest ihn von dort ab. Die DLL ermöglicht den beiden Expert Advisors den Zugriff auf das Textdokument. Solche Fragen wurden hier schon einmal gestellt. Die Leute haben gefragt, wie man EAs in zwei verschiedenen Kanälen zusammenarbeiten lassen kann...
 
kolyango:

Das ist sogar noch wahrer und es funktioniert jetzt:

Nein - Ihr Alert piept Sie bei jedem Tick an, nicht nur einmal beim ersten Tick einer neuen Kerze.
 
kolyango:



Das ist sogar noch korrekter und funktioniert jetzt:

//--------------------------------------------------------------------
int start() // Спец. функция start
{
if(Fun_New_Bar())//проверка наличия нового бара
return; // Выход из start()
}
//--------------------------------------------------------------------
bool Fun_New_Bar() // Ф-ия обнаружения ..
{ // .. нового бара
static datetime New_Time=0; // Время текущего бара
bool New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
Alert("Сформировался новый бар"); // Вывод на экран
}
}
//--------------------------------------------------------------------


Die Funktion gehört mir nicht - ich habe sie online erworben, aber noch nicht benutzt. Ich habe es mir jetzt genau angesehen - es fehlt ein Operator.

Das ist der richtige Weg:

int start() // Спец. функция start
{
 if(Fun_New_Bar())//проверка наличия нового бара
   {
    Alert("Сформировался новый бар"); // Вывод на экран
   }
return(0); // Выход из start()
}
//--------------------------------------------------------------------
bool Fun_New_Bar() // Ф-ия обнаружения ..
{                  // .. нового бара
static datetime New_Time=0; // Время текущего бара
bool New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
}
return(New_Bar);
}
 
drknn:

Ich weiß nicht wie, aber ich habe gelesen, dass es über eine API möglich ist. Durch Textdokument - Sie müssen eine DLL in einer anderen Sprache als MQL4 schreiben. Zum Beispiel in Delphi oder C++. Die DLL muss in der Lage sein, auf die Datei außerhalb des Terminals zuzugreifen. Das ist durchaus machbar. Im weiteren Verlauf ist alles klar: Der Expert Advisor gibt einen neuen Wert der globalen Variable in ein Textdokument ein, und der andere Expert Advisor liest ihn von dort ab. Die DLL ermöglicht den beiden Expert Advisors den Zugriff auf das Textdokument. Solche Fragen wurden hier schon einmal gestellt. Die Leute fragten etwa, wie man EAs in zwei verschiedenen Kanälen zusammenarbeiten lassen kann...

Danke, ich werde danach suchen...
Grund der Beschwerde: