Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Klappt das so? (http://www.expert-advisor.com/forum/showthread.php?t=5485)

TTFM2016 17.02.17 18:45

Klappt das so?
 
Hi, mir geht es um die erste Zeile. Der EA (noch lange nicht fertig;D) soll später mal die Eröffnung des Dax traden.

if(TimeCurrent()>=StrToTime("9:00") && TimeCurrent()<StrToTime("10:00") && iHigh(NULL,60,1) < Bid)
{
LongSignal = true;
}
else LongSignal = false;

Ist die Uhrzeitabfrage so richtig implementiert oder fehlt noch was?

traderdoc 17.02.17 19:20

Das ist korrekt!

Sofern iHigh(NULL,60,1) < Bid true ist, liegt aber dann in der Stunde zwischen 09:00 und 10:00 evtl. permanent ein LongSignal an. Nicht dass das dann zu mehreren Öffnungen von Orders führt.

traderdoc

TTFM2016 17.02.17 19:31

Ja, da hab ich grad dran gearbeitet, sieht jetzt so aus:

int OnInit()
{
//---
PeriodenStartZeit = Time[0];
Tag = TimeDay();
TradeOK = true;
NeuerTag = false;
//---
return(INIT_SUCCEEDED);
}

void OnTick()
{

//Überprüfen ob neuer Periodenbeginn vorliegt
if(PeriodenStartZeit != Time[0])
{
NeuePeriodeBegonnen = true;
PeriodenStartZeit = Time[0];
}
else NeuePeriodeBegonnen = false;

//Überprüfen ob neuer Tag vorliegt
if (Tag != TimeDay())
{
NeuerTag = true;
Tag = TimeDay();
}

//Nur 1 Trade pro Tag
if (LongOrder >= 1 || ShortOrder >= 1 && TradeOK == true)
{
TradeOK = false;
}

if (TradeOK == false && NeuerTag == true)
{
TradeOK = true;
}



//Handelssignale ermitteln
if(NeuePeriodeBegonnen == true) //In einer "if" Klause müssen 2 gleichzeichen gesetzt werden um eine Abfrage zu starten
{
//Buy Signal
if(TradeOK == true && TimeCurrent()>=StrToTime("9:00") && TimeCurrent()<StrToTime("10:00") && iHigh(NULL,60,1) < Bid)
{
LongSignal = true;
}
else LongSignal = false;
}


Auch OK??

traderdoc 17.02.17 20:26

Das geht bedeutend kürzer, jedoch bereits mit der OrderSend()-Funktion ausgestattet:

Code:

bool Trade;
int Tag;

int OnInit() {
  Trade = false;
  Tag = TimeDay();
  return(INIT_SUCCEEDED);
}

void OnTick() {
  //Überprüfen ob neuer Tag vorliegt
  if (Tag != TimeDay()) {
      Trade = false;
      Tag = TimeDay();
  }

  //Handelssignale ermitteln
  //Buy Signal
  LongSignal = false;
  if(!Trade && TimeCurrent()>=StrToTime("9:00") && TimeCurrent()<StrToTime("10:00") && iHigh(NULL,60,1) < Bid)  SendOrder(1);
}

void SendOrder(int dir) {
  int ticket;
  ...
  if (dir == 1) {  //BuyOrder
      ticket = OrderSend(....);
      ...
  }
  if (dir == -1) {  //SellOrder
      ticket = OrderSend(....);
      ...
  }
  if (ticket > 0) Trade = true;
}

traderdoc

TTFM2016 17.02.17 20:39

Ist "!Trade" das gleiche wie "Trade = false" ?

traderdoc 17.02.17 20:45

Ja, das kann man damit abkürzen:

!Trade entspricht false
Trade entspricht true

traderdoc

TTFM2016 17.02.17 21:24

Ok, dank dir. Werde mich mal weiter durcharbeiten..

TTFM2016 17.02.17 21:57

Bekomme jetzt den Fehler "TimeDay - wrong parameters count". Ne Idee, was da nicht stimmt?

traderdoc 17.02.17 22:24

Da haben wir was vergessen. Überall wo TimeDay() steht,
muss stehen:

TimeDay(TimeCurrent());

traderdoc

TTFM2016 18.02.17 09:28

Ok, aber ändert sich TimeDay dann nicht sekündlich?

Ich hab das ganze gestern noch mit DayOfWeek() probiert und es hat funktioniert. Sollte ich es trotzdem noch abändern?


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:05 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum