Autor Thema: MQL4 Hilfe  (Gelesen 2393 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

  • Fingerwundtipper
  • ****
    • Beiträge: 322
    • Karma: +79/-0
    • Mitglied seit:
      07 Sep 2009

  • Building Blaster Airhockey Canyon Shooter Stop The Bus DogBalloooon
    Miami Shark Beat The Meter Powerpool 2
  • Stop
MQL4 Hilfe
« am: Juli 14, 2011, 16:23:27 pm »
Hallo liebe MQL-Könner,

ich will langsam versuchen mit MQL4 Ideen umzusetzen. Als Basis dafür fehlt mir ein ganz wichtiger Codebereich und zwar die Möglichkeit, dass Bedingungen hintereinander (nicht nur gleichzeitig) einen Trade auslösen.

dazu hatte traderdoc mal dies hier geschrieben:

Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen
dann muß sich der EA halt die vorherigen Bedingungen als bereits erfüllt "merken", z.B. als bool-Variable, d.h. sobald eine Bedingung erfüllt ist, wird diese bool-Vavriable auf true gesetzt, dann bei Erreichen die nächste und wenn alle irgendwann erreicht wurden, wird der Trade ausgelöst und alle bool-Variablen wieder auf false gesetzt und das Spiel beginnt von vorn (oder erst wenn der offene Trade wieder geschlossen wurde)


also ein Beispiel nach diesem Prinzip:

1. Die Bedingung von Indikator1 wird erfüllt
2. Bool-Variable wird auf true gesetzt  (welcher Code kommt hierhin?)
3. Die Bedingung von Indikator2 wird erfüllt
4. Trade wird dadurch geöffnet
5. Trade wird dann durch irgendeine Bedingung wieder geschlossen
6. Bool-Variable(n) werden auf false gesetzt (welcher Code kommt hierhin?)

beste Grüße

« Letzte Änderung: Juli 14, 2011, 16:28:46 pm von Sasch »
Von nichts kommt nichts

Forexfabrik

MQL4 Hilfe
« am: Juli 14, 2011, 16:23:27 pm »

  • Global Moderator
  • Ist Forum süchtig
  • *
  • *
    • Beiträge: 1502
    • Karma: +733/-4
    • Mitglied seit:
      14 Jul 2008
  • Broker: IBFX AU, IBFX US

  • Stop
Re: MQL4 Hilfe
« Antwort #1 am: Juli 14, 2011, 16:28:09 pm »
Code: Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen
void init()
{
bool Indi1 = false;
}


void start()
{
 if (Indikator1 == Signal)
 {
      bool Indi1 = true;
 }


 if (Indiaktor2 == Signal && Indi1 == true)
 {
     OpenTrade;
     Indi1 = false;
 }
}


so in etwa könnte der pseudocode aussehen.
Copyright © 2008-2012
Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen

  • Gelegenheitsschreiber
  • *
    • Beiträge: 36
    • Karma: +3/-0
    • Mitglied seit:
      03 May 2009

  • Stop
Re: MQL4 Hilfe
« Antwort #2 am: Juli 15, 2011, 01:07:21 am »
Hi Sasch,

also unter der Vorraussetzung, dass die Bedingungen nicht mehrfach in einem Durchlauf(!) des EAs abgefragt werden sollen, spricht eigentlich nichts dagegen, Bedingungen zu verschachteln. Also:
Code: Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen
if(cond1)
{
   if(cond2)
   {
      if(cond3)
      {
            // öffne Trade
      }
   }
}

Anders sieht es natürlich aus, wenn die Bedingungen mehrfach abgefragt und daraus dann verschiedene Aktionen folgen sollen - dann macht das "Merken" des aktuellen Zustandes durch das Setzen eines Bools schon Sinn...

  • Fingerwundtipper
  • ****
    • Beiträge: 322
    • Karma: +79/-0
    • Mitglied seit:
      07 Sep 2009

  • Building Blaster Airhockey Canyon Shooter Stop The Bus DogBalloooon
    Miami Shark Beat The Meter Powerpool 2
  • Stop
Re: MQL4 Hilfe
« Antwort #3 am: August 16, 2011, 01:16:00 am »
So ich hatte viel zu tun aber jetzt hab ich mich mal an die Sache rangemacht. Danke schon mal für die 2 Lösungswege. Leider bin ich durch mangelnde MQL-Kenntnisse nicht weit gekommen. Ich habe versucht ein bestehenden Test-EA so umzubauen, dass es wie beschrieben funktioniert aber es hat mit Bool sowie mit Verschachtelung überhaupt nicht hingehauen.
Anbei ist der EA-Code (der EA ist als Strategie bitte zu ignorieren). Der EA öffnet momentan eine Buy-Order wenn "Stochastik < 20" und "Kurs > MA". Die Bedingungen sollen aber hintereinander und nicht gleichzeitig den Trade auslösen. Wie müsste der EA dann verändert werden? Die Bool-Variante wäre natürlich besonders interessant wenn hier die Bedingungen mehrfach abgefragt werden können. Dafür sieht die Verschachtelung unkomplizierter aus und würde für den Anfang reichen. Könnte man es auch so hinbekommen, dass dieses void-Schema, wo sozusagen immer weitergereicht wird, weitestgehend erhalten bleibt also dass die ganze Sache dann Modular ist und man evt nur Teile dazufügt...?

beste Grüße


Code: Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen

#property copyright "123"
#property link      ""

#include <stdlib.mqh>
#include <WinUser32.mqh>


extern double BuyLots4 = 0.01;
extern int BuyStoploss4 = 20;
extern int BuyTakeprofit4 = 20;


double PipValue=1;
bool Terminated = false;
string LF = "\n";
int NDigits = 4;
int ObjCount = 0;
int current = 0;


int init()
{
    NDigits = Digits;
   
    if (false) ObjectsDeleteAll();
   
   
    Comment("");
}

int start()
{
    if (Bars < 10)
    {
        Comment("Not enough bars");
        return (0);
    }
    if (Terminated == true)
    {
        Comment("EA Terminated.");
        return (0);
    }
   
    OnEveryTick1();
   
}

void OnEveryTick1()
{
    if (true == false && false) PipValue = 10;
    if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;
   
    indikator1();
   
}

void indikator1()
{
    if (iStochastic(NULL, NULL,5,3,3,MODE_SMA,0,MODE_MAIN,0) < 20)
    {
        indikator2();
       
    }
}

void indikator2()
{
    if (Close[0] > iMA(NULL, NULL,14,0,0,0,0))
    {
        IfOrderDoesNotExist();
       
    }
}

void IfOrderDoesNotExist()
{
    bool exists = false;
    for (int i=OrdersTotal()-1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
        if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
        {
            exists = true;
        }
    }
    else
    {
        Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
    }
   
    if (exists == false)
    {
        BuyOrder();
       
    }
}

void BuyOrder()
{
    double SL = Ask - BuyStoploss4*PipValue*Point;
    if (BuyStoploss4 == 0) SL = 0;
    double TP = Ask + BuyTakeprofit4*PipValue*Point;
    if (BuyTakeprofit4 == 0) TP = 0;
    int ticket = -1;
    if (true)
    ticket = OrderSend(Symbol(), OP_BUY, BuyLots4, Ask, 4, 0, 0, "My Expert", 1, 0, Blue);
    else
    ticket = OrderSend(Symbol(), OP_BUY, BuyLots4, Ask, 4, SL, TP, "My Expert", 1, 0, Blue);
    if (ticket > -1)
    {
        if (true)
        {
            OrderSelect(ticket, SELECT_BY_TICKET);
            bool ret = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Blue);
            if (ret == false)
            Print("OrderModify() error - ", ErrorDescription(GetLastError()));
        }
           
    }
    else
    {
        Print("OrderSend() error - ", ErrorDescription(GetLastError()));
    }
}



int deinit()
{
    if (false) ObjectsDeleteAll();
   
   
}
Von nichts kommt nichts

  • Global Moderator
  • Ist Forum süchtig
  • *
  • *
  • *
    • Beiträge: 1718
    • Karma: +422/-6
    • Mitglied seit:
      11 Aug 2009
  • Broker: IGMarkets

  • Mars Defense Car Chaos Get Groovy BallsPC Motorrad-Trauma
    Bloons Tower Defense
  • Stop
Re: MQL4 Hilfe
« Antwort #4 am: August 16, 2011, 07:40:38 am »
Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen
Code: Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen
    if (true == false && false) PipValue = 10;
    if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;
Häää ^^?

Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen
Code: Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen
void OnEveryTick1()
{
  if (iStochastic(Symbol(), Period(),5,3,3,MODE_SMA,0,MODE_MAIN,0) >= 20) return;
  if (Close[0] <= iMA(Symbol(), Period(),14,0,0,0,0)) return;
  IfOrderDoesNotExist();
}
Müsste doch so gehen, oder? Was kommt denn für ein Fehler bei dir?
Chleudere den Purchen zu Poden!

  • Global Moderator
  • Ist Forum süchtig
  • *
  • *
  • *
    • Beiträge: 1718
    • Karma: +422/-6
    • Mitglied seit:
      11 Aug 2009
  • Broker: IGMarkets

  • Mars Defense Car Chaos Get Groovy BallsPC Motorrad-Trauma
    Bloons Tower Defense
  • Stop
Re: MQL4 Hilfe
« Antwort #5 am: August 16, 2011, 07:42:29 am »
Ok, habe gerade den Anfang nochmal gelesen.... du willst also, dass der STOC schon einige Candle VORHER gilt und dann beim EMA-Cross ein Trade eingegangen wird? Oder wie?
Chleudere den Purchen zu Poden!

  • Fingerwundtipper
  • ****
    • Beiträge: 322
    • Karma: +79/-0
    • Mitglied seit:
      07 Sep 2009

  • Building Blaster Airhockey Canyon Shooter Stop The Bus DogBalloooon
    Miami Shark Beat The Meter Powerpool 2
  • Stop
Re: MQL4 Hilfe
« Antwort #6 am: August 16, 2011, 10:47:46 am »
Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen
Ok, habe gerade den Anfang nochmal gelesen.... du willst also, dass der STOC schon einige Candle VORHER gilt und dann beim EMA-Cross ein Trade eingegangen wird? Oder wie?

Ja genau. Die Bedingung der Stoc wird erfüllt und danach soll die MA-Bedingung den Trade auslösen auch wenn die Stoc-Bedingung zu dem Zeitpunkt nicht mehr besteht
Von nichts kommt nichts

  • Global Moderator
  • Ist Forum süchtig
  • *
  • *
  • *
    • Beiträge: 1718
    • Karma: +422/-6
    • Mitglied seit:
      11 Aug 2009
  • Broker: IGMarkets

  • Mars Defense Car Chaos Get Groovy BallsPC Motorrad-Trauma
    Bloons Tower Defense
  • Stop
Re: MQL4 Hilfe
« Antwort #7 am: August 16, 2011, 11:12:22 am »
Dann würde ich nur auf MA-Cross prüfen und für die letzten x Candles schauen, ob der STOC mal gültig war...

Code: Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen
void OnEveryTick1()
{
  if (Close[0] <= iMA(Symbol(), Period(),14,0,0,0,0)) return;
  bool result = false; 
  for (int i=0; i<[...];i++)
  {
    result = result || (iStochastic(Symbol(), Period(),5,3,3,MODE_SMA,0,MODE_MAIN,i) < 20)
  } 

  if result IfOrderDoesNotExist();
}
Chleudere den Purchen zu Poden!

  • Fingerwundtipper
  • ****
    • Beiträge: 322
    • Karma: +79/-0
    • Mitglied seit:
      07 Sep 2009

  • Building Blaster Airhockey Canyon Shooter Stop The Bus DogBalloooon
    Miami Shark Beat The Meter Powerpool 2
  • Stop
Re: MQL4 Hilfe
« Antwort #8 am: August 16, 2011, 12:51:33 pm »
Ich habs jetzt mal so eingefügt bzw ersetzt und beim [...] mal 20 reingeschrieben (wenn ich das richtig interpretiert hab ist das der platzhalter für die anzahl der letzten x candles?). Hier kommen jetzt aber Fehlermeldungen ich hab bestimmt was falsch gemacht...
Von nichts kommt nichts

  • Gehört zum Inventar
  • ***
    • Beiträge: 1084
    • Karma: +430/-4
    • Mitglied seit:
      31 Dec 2008
  • Broker: RBS

  • Stop
Re: MQL4 Hilfe
« Antwort #9 am: August 16, 2011, 16:56:46 pm »
Zitat
result = result || (iStochastic(Symbol(), Period(),5,3,3,MODE_SMA,0,MODE_MAIN,i) < 20)
Da fehlt am Ende ein ;

Zitat
if result IfOrderDoesNotExist();
Da fehlt die Klammer:

if (result) IfOrderDoesNotExist();

traderdoc
« Letzte Änderung: August 16, 2011, 17:19:49 pm von traderdoc »
Pokerregel: "Auch bei dem Anschein eines sicheren Gewinnes, muss man ablassen können."

  • Fingerwundtipper
  • ****
    • Beiträge: 322
    • Karma: +79/-0
    • Mitglied seit:
      07 Sep 2009

  • Building Blaster Airhockey Canyon Shooter Stop The Bus DogBalloooon
    Miami Shark Beat The Meter Powerpool 2
  • Stop
Re: MQL4 Hilfe
« Antwort #10 am: August 17, 2011, 03:05:43 am »
Danke euch es funktioniert   :welldone:

ps: wie kommt es eigentlich, dass aus > ein < werden muss ?
Von nichts kommt nichts

  • Global Moderator
  • Ist Forum süchtig
  • *
  • *
  • *
    • Beiträge: 1718
    • Karma: +422/-6
    • Mitglied seit:
      11 Aug 2009
  • Broker: IGMarkets

  • Mars Defense Car Chaos Get Groovy BallsPC Motorrad-Trauma
    Bloons Tower Defense
  • Stop
Re: MQL4 Hilfe
« Antwort #11 am: August 17, 2011, 09:01:00 am »
Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen
ps: wie kommt es eigentlich, dass aus > ein < werden muss ?
Wo denn?
Chleudere den Purchen zu Poden!

  • Fingerwundtipper
  • ****
    • Beiträge: 322
    • Karma: +79/-0
    • Mitglied seit:
      07 Sep 2009

  • Building Blaster Airhockey Canyon Shooter Stop The Bus DogBalloooon
    Miami Shark Beat The Meter Powerpool 2
  • Stop
Re: MQL4 Hilfe
« Antwort #12 am: August 17, 2011, 12:00:02 pm »
Beim rot markierten

void OnEveryTick1()
{
  if (Close[0] <= iMA(Symbol(), Period(),14,0,0,0,0)) return;
  bool result = false; 
  for (int i=0; i<[...];i++)
Von nichts kommt nichts

  • Global Moderator
  • Ist Forum süchtig
  • *
  • *
  • *
    • Beiträge: 1718
    • Karma: +422/-6
    • Mitglied seit:
      11 Aug 2009
  • Broker: IGMarkets

  • Mars Defense Car Chaos Get Groovy BallsPC Motorrad-Trauma
    Bloons Tower Defense
  • Stop
Re: MQL4 Hilfe
« Antwort #13 am: August 17, 2011, 12:10:15 pm »
Na ja, du kannst den Programmfluß über zwei Ansätze steuern....

if (Bedingung) dann (Code)
Diesen Ansatz hattest du...., wenn hinter Code nichts mehr kommt, geht auch das folgende

if (NICHT Bedingung) dann BeendeFunktion
(Code)

Und das Gegenteil von > ist <=
Chleudere den Purchen zu Poden!

  • Fingerwundtipper
  • ****
    • Beiträge: 322
    • Karma: +79/-0
    • Mitglied seit:
      07 Sep 2009

  • Building Blaster Airhockey Canyon Shooter Stop The Bus DogBalloooon
    Miami Shark Beat The Meter Powerpool 2
  • Stop
Re: MQL4 Hilfe
« Antwort #14 am: August 22, 2011, 02:17:51 am »
Hallo,

sagt mal gibt es die Möglichkeit im MQL4, dass der EA nach jeder geschlossenen Order eine Tradingpause von zB 30 Minuten einlegt bevor er weitermachen darf ?

Lieben Gruß
Von nichts kommt nichts

Forexfabrik

Re: MQL4 Hilfe
« Antwort #14 am: August 22, 2011, 02:17:51 am »



 

Ähnliche Themen

  Betreff / Begonnen von Antworten Letzter Beitrag
0 Antworten
589 Aufrufe
Letzter Beitrag November 15, 2008, 22:47:16 pm
von Gregor
15 Antworten
4225 Aufrufe
Letzter Beitrag Juni 19, 2011, 00:43:25 am
von Egetuerk
17 Antworten
3906 Aufrufe
Letzter Beitrag Juni 30, 2011, 14:07:38 pm
von Andreas
39 Antworten
7256 Aufrufe
Letzter Beitrag Oktober 10, 2011, 15:26:31 pm
von Covolt
2 Antworten
1811 Aufrufe
Letzter Beitrag Juli 25, 2010, 01:17:32 am
von Divecall
9 Antworten
1269 Aufrufe
Letzter Beitrag März 16, 2012, 17:21:47 pm
von flapbone
20 Antworten
2466 Aufrufe
Letzter Beitrag Dezember 06, 2010, 09:22:23 am
von nightyhawk
1 Antworten
882 Aufrufe
Letzter Beitrag Mai 08, 2011, 07:46:48 am
von fxdaytrader


ChartTec´s World Topsites