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: 4973
Beiträge: 43282
Benutzer: 7.220
Aktive Benutzer: 82
Links: 84
Wir begrüßen unseren neuesten Benutzer: JosephTK
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 48 Minuten
- JosephTK
vor 2 Tagen
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 14.04.20
Mitglied
 
Registriert seit: Dec 2017
Ort: 76891
Beiträge: 126
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
  #2 (permalink)  
Alt 14.04.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
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.
  #3 (permalink)  
Alt 14.04.20
Mitglied
 
Registriert seit: Dec 2017
Ort: 76891
Beiträge: 126
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
  #4 (permalink)  
Alt 14.04.20
Mitglied
 
Registriert seit: Dec 2017
Ort: 76891
Beiträge: 126
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
  #5 (permalink)  
Alt 14.04.20
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
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
Thema geschlossen

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 +1. Es ist jetzt 22:50 Uhr.





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