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: 43248
Benutzer: 7.219
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Hopfen&Malz
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107
vor 2 Wochen
- rg-trader

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

Empfehlungen

Like Tree2Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #21 (permalink)  
Alt 25.04.16
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 157
piptrade befindet sich auf einem aufstrebenden Ast
Standard

Ohhhhhh..., das ist die absolute Spitze - riesigen Dank dafür !!!

Das baut endlich `mal wieder auf und ist für heute der schönste Abschluss.

Also nochmals recht, recht herzlichen Dank und

ganz liebe Grüße (vom glücklichen) piptrade

PS.: Werde das "Teil" morgen nochmals unter "die Lupe nehmen" und versuchen, jedes einzelne Detail nachzuvollziehen. Melde mich dann wieder.
  #22 (permalink)  
Alt 26.04.16
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 157
piptrade befindet sich auf einem aufstrebenden Ast
Standard

Mein kleiner, erster EA ist so ausgelegt, dass er bestimmte Signale (vorerst nur cross MA`s) generiert.
Gleichzeitig wird hier eine "PeriodenStartZeit" abgefragt:

int init() {
//---
PeriodenStartZeit = Time[0];

return(0);
}


Belasse ich diese Abfrage so bestehen, funktionieren alle Signale, wie es sein sollte.

1. Integriere ich jetzt den ZeitZonenFilter, der ja "void init()" beinhaltet, wird nach dem Kompellieren das
"return(0)" der "PeriodenStartZeit" als "error" ermittelt. (Eine leere Funktion gibt einen Wert zurück)

2. Deaktiviere ich diese PeriodenStartzeit-Abfrage, werden mir keine Signale mehr angezeigt, - und ich kann ein
Funktionieren der ZeitZonen nicht mehr kontrollieren !

und 3. Versuche ich beide Komponenten unter unter "void init()" zu integrieren wird das obige "return(0)" wieder
moniert, integriere ich beides unter "int init()" - habe ich zwar keine "errors" mehr - gleichzeitig wird damit
aber das Funktionieren des ZeitFilters ausgeschlossen !

Wat Nu ?

Mittlerweile habe ich zwar sehr viel dazugelernt - Dank Eurer Hile - dennoch bin ich nicht so weit, eine
eigenständige Lösung zu finden. Wie kann ich den o.a. Widerspruch auflösen? Gibt es für den ZeitZonenFilter
ggf. eine Möglichkeit auf das "void init()" zu verzichten und hier statt dessen "int init()" zu integrieren ? Oder würde eine Negation in der Abfrage der "PeriodenStartZeit" etwas bringen ?

LG. piptrade
  #23 (permalink)  
Alt 27.04.16
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 157
piptrade befindet sich auf einem aufstrebenden Ast
Standard

Da ich nunmehr am vorliegenden Timer möglichst nichts oder aber nur das Geringste ändern wollte, habe ich einfach das "Grundgerüst" meines kleinen EA "umgestrickt", dann eine einzige, kleine Änderung im Timer vorgenommen - und siehe da ! - es scheint tatsächlich zu funktionieren !!!
Zumindest liefen die ersten Tests absolut optimal und auf die Minute genau !

Während weiterer, vorerst abschließender Tests, sind in das "Grundgerüst" noch MoneyManagement einzufügen sowie Entry- und Exit-Bedingungen zu verändern.
Hier bin ich aber recht zuversichtlich.

Vorerst ganz LG. an alle "Helferlein" - DANKE!
piptrade

PS.:
1. Ein endgültiges Statement kann ich vielleicht schon morgen geben.
2. Im Bereich Grafikdesign könnte ich ggf. vielleicht auch traderdoc oder Top-SecreT unterstützen. An diese beiden "Mitstreiter" aber so, wie so, ein ganz "dickes" Lob und nochmals Danke.
  #24 (permalink)  
Alt 28.04.16
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 157
piptrade befindet sich auf einem aufstrebenden Ast
Standard

Glückseeligkeit und Hoffnung und die Zuversicht, dass nun alles passt - und dann doch der nächste "Nackenschlag" und die Gewissheit, dass es - SO - nicht geht !!!
24h - ein Test nach dem anderen - mit allen möglichen Varianten - und dennoch kein positives Resultat ! Fackt ist, irgend etwas stimmt hier nicht !
Wie kann ich den "tollen" Code von traderdoc integrieren ? Was ist mit der Anweisung:

int start()
{
if(TradingTime() == false) return(0);
}

Hier entstehen ständig errors ! - egal, an welcher Stelle im PRG integriert.

Ich zahle gern ein kleines Honorar für die Fertigstellung dieses Timers ! - und würde mich über ein entsprechendes Angebot freuen.

MfG. piptrade
  #25 (permalink)  
Alt 29.04.16
Mitglied
 
Registriert seit: Apr 2016
Beiträge: 45
Top-SecreT befindet sich auf einem aufstrebenden Ast
Standard

Na schreib doch wenigstens mal welche errors. Würde doch schon mal weiterhelfen statt einfach nur rumzuraten.
  #26 (permalink)  
Alt 29.04.16
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 157
piptrade befindet sich auf einem aufstrebenden Ast
Standard

Neben vielen weiteren Varianten sieht das ganze "Dingeling" jetzt - SO - aus:

MAsimple_TIMER_00c.mq4

#define MAGICMA 20131111
//--- Inputs
input double Lots =0.1;
input int MovingPeriod =12;
input int MovingShift =6;

//|=== 1. ERGÄNZUNG Timer ================================================== =====+
extern string TradeTime_1_Begin = "09:30";
extern string TradeTime_1_End = "11:30";
extern string TradeTime_2_Begin = "15:50";
extern string TradeTime_2_End = "17:30";
//+------------------------------------------
datetime Time_1_Begin, Time_1_End;
datetime Time_2_Begin, Time_2_End;
//+------------------------------------------
void init() {
Time_1_Begin = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TradeTime_1_Begin);
Time_1_End = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TradeTime_1_End);
Time_2_Begin = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TradeTime_2_Begin);
Time_2_End = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TradeTime_2_End);
}
//+------------------------------------------
bool TradingTime() {
if ((Time_1_Begin < Time_1_End && (TimeCurrent() < Time_1_Begin || TimeCurrent() >= Time_1_End)) ||
(Time_2_Begin < Time_2_End && (TimeCurrent() < Time_2_Begin || TimeCurrent() >= Time_2_End)))
return(false);

return(true);
}
//|=== 2. ERGÄNZUNG Timer ================================================== ======+
int start() {
if (TradingTime() == false) return(0);

} // warning: not all control paths return a value ! <-------------------------+

//+------------------------------------------------------------------+
//| Calculate open positions |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
... and so on
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void CheckForOpen()
... and so on
//+------------------------------------------------------------------+
//| Check for close order conditions |
//+------------------------------------------------------------------+
void CheckForClose()
... and so on
//+------------------------------------------------------------------+
//| OnTick function |
//+------------------------------------------------------------------+
void OnTick() {
//--- check for history and trading
if(Bars<100 || IsTradeAllowed()==false)
return;
//--- calculate open orders by current symbol
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();
//---
}
//+------------------------------------------------------------------+


Alle Order werden ausgelöst und auch sauber wieder geschlossen, aber nach wie vor ohne jeglichen Time-Bezug.
Sicher wird jetzt ein Schmunzeln über Eure Lippen gehen - und viele werden sich fragen: "Wie kann man nur solche Fehler machen?" Dennoch:
Bisher habe ich gerade aus meinen Fehlern gelernt. Deshalb nehme ich gern dieses Schmunzeln in Kauf und hoffe auf Eure Unterstützung.

LG. piptrade
  #27 (permalink)  
Alt 29.04.16
Mitglied
 
Registriert seit: Apr 2016
Beiträge: 45
Top-SecreT befindet sich auf einem aufstrebenden Ast
Standard

An welcher Stelle wird denn start() ausgeführt?

Und der error kommt weil du bei start() nicht in jedem Fall einen int zurückgibst.
Da fehlt ein return 1 wenn TradingTime() true liefert.
  #28 (permalink)  
Alt 29.04.16
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 157
piptrade befindet sich auf einem aufstrebenden Ast
Standard

Bevor ich die Fragen möglichst präzise beantworte, hier erst noch einmal eine zweite Variante des EA mit Zuordnung des Timers:

//+--- globale externe Variable -----------------------+
extern int MA_lang = 20;
extern int MA_kurz = 5;
extern double HandelsLots = 0.1;
extern double SL_prozent = 0.15;
extern double TP_prozent = 0.1;
extern int MagicNumber = 12345;
//+--- interne Variable -------------------------------+
datetime PeriodenStartZeit;
bool NeuePeriodeBegonnen,LongSignal,ShortSignal;
int LongOrder,ShortOrder,OrderStoppLoss;

//|=== 1. ERGÄNZUNG Timer ===========================================+
extern string TradeTime_1_Begin = "09:30";
extern string TradeTime_1_End = "11:30";
extern string TradeTime_2_Begin = "15:50";
extern string TradeTime_2_End = "17:30";
//+------------------------------------------
datetime Time_1_Begin, Time_1_End;
datetime Time_2_Begin, Time_2_End;
//+------------------------------------------
void init() {
Time_1_Begin = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TradeTime_1_Begin);
Time_1_End = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TradeTime_1_End);
Time_2_Begin = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TradeTime_2_Begin);
Time_2_End = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TradeTime_2_End);
}
//+------------------------------------------
int CurrentTime;

bool TradingTime() {
CurrentTime = TimeHour(TimeCurrent());
if ((Time_1_Begin < Time_1_End && (CurrentTime < Time_1_Begin || CurrentTime >= Time_1_End)) ||
(Time_2_Begin < End_Time_2 && (CurrentTime < Time_2_Begin || CurrentTime >= Time_2_End)))
return(false);

return(true);
}
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int init() {
PeriodenStartZeit = Time[0];
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
void deinit() {

// return(0); // warning: -------> 'void' function returns a value <---------------+
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {

//|=== 2. ERGÄNZUNG Timer ===========================================+
if (TradingTime() == false) return(0);
//|================================================= ============+
//--- Überprüfen, ob neuer Periodenbeginn vorliegt
if(PeriodenStartZeit != Time[0]) {
NeuePeriodeBegonnen = true;
}
else NeuePeriodeBegonnen = false;

//--- Marktdaten ermitteln .........

//--- Handelssignale ermitteln
if(NeuePeriodeBegonnen == true) {
//--- Bedingung für Buy-Signal
if(MAkurz > MAlang && MAkurzVorperiode <= MAlangVorperiode) {
LongSignal = true;
}
else LongSignal = false;
//--- Bedingung für Sell-Signal
if(MAkurz < MAlang && MAkurzVorperiode >= MAlangVorperiode) {
ShortSignal = true;
}
else ShortSignal = false;
}
else {
LongSignal = false;
ShortSignal = false;
}
//+--------------------------------------------------+
//----> Long Signale umsetzen
if (LongSignal == true) .........
//----> Short Signale umsetzen
if (ShortSignal == true) .........

//SL für Long Deals setzen
//SL für Short Deals setzen
//TP für Long Deals setzen
//TP für Short Deals setzen
//+---------------------------------------------------+
//Ticketnummer nach Closing auf 0 zurücksetzen
//+---------------------------------------------------+


Es wäre zu schön, wenn wir in der obigen oder in der hier dargestellten Version eine Timer-Lösung finden würden.
So, jetzt werde ich versuchen, die gestellten Fragen zu verstehen - und so schnell wie möglich zu beantworten.

LG.
  #29 (permalink)  
Alt 29.04.16
Mitglied
 
Registriert seit: Apr 2016
Beiträge: 45
Top-SecreT befindet sich auf einem aufstrebenden Ast
Standard

Hä ich seh nicht durch.
Wieso denn start()? Hast du das selber geschrieben?
Muss die Funktion nicht heißen OnTick()?
  #30 (permalink)  
Alt 29.04.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Die Struktur eines EAs sieht wie folgt aus:

int OnInit()
...
void OnDeinit()
...
void OnTick()

Man aber auch viele grobe Fehler vermeiden, wenn man mal das Handbuch zu Rate zieht.
Und bitte, den Code mittel Button # über dem Textfeld eingeben. Das kann doch keiner auf Dauer lesen.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Thema geschlossen

Lesezeichen

Stichworte
mql4, programmierung, programmierung metatrader, timezone, tradezone, tradingtimezone, zeitzone, zeitzonen

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 19:53 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.
-----------------------------------------------------------------------------------------------------------------------------