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

 

Guten Tag.

Ich muss die Eröffnung einer neuen Bar bestimmen. Ich habe in meinem Expert Advisor eine reine Funktion eingefügt, das Beispiel aus dem MQL-Tutorial

void Fun_New_Bar() // Funktion zum Erkennen eines neuen Balkens
{
static datetime New_Time=0; // Aktuelle Balkenzeit
bool New_Bar=false; // Kein neuer Balken
if(New_Time!=Time[0]) // Zeiten vergleichen
{
New_Time=Time[0]; // Zeit ist jetzt
New_Bar=true; // Neuen Balken gefangen
}
return(New_Bar);
}

Es gibt einen einzigen Fehler '(' - Funktionsdefinition unerwartet - ich verstehe dies als eine unerwartete Funktionsdefinition.

Ich habe die "New_Time"-Variable vor der int-Funktion als datetime New_Time definiert;- ohne sie gab die Kompilierung einen Fehler von undefinierter Variable.

Die Funktion wird im Hauptprogramm wie folgt aufgerufen:

Fun_New_Bar(); // Aufruf von f-i
if (New_Bar==false) // Wenn der Balken nicht neu ist...
Rückkehr;

Wer kann mir sagen, warum das alles nicht funktioniert?

Und noch eine interessante Beobachtung: Wenn man etwas repariert, kopiert man es - keine Fehler, dann kopiert man es wieder - wieder

'(' - Funktionsdefinition unerwartet - deshalb. Schreibe ich so verworren, dass der Compiler mich nicht auf Anhieb versteht?

 
keekkenen >> :
passiert, dass man manchmal krumme Stellen druckt und 0,0000 = 0 sieht und es nicht funktioniert - falsch, normalisiere die Werte vorsichtshalber.

Ich habe eine neue Bedingung hinzugefügt, die die problematische Bedingung dupliziert, und das Problem ist gelöst.

Ich danke Ihnen!


PS: Es ist gut, dass in meinem Fall der Fehler mit den Aufträgen das Problem meldete - in anderen Fällen kann die Logik des EA völlig kaputt sein,

ohne irgendeine Nachricht, und es wird keine Möglichkeit geben, davon zu erfahren :(((

 

Die Funktion ist als void deklariert, d.h. sie gibt nichts zurück, aber im Code heißt es return(New_Bar); das ist der Grund für den Fehler...

sie muss entsprechend dem zurückgegebenen Variablentyp deklariert werden - bool Fun_New_Bar()

und verwenden Sie es entsprechend if ( !Fun_New_Bar() ) return(0);

 
keekkenen писал(а) >>

Die Funktion ist als void deklariert, d.h. sie gibt nichts zurück, aber im Code heißt es return(New_Bar); das ist der Grund für den Fehler...

sie muss entsprechend dem zurückgegebenen Variablentyp deklariert werden - bool Fun_New_Bar()

und verwenden Sie es entsprechend if ( !Fun_New_Bar() ) return(0);

In der ersten Version hatte ich es genau wie "bool Fun_New_Bar()", aber der Fehler war der gleiche, also habe ich die Funktion wie im Handbuch benannt - void. Ich habe Ihren Tipp umgesetzt, aber es hat sich nichts geändert - der Fehler ist derselbe.

Eine Änderung ist jedoch eingetreten - der Fehler befindet sich in Zeile 279 (dies ist die Kommentarzeile), während die Funktion in Zeile 280 beginnt

Eine damit zusammenhängende Frage ist, ob es akzeptabel ist, die int()-Funktion mit einem einmaligen Analyseblock zu laden, z. B. zur Bestimmung der Werte der beiden letzten Umkehrungen des Indikators.

Ich habe dies getan. Kann es zu einem Aufhängen des Expert Advisors kommen?

 

Funktionsdefinition unerwartet - höchstwahrscheinlich fehlende oder zusätzliche Klammern im Code VOR der Funktion Fun_New_Bar,

Schauen Sie sich den Code genau an und Sie werden das Problem wahrscheinlich finden.

 
keekkenen писал(а) >>

Funktionsdefinition unerwartet - höchstwahrscheinlich fehlende oder zusätzliche Klammern im Code VOR der Funktion Fun_New_Bar,

Schauen Sie sich den Code genau an und Sie werden sehen, was falsch ist.

Ich werde jetzt danach suchen. Ich werde versuchen, diese Funktion in die Stelle zu quetschen, von der aus ich sie aufrufe. Zwei Funktionen mit einem solchen Fehler wurden bereits ohne Fehler kopiert, nachdem sie an den Ort des Aufrufs verschoben wurden. Wenn die "fehlerhafte" Funktion an die Stelle des Aufrufs verschoben wird, springt derselbe Fehler auf die andere Funktion über, die nicht unbedingt die nächste in der Reihenfolge ist.

 
alsu >> :

1. Installieren Sie QIPInfium, falls Sie dies noch nicht getan haben

2. Erstellen Sie ein separates ICQ-Konto für das Terminal

3. Installieren und konfigurieren Sie das MsgBox-Plugin - detaillierte Anweisungen

Schreiben Sie vom Expert Advisor (Indikator, Skript), der Signale erzeugen soll, Dateien mit den erforderlichen Meldungen in den OutBox-Ordner, wie in den Anweisungen unter dem obigen Link beschrieben. Um in die Datei außerhalb des Terminalverzeichnisses zu schreiben, können Sie z.B. die Bibliothek ZI_File_Functions_Full_Lib verwenden


So können Sie mit ein wenig Google und etwas Kreativität in vier Schritten mit minimalem Programmieraufwand alles machen, was Sie wollen: ))))

Danke, es funktioniert :)

 

Wenn der EA im Demomodus läuft, wird das Fenster zur Auftragsbestätigung immer wieder angezeigt, wie beim manuellen Handel. Diese Funktion wurde in den Optionen gestrichen, ist aber noch irgendwo gefangen.

Gibt es eine Möglichkeit, das Bestätigungsfenster zu löschen?

 
Andrei01 >> :

Wenn der EA im Demomodus läuft, wird das Fenster zur Auftragsbestätigung immer wieder angezeigt, wie beim manuellen Handel. Die Optionen haben diese Funktion aufgehoben, aber sie ist immer noch irgendwo gefangen.

Gibt es eine Möglichkeit, dieses Bestätigungsfenster zu löschen?


einstellungen_Mt dienst-einstellungen-berater


Experten_Einstellungen

 

Danke. Das ist genau das, was nicht funktioniert, da es irgendwo im Profil steht und nicht rückgängig gemacht werden konnte. Das Problem wurde durch das erneute Erstellen des Profils gelöst.

Grund der Beschwerde: