Fehler im Code - 'if' - expressions are not allowed on a global scope

Einloggen oder registrieren, um einen Kommentar zu schreiben
Steffen1234
43
Steffen1234  

Mir wird beim Kompilieren eines EA folgender Fehler angezeigt: 'if' - expressions are not allowed on a global scope  

Wie kann ich das reparieren?

viele Grüße

Steffen 

Otto Pauser
970
Otto Pauser  
Steffen1234:

Mir wird beim Kompilieren eines EA folgender Fehler angezeigt: 'if' - expressions are not allowed on a global scope  

Wie kann ich das reparieren?

viele Grüße

Steffen 

Schick den Code und ich zeig es dir.
Steffen1234
43
Steffen1234  
Otto Pauser:
Schick den Code und ich zeig es dir.

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
  
  

bool CheckTime() {
   if (!TimeFilter) return (TRUE);
   int datetime_0 = TimeCurrent();
   if (StrToTimeServer(StartTrading) <= datetime_0 && datetime_0 <= StrToTimeServer(StopTrading)) return (TRUE);
   return (FALSE);
}
  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


'CheckTime' - function can be declared only in the global scope    ForexProfi_v3.55 xxx.mq4    98    6

Das bool CheckTime() stört ihn. Ich soll da was declarieren, hab aber keine Ahnung. Bin noch ziemlich am Anfang. Wäre super, wenn du das hinbekommst.

viele Grüße

Steffen

amando
936
amando  
Steffen1234:

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
  
  

bool CheckTime() {
   if (!TimeFilter) return (TRUE);
   int datetime_0 = TimeCurrent();
   if (StrToTimeServer(StartTrading) <= datetime_0 && datetime_0 <= StrToTimeServer(StopTrading)) return (TRUE);
   return (FALSE);
}
  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


'CheckTime' - function can be declared only in the global scope    ForexProfi_v3.55 xxx.mq4    98    6

Das bool CheckTime() stört ihn. Ich soll da was declarieren, hab aber keine Ahnung. Bin noch ziemlich am Anfang. Wäre super, wenn du das hinbekommst.

viele Grüße

Steffen

Was immer du auch vorhast, für code verwende den editor um code einzufügen, dann ist er auch lesbar.

was soll der code in deinit darstellen?

Steffen1234
43
Steffen1234  
amando:

Was immer du auch vorhast, für code verwende den editor um code einzufügen, dann ist er auch lesbar.

was soll der code in deinit darstellen?

also eigentlich wollte ich den EA zeitlich begrenzen - so ca. 4 Wochen. Danach sollte er sich abschalten. Hast du da evtl. einen fertigen Code?

Danke für deine bisherigen Bemühungen.

amando
936
amando  

Hab nix mehr für mt4.

aber in der deinit sagst du ihm nur was er machen soll wenn er entfernt wird

z.b linien rauslöschen

Otto Pauser
970
Otto Pauser  

In der OnDeinit() geht das definitiv nicht. Die wird ja nur ausgeführt wenn der EA beendet wird.

Das muss in der OnTick() behandelt werden.

Getestet für den MT4 und MT5:

input datetime AbschaltZeit = D'23.12.2018 22:00';     // Abschaltzeit des Experten 

int OnInit()
{
   // diverser Code

   return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
   // diverser Code
}

void OnTick()
{
   if(TimeCurrent()>=AbschaltZeit)
      {
         Alert("Expert wurde "+TimeToString(TimeCurrent())+" abgeschaltet.");
         ExpertRemove();
      }

   // diverser Code
   
}

Grüße

Otto

Carl Schreiber
Moderator
7247
Carl Schreiber  
Steffen1234:

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
  
  

bool CheckTime() {
   if (!TimeFilter) return (TRUE);
   int datetime_0 = TimeCurrent();
   if (StrToTimeServer(StartTrading) <= datetime_0 && datetime_0 <= StrToTimeServer(StopTrading)) return (TRUE);
   return (FALSE);
}
  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


'CheckTime' - function can be declared only in the global scope    ForexProfi_v3.55 xxx.mq4    98    6

Das bool CheckTime() stört ihn. Ich soll da was declarieren, hab aber keine Ahnung. Bin noch ziemlich am Anfang. Wäre super, wenn du das hinbekommst.

viele Grüße

Steffen

"Global scope" heißt außerhalb jeder Klammer und damit das (Funktionen aber auch Variablen) in allen Klammern zur Verfügung steht - verstanden? ;)

Anders gesagt Du kannst keine Funktionen innerhalb anderer Funktionen schreiben.

Dann gibt es Systemfunktionen oder Ereignisfunktionen, die vom System bei einem bestimmten Ereignis aufgerufen werden: Programmstart,  start()=bei einem neuen Tick, Programmende.

Willst Du eine eigene Funktion schreiben musst Du das auf der Ebene dieser Funktionen tun.

Wenn Du einen Endzeitpunkt festlegen willst versuch doch folgendes - ich weiß aber nicht, ob das bei mt4 geht:

extern datetime StopEA = D'2018.11.30 00:01';

Ich glaube Du kriegst damit einen 'Kalender' zur Datumsauswahl, probier's mal.

Abschließender Tipp für alsNeuling auf MT4/5:

Erst suchen! Es gibt fast nix, was nicht schon für Mt4/5 programmiert wurde!
Warum das Rad neu erfinden, wenn es in der CodeBase liegt, bereit zum abkupfern?

Der Code von dort und aus den Artikeln funktioniert in der Regel, man ist dadurch schneller, macht weniger Fehler und kann so manchen Kniff lernen!

Otto Pauser
970
Otto Pauser  

@Calli: wieder einmal perfekt erklärt.

Steffen1234
43
Steffen1234  
Otto Pauser:

@Calli: wieder einmal perfekt erklärt.

Vielen Dank - und schönen Sonntag noch !!!
Einloggen oder registrieren, um einen Kommentar zu schreiben