Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools  
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4443
Beiträge: 40496
Benutzer: 6.833
Aktive Benutzer: 267
Links: 80
Wir begrüßen unseren neuesten Benutzer: viewer
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 4 Stunden
- viewer
vor einem Tag
- burkijan
vor 2 Tagen
- Chidiroglo...
vor 4 Tagen
- JapanTrade...
vor 6 Tagen
- chroma

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 114
Gesamt: 114
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 14.04.20
Mitglied
 
Registriert seit: Dec 2017
Ort: 76891
Beiträge: 120
Angel befindet sich auf einem aufstrebenden Ast
Unhappy #include - Befehl : Wie verwende ich den?

Hallo!
ich möchte in meinem .mq4-Programm eine oft genutzte Funktion in eine externe Datei auslagern. Sagen wir mal beispielhaft (und dass es übersichtlich bleibt) die Berechnung einer EMA mit Timeframe 1 und Periode 20.
Nun schrieb ich eine .mqh-Datei mit Namen "EMAS" :

PHP-Code:

#property strict

double EMA1P20,EMA1P50;

//+------------------------------------------------------------------+
//|          Die ausgelagerte .mqh-Datei "EMAS"                                   |
//+------------------------------------------------------------------+
void EMAS()
  {
   
EMA1P20=NormalizeDouble(iMA(NULL,1,20,0,1,0,0),5);
   
EMA1P50=NormalizeDouble(iMA(NULL,1,50,0,1,0,0),5);   
  } 

Meine .mq4-Datei (Also das Hauptprogramm) sieht so aus:

PHP-Code:
#property strict

enum ENUM_En
  
{
   
EntryEMA1P20=20,EntryEMA1P50=50
  
};
input ENUM_En Entry=20;

double EMA1P20,EMA1P50;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
#include <EMAS.mqh>
   
return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   
EMAS();
   
Comment(" EMA1P20= ",EMA1P20,"  EMA1P50= ",EMA1P50);
  } 

In der .mqh-Datei "EMAS" bekomme ich keine Fehlermeldung.
In der Hauptdatei jedoch umso mehr:

declaration of 'EMA1P20' hides global variable (Bezieht sich auf die .mqh-Datei)
declaration of 'EMA1P50' hides global variable (Bezieht sich auf die .mqh-Datei)
'EMAS' - function declarations are allowed on global, namespace or class scope only
variable 'EMA1P20' not used (Bezieht sich auf die .mqh-Datei)
variable 'EMA1P50' not used (Bezieht sich auf die .mqh-Datei)

Was mache ich denn hier falsch????
__________________
MQL4-Interessiert... und noch gaaaanz am Anfang
Mit Zitat antworten
  #2 (permalink)  
Alt 14.04.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.336
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Code:
#property strict
 
#include <EMAs.mqh>

enum ENUM_En
  {
   EntryEMA1P20=20,EntryEMA1P50=50
  };
input ENUM_En Entry=20;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   EMAS();
   Comment(" EMA1P20= ",EMA1P20,"  EMA1P50= ",EMA1P50);
  }
So sollte schon mal kein Fehler generiert werden.
Die #include Deklaration wird immer global geschrieben und nicht in die Funktionen intergriert.
Und dann musste noch die doppelte Deklaration der Variablen
double EMA1P20,EMA1P50;
entfernt werden, denn die stehen bereits in der mqh-Datei.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #3 (permalink)  
Alt 14.04.20
Mitglied
 
Registriert seit: Dec 2017
Ort: 76891
Beiträge: 120
Angel befindet sich auf einem aufstrebenden Ast
Standard

Ich komme eben erst von der Arbeit, daher kann ich erst jetzt etwas dazu schreiben:

Klasse, traderdoc - es funktioniert !!!

Danke !!!!
__________________
MQL4-Interessiert... und noch gaaaanz am Anfang
Mit Zitat antworten
  #4 (permalink)  
Alt 14.04.20
Mitglied
 
Registriert seit: Dec 2017
Ort: 76891
Beiträge: 120
Angel befindet sich auf einem aufstrebenden Ast
Standard

Mal nebenbei was anderes:

In dem Code ist ja ersichtlich, dass ich aus 2 EMAs eine auswählen möchte. Die Auswahl (!) wird mittels "enum" nummeriert, und später muss sie anhand dieser Nummer einer Variablen zugeordnet werden, die wiederum einer vorher berechneten EMA zugeordnet werden muss.


PHP-Code:
EMA1P20=NormalizeDouble(iMA(NULL,1,20,0,1,0,0),5);
EMA1P50=NormalizeDouble(iMA(NULL,1,50,0,1,0,0),5);

   if(
Entry==20){Ent=EMA1P20;}
   if(
Entry==50){Ent=EMA1P50;} 

Der Code steht nur als Beispiel, was ich meine.

Wenn ich jetzt aber zwischen EMA1P1 und EMA1P100 auswählen können möchte - muss ich dann jede EMA von 1 bis 100 definieren und eine if-Abfrage durchführen? Geht das denn nicht einfacher?
__________________
MQL4-Interessiert... und noch gaaaanz am Anfang
Mit Zitat antworten
  #5 (permalink)  
Alt 14.04.20
AVT AVT ist offline
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 340
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Angel Beitrag anzeigen
Mal nebenbei was anderes:
...
Wenn ich jetzt aber zwischen EMA1P1 und EMA1P100 auswählen können möchte - muss ich dann jede EMA von 1 bis 100 definieren und eine if-Abfrage durchführen? Geht das denn nicht einfacher?
Also ich habe festgestellt, daß man die Variablen-Namen nicht zusammensetzen kann/darf, z.B. EMA1+IntegerToString(Periodennummer) - das geht nicht. Aber die Zuordnungen nachher kannst Du mit switch(Entry) und dann case 20: Ent=EMA1P20; break; } machen. AVT
Mit Zitat antworten
Antwort

Lesezeichen


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +2. Es ist jetzt 22:45 Uhr.





Die Suchmaschine - Der Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2020 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2020 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------