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)
-   -   Long- Signal wenn MAlang<MAmittel<MAkurz (http://www.expert-advisor.com/forum/showthread.php?t=5363)

TTFM2016 31.12.16 01:59

Long- Signal wenn MAlang<MAmittel<MAkurz
 
Hi, seit einer Woche bin ich auf den Geschmack des EA gekommen. Im Moment stoße ich mit meinem durch Youtube angeeigneten Wissen allerdings an meine Grenzen. Mein EA soll unter anderem ein Kauf Signal generieren, wenn der MA 100 unter dem MA 50 und dieser wiederum unter dem MA 20 liegt (Stundenbasis im Dax). Außerdem sollen alle drei MA's nach oben zeigen, also aufsteigen, bevor gekauft wird.
Der Code sieht im Moment so aus:

if(MAlang<MAmittel<MAkurz && MAlangVorperiode<MAlang && MAmittelVorperiode<MAmittel && MAkurzVorperiode<MAkurz)
{
LongSignal = true;
}
else LongSignal = false;

Wo ist der Fehler? Leider funktioniert die Abfrage nicht.

MA-EA 31.12.16 02:19

Lad mal das ganze Teil hoch. Gibts wahrscheinlich eh haufenweise gratis im Web.

Was im Einzelnen funkt denn nicht?

Hatten wir nicht schon mal so ne Frage hier? :confused:

Edit: Und muss nicht nach jedem Vergleich von 2 MAs nen && rein?

TTFM2016 31.12.16 17:09

Hi, das war schon der Tip den ich brauchte.:D Nach zwei MA Abfragen muss ein && und dann kommt die nächste Abfrage, das ganze in einer Klammer..

Vielen Dank schonmal

Werde in den nächsten Tagen mal den Code reinstellen, sind noch ein paar andere Baustellen, die noch nicht so funktionieren. Jetzt ist erstmal Sylvester, also einen guten Rutsch Euch allen!!

TTFM2016 02.01.17 12:17

Hier die nächste Baustelle, es geht um die SL, TP bzw. OrderClose.

Ist die Order jünger als 1 Tag, soll die Order geschlossen werden, sobald der Kurs <=, bzw. >= (longorder,bzw.shortorder) des kurzen MA ist.

Ist die Order älter als 1 Tag und jünger als 3 Tage, soll die Order geschlossen werden, sobald der Kurs <=, bzw. >= (longorder,bzw.shortorder) des mittleren MA ist.

Ist die ORder älter als 3 Tage, soll die Order geschlossen werden, sobald der Kurs <=, bzw. >= (longorder,bzw.shortorder) des langen MA ist.

So wie ich es programmiert habe, funktioniert es auch, solange die Order nicht über das Wochenende gehalten wird. Wird z.B. eine Order am Freitag geöffnet, ist der SL/TP am Montag schon beim langen MA, da mehr als 3 Tage vergangen sind. Ich möchte es aber so programmieren, dass nur die Handelstage abgefragt werden. Ist das möglich? Hier der Code:

//SL/TP MA's
MAkurz_SL_TP = iMA (NULL,0,MA_kurz,0,MODE_SMA,0,1);
MAmittel_SL_TP = iMA (NULL,0,MA_mittel,0,MODE_SMA,0,1);
MAlang_SL_TP = iMA (NULL,0,MA_lang,0,MODE_EMA,0,1);

extern int Ab_x_Tage_MAmittel_als_SL_davor_MAkurz = 1;
extern int Ab_x_Tage_MAlang_als_SL_davor_MAmittel = 3;

//Berechnung SL/TP- Tage
int SL_TP_Tage_Makurz = Ab_x_Tage_MAmittel_als_SL_davor_MAkurz * 86400;
int SL_TP_Tage_Mamittel = Ab_x_Tage_MAlang_als_SL_davor_MAmittel * 86400;

//OrderClose Long Order setzen
if(OrderSelect(LongOrder,SELECT_BY_TICKET)==true)
{
if(OrderCloseTime()==0) //OrderCloseTime 0 = Order ist noch aktiv
{
if(TimeLocal()-OrderOpenTime()<SL_TP_Tage_Makurz) //Order ist jünger als 1 Tag SL = MAkurz
{
if(MAkurz_SL_TP>=Bid)
{
OrderClose(OrderTicket(),TradeLots,Bid,5,Red);
}
}
if(TimeLocal()-OrderOpenTime()>=SL_TP_Tage_Makurz&&TimeLocal()-OrderOpenTime()<SL_TP_Tage_Mamittel) //Order ist älter als 1 Tag und jünger als 3 Tage SL = MAmittel
{
if(MAmittel_SL_TP>=Bid)
{
OrderClose(OrderTicket(),TradeLots,Bid,5,Red);
}
}
if(TimeLocal()-OrderOpenTime()>=SL_TP_Tage_Mamittel) //Order ist älter als 3 Tage SL = MAlang
{
if(MAlang_SL_TP>=Bid)
{
OrderClose(OrderTicket(),TradeLots,Bid,5,Red);
}
}
}
}

Gibt es eigentlich einen Nachteil dadurch, dass ich keinen TP, bzw. SL setze, sondern nur mit OrderClose arbeite?

TTFM2016 03.01.17 15:54

Hat keiner ne Idee? Die Abfrage müsste in etwa so aussehen: if Order älter als x Handelstage dann...
Wäre echt super, wenns da was geben würde. Hab in der MQL4 Dokumentation nichts gefunden.

Weil ich bis jetzt nicht weiß, wie ich lediglich die Handelstage abfrage, hab ich versucht es so zu programmieren, dass der Wechsel zwischen den MA's als OrderClose einfach 2 Tage nach hinten versetzt wird, sobald Sonntag ist. Aber es klappt so leider auch nicht..

extern int Ab_x_Tage_MAmittel_als_SL_davor_MAkurz = 1;
extern int Ab_x_Tage_MAlang_als_SL_davor_MAmittel = 3;

int SL_TP_Tage_Makurz,SL_TP_Tage_Mamittel,ZaehlerWoche nende;


int OnInit()
{
//---
ZaehlerWochenende=0;

//---
return(INIT_SUCCEEDED);
}

void OnTick()
{
if(DayOfWeek()==0&&ZaehlerWochenende==0&&(LongOrde r==true||ShortOrder==true))
{
SL_TP_Tage_Makurz = Ab_x_Tage_MAmittel_als_SL_davor_MAkurz * 86400 + (86400*2);
SL_TP_Tage_Mamittel = Ab_x_Tage_MAlang_als_SL_davor_MAmittel * 86400 + (86400*2);
ZaehlerWochenende + 1;
}

if(LongOrder==false&&ShortOrder==false)
{
SL_TP_Tage_Makurz = Ab_x_Tage_MAmittel_als_SL_davor_MAkurz * 86400;
SL_TP_Tage_Mamittel = Ab_x_Tage_MAlang_als_SL_davor_MAmittel * 86400;
ZaehlerWochenende = 0;
}
}

MA-EA 03.01.17 19:07

Vielleicht abfragen wann die Order geöffnet wurde. Dann aktuelle Zeit abfragen. Dann Letztere - Öffnungszeit. Oder so in der Art. :confused:

TTFM2016 03.01.17 21:53

Hab das hier bei google gefunden:

int AlterLongOrder = iBarShift(Symbol(),60, OrderOpenTime());

und es funktioniert:D.

Es werden die Kerzen im Stundenchart ab OrderOpenTime gezählt und als int ausgegeben. Damit kann man ja dann rechnen:D


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:08 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