Hallo 2015.09.17_19:07 GMT+3 .Ich habe die Dimensionen der dynamischen Arrays im EA-Programm festgelegt. Und der Compiler gibt Fehler aus: "Komma erwartet". Und wenn eine Variable im Programmtext vorkommt, gibt -- Warnungen aus: "Variable soundso versteckt Variablendeklaration auf globaler Ebene". Das verstehe ich nicht. Alles scheint korrekt zu sein, wie in der Hilfe. Hier sind einige Codeschnipsel:
//--- Array der maximalen Barpreise
bool ArraySetAsSeries(double &High[],bool);
//---
bool ArraySetAsSeries(double &Low[],bool);
//--- Festlegen der Array-Größen mit Reserve (Reserve)
Hallo 2015.09.17_19:07 GMT+3 .Ich habe die Dimensionen der dynamischen Arrays im EA-Programm festgelegt. Und der Compiler gibt Fehler aus: "Komma erwartet". Und wenn im Programmtext steht
Sie können keine Arrays mit den Namen High[] und Low[] deklarieren, da dies reservierte Systemnamen von Array-Timeseries sind.
Falsche Schreibweise von ArrayResize. So sollte es sein:
//--- устанавливаю размеры массивов с запасом (reserve)ArrayResize(mrate,16,9);
ArrayResize(maVal,16,9);
ArrayResize(fVal,3,2);
ArrayResize(zVal,3);
Und das Setzen des Zeitreihen-Flags für ein Array würde wie folgt aussehen:
-Aleks-: Ich bin an dem beigefügten Code interessiert - ich möchte verstehen, was er bewirkt.
Der von Ihnen angegebene Code führt zu nichts, oder besser gesagt, er funktioniert nicht. Fehler:
if(TimeN==0)
TimeN=TimeC;
Diese Bedingung gilt nur einmal - bei der ersten Ausführung des Programms. Zu diesem Zeitpunkt wird die statische Variable initialisiert.
Die nachstehende Bedingung ist sinnlos, da die Variable TimeN in Ihrem Code gleich der ewigen Null ist (oder vielmehr dem Datum 1. Januar 1970) und diese ewige Null mit der Variablen TimeC verglichen wird, die dem Zeitpunkt der Eröffnung des aktuellen Balkens entspricht:)
Der von Ihnen angegebene Code führt zu nichts, oder besser gesagt, er funktioniert nicht. Fehler:
Diese Bedingung gilt nur einmal - beim ersten Start des Programms. Zu diesem Zeitpunkt wird die statische Variable initialisiert.
Die nachstehende Bedingung ist sinnlos, da die Variable TimeN in Ihrem Code gleich der ewigen Null sein wird (oder vielmehr dem Datum 1. Januar 1970) und diese ewige Null mit der Variablen TimeC verglichen wird, die der Eröffnungszeit des aktuellen Balkens entspricht):
Jetzt frage ich mich, warum ich es hätte schreiben sollen... in Expert Advisor.
Es stellte sich heraus, dass ich nicht den vollständigen Code angegeben hatte, der richtige Code war
int init()
{
static datetime TimeN=0;
return(INIT_SUCCEEDED);
}
int start()
{
datetime TimeC=iTime(NULL,TF,0);
if(TimeN==0)TimeN=TimeC;
if(TimeN==TimeC) return(0);
TimeN=TimeC;
// Код программы исполняется при появлении нового бара
return(INIT_SUCCEEDED);
}
In diesem Fall funktioniert es doch, oder?
Haben Sie versucht, diesen Code zu kompilieren? Hier liegt ein Fehler vor: Die Variable TimeN wird in OnInit() deklariert, und wenn Sie OnInit() beenden, wird diese Variable zerstört. Deshalb gibt es einen Fehler in der Funktion OnTick()
Karputov Vladimir: Haben Sie versucht, diesen Code zu kompilieren? Hier liegt ein Fehler vor: Die Variable TimeN ist in OnInit() deklariert, und diese Variable wird beim Verlassen von OnInit() zerstört. Daher tritt in der Funktion OnTick() ein Fehler auf
Hier ist der Arbeitscode:
Ich schrieb static datetime TimeN=0; in den Bereich vorintOnInit() - wo externe und andere Variablen deklariert werden.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Hallo 2015.09.17_19:07 GMT+3 .Ich habe die Dimensionen der dynamischen Arrays im EA-Programm festgelegt. Und der Compiler gibt Fehler aus: "Komma erwartet". Und wenn eine Variable im Programmtext vorkommt, gibt -- Warnungen aus: "Variable soundso versteckt Variablendeklaration auf globaler Ebene". Das verstehe ich nicht. Alles scheint korrekt zu sein, wie in der Hilfe. Hier sind einige Codeschnipsel:
//--- Array der maximalen Barpreise
bool ArraySetAsSeries(double &High[],bool);
//---
bool ArraySetAsSeries(double &Low[],bool);
//--- Festlegen der Array-Größen mit Reserve (Reserve)
int ArrayResize(double &mrate[],int 16,int 9);
int ArrayResize(double &maVal[],int 16,int 9);
int ArrayResize(double &fVal[],int 3,int 2);
int ArrayResize(double &zVal[],int 3,int 0);
int ArrayResize(double &High[],int 1,int 0);
int ArrayResize(double &Low[],int 1,int 0);
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Hallo 2015.09.17_19:07 GMT+3 .Ich habe die Dimensionen der dynamischen Arrays im EA-Programm festgelegt. Und der Compiler gibt Fehler aus: "Komma erwartet". Und wenn im Programmtext steht
Wenn Sie meinen Code meinen - dann ja, mein Code prüft auf einen neuen Balken.
Ich bin an dem beigefügten Code interessiert - ich möchte verstehen, was er bewirkt.
Der von Ihnen angegebene Code führt zu nichts, oder besser gesagt, er funktioniert nicht. Fehler:
Diese Bedingung gilt nur einmal - bei der ersten Ausführung des Programms. Zu diesem Zeitpunkt wird die statische Variable initialisiert.
Die nachstehende Bedingung ist sinnlos, da die Variable TimeN in Ihrem Code gleich der ewigen Null ist (oder vielmehr dem Datum 1. Januar 1970) und diese ewige Null mit der Variablen TimeC verglichen wird, die dem Zeitpunkt der Eröffnung des aktuellen Balkens entspricht:)
Der von Ihnen angegebene Code führt zu nichts, oder besser gesagt, er funktioniert nicht. Fehler:
Diese Bedingung gilt nur einmal - beim ersten Start des Programms. Zu diesem Zeitpunkt wird die statische Variable initialisiert.
Die nachstehende Bedingung ist sinnlos, da die Variable TimeN in Ihrem Code gleich der ewigen Null sein wird (oder vielmehr dem Datum 1. Januar 1970) und diese ewige Null mit der Variablen TimeC verglichen wird, die der Eröffnungszeit des aktuellen Balkens entspricht):
Jetzt frage ich mich, warum ich es hätte schreiben sollen... in Expert Advisor.
Danke für die Klarstellung!
Wenn der neue Balken im Zeitrahmen M1 liegt, wird die Meldung gedruckt:
Es stellte sich heraus, dass ich nicht den vollständigen Code angegeben hatte, der richtige war
int init()
{
static datetime TimeN=0;
return(INIT_SUCCEEDED);
}
int start()
{
datetime TimeC=iTime(NULL,TF,0);
if(TimeN==0)TimeN=TimeC;
if(TimeN==TimeC) return(0);
TimeN=TimeC;
// Код программы исполняется при появлении нового бара
return(INIT_SUCCEEDED);
}
Es stellte sich heraus, dass ich nicht den vollständigen Code angegeben hatte, der richtige Code war
int init()
{
static datetime TimeN=0;
return(INIT_SUCCEEDED);
}
int start()
{
datetime TimeC=iTime(NULL,TF,0);
if(TimeN==0)TimeN=TimeC;
if(TimeN==TimeC) return(0);
TimeN=TimeC;
// Код программы исполняется при появлении нового бара
return(INIT_SUCCEEDED);
}
Hier ist der Arbeitscode:
Haben Sie versucht, diesen Code zu kompilieren? Hier liegt ein Fehler vor: Die Variable TimeN ist in OnInit() deklariert, und diese Variable wird beim Verlassen von OnInit() zerstört. Daher tritt in der Funktion OnTick() ein Fehler auf
Hier ist der Arbeitscode:
Ich schrieb static datetime TimeN=0; in den Bereich vorint OnInit() - wo externe und andere Variablen deklariert werden.