[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 1085
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Die Funktion gehört mir nicht - ich habe sie online erworben, aber nicht benutzt. Ich habe es mir jetzt genau angesehen - es fehlt ein Operator.
Der richtige Weg ist der folgende:
Wieder falsch! Der EA wird bei jedem Tick erneut piepsen, da Fun_New_Bar() immer true zurückgibt. Die Frage ist, warum wir Fun_New_Bar() brauchen, wenn es immer true zurückgibt?
Und es wird nicht funktionieren - Sie müssen das Programm falsch geschrieben haben. Und das nur, weil Sie keine Ahnung haben, wie Ihr eigener Code funktionieren wird. Schauen wir uns das mal an. Der Hauptteil des Expert Advisors:
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 durch Rückkehr 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.
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 dann 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?
Probieren Sie diesen Code aus. Es scheint zu funktionieren, aber prüfen Sie, ob es richtig oder falsch ist. Wenn etwas falsch ist, korrigieren Sie 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("Сформировался новый бар"); // Вывод на экран
}
}
//--------------------------------------------------------------------
Probieren Sie diesen Code aus. Es scheint zu funktionieren, man muss nur sehen, ob es richtig oder falsch ist:
kolyango: Ich werde Ihnen den richtigen Code zeigen. Sehen Sie.
Nein, das ist nicht richtig - ich habe den Code für Sie ausbuchstabiert. Verstehst du denn gar nichts?
Aber sieh nur, es scheint richtig zu funktionieren! Ich habe es im Zeitrahmen M1 überprüft:
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);
}
Aber siehe da, es scheint zu funktionieren! Ich habe es mit dem Zeitrahmen M1 überprüft:
Wieder falsch! Der EA wird bei jedem Tick erneut piepsen, da Fun_New_Bar() immer true zurückgibt. Die Frage ist, warum zum Teufel wir Fun_New_Bar() brauchen, wenn es immer true zurückgibt?
New_Time=Time[0] функция Fun_New_Bar() не будет возвращать истину
kolyango: Ich werde Ihnen den richtigen Code zeigen. Sehen Sie.
drknn:
... Программирование - это не игра в угадайки - тут думать надо...
... Nun, zumindest manchmal ... :-)))
Und die Variante mit Balken ist weniger empfehlenswert, weil sich der Wert von Balken nicht nur durch das Erscheinen eines neuen Balkens ändern kann.
Also, klären Sie mich auf - kann sich die Anzahl der Kerzen auf dem Diagramm in Verbindung mit etwas anderem als dem Erscheinen eines neuen Balkens ändern? :)))))
Ach ja, richtig - Geschichte laden. :) Auf jeden Fall wird die Funktion bei jedem Ticken piepsen - sie merkt sich die Zeit nicht richtig.