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)
-   -   Programmierstruktur (Syntax) (http://www.expert-advisor.com/forum/showthread.php?t=6985)

Gaydon 08.05.21 10:08

Programmierstruktur (Syntax)
 
Hallo ich habe mal wieder ein Problem und verstehe es nicht.
Die Programm Syntax ist doch so

if(x+2=3)
{
es passiert a
}
else
{
if(x+2=4)
{
es passiert b
}
}
es passiert a oder b

so nun zu meinen Programm, hier der Code
Code:

  string OP = "";
  double price = 0;
  int MagicNumber = 0;
  string Farbe = "";
  string OrderName = "";
 
  bool Schalter_30 = true;
  bool Schalter_31 = true;
 
  if (OrdersTotal()<2)
      {
      if(iOpen(_Symbol,PERIOD_M15,0)>iOpen(_Symbol,PERIOD_M15,1))
        {
        if(Schalter_30==true)
            {
            OP = OP_BUY;
            price = Ask;
            MagicNumber = Order3;
            Farbe = Green;
            OrderName = "BUY-Order 3.0";
            Schalter_30==false;

            }
        }
      else
        {
        if(iOpen(_Symbol,PERIOD_M15,0)<iOpen(_Symbol,PERIOD_M15,1))
            {
            if(Schalter_31==true)
              {
              OP = OP_SELL;
              price = Bid;
              MagicNumber = Order3;
              Farbe = Green;
              OrderName = "BUY-Order 3.1";
              Schalter_31=false;
              }
            }
        }
      OrderSend(_Symbol,OP,Lots,price,10,0,0,NULL,MagicNumber,0,Farbe);
      bool Note = SendNotification (OrderName +" Einstieg = " + price);
      Print (OrderName);
     
      Comment("Symbol = ", _Symbol, "\n"
              "OP = ", OP, "\n"
              "Price = ", price ,"\n"
              "MagicNumber = ", MagicNumber, "\n"
              "Farbe = ", Farbe, "\n"
              "Schalter 30 = ", Schalter_30, "\n"
              "Schalter 31 = ", Schalter_31);
     
      }
    return Schalter_30&&Schalter_31;                       
}

Warum ignoriert es die Schalter?
Warum "printet" es mir, wenn ich die Order Send ausklammer, ununterbrochen, ob wohl der Schalter es doch auch nicht zulassen würde?

Ich bitte um eine genaue Erklärung, weil ich es von meiner Logik nicht verstehe, wenn er es nicht darf warum macht er es trotzdem???

vielen Dank schonmal

AVT 08.05.21 21:20

Er "printed" nicht, sondern schaltet die Kommentarfunktion ein und diese bleibt so lange eingeschaltet bis Du sie abschaltest.
Printen geht mit dem Print(" Print-Nachricht"); Befehl.
AVT

Gaydon 16.05.21 13:41

Danke für deine Antwort.
Dafür sind ja diese Schalter eingebaut, die einfach weg ignoriert werden.
Nun habe ich das Programm so geändert, dass er nicht einen bool Wert abfragt sondern Zahlen vergleicht. Das funktioniert schon mal.
Code:

void OnTick()

string OP = "";
double price = 0;
int MagicNumber = 0;
string Farbe = "";
string OrderName = "";
  if(OrdersTotal()<5)
  {
  if(iOpen(_Symbol,PERIOD_M15,0)>iOpen(_Symbol,PERIOD_M15,1)&&(Schalter_30>=1))
      {
      OP = OP_BUY;
      price = Ask;
      MagicNumber = Order3;
      Farbe = "Green";
      OrderName = "BUY-Order 3.1";
      BuyOrder =1;
      Schalter_30=0;
      Print(OrderName);
      }
  else
      {
      if(iOpen(_Symbol,PERIOD_M15,0)>iOpen(_Symbol,PERIOD_M15,1)&&(Schalter_30>=1)
        {
        OP = OP_SELL;
        price = Bid;
        MagicNumber = Order3;
        OrderName = "SELL-Order 3.1";
        SellOrder =1;
        Schalter_31=0;
        Print(OrderName);
        }
      }
  if(BuyOrder>0)
      { 
      //Order = OrderSend(_Symbol,OP,Lots,Ask,3,0,0,NULL,MagicNumber,0,Green);
      if(TimeCurrent()==iTime(_Symbol,PERIOD_M15,0))
        {
        if(Schalter_30==0)
            {
            Schalter_30=1;
            }
        }
      bool Note = SendNotification (OrderName +" Einstieg = " + price);
      }
  else
      {
      if(SellOrder>0)
        {
        //Order = OrderSend(_Symbol,OP,Lots,Bid,3,0,0,NULL,MagicNumber,0,Red);
        if(TimeCurrent()==iTime(_Symbol,PERIOD_M15,0))
            {
            if(Schalter_31==0)
              {
              Schalter_31=1;
              }
            }
        Note = SendNotification (OrderName +" Einstieg = " + price);
        }
      }
  }
  Comment("BuyOrder = ", BuyOrder, "\n",
            "SellOrder = ", SellOrder, "\n",
            "Schalter_30 = ", Schalter_30, "\n",
            "Schalter_31 = ", Schalter_31,"\n",
            "Schalter = ",Schalter);
}

Die Schalter sind Global deklariert.

Nun die Frage warum öffnet er, trotz Schalter, 2 Sell Order am Anfang?
Gibt es dort eine Art delay, das noch eine 2te Order schnell mit durchschlüpft?
Warum funktioniert das mit der bool Variante nicht? (Wieso muss ich Zahlen vergleichen)
Wenn ich jetzt 4 oder 5 verschiedene Kauf oder Verkauf Möglichkeiten habe, warum funktioniert das Zurücksetzen des Schalters nicht mehr wenn ich es so habe?

Code:

if(BuyOrder>0)
                  { 
                  //Order = OrderSend(_Symbol,OP,Lots,Ask,3,0,0,NULL,MagicNumber,0,Farbe);
                  if(TimeCurrent()<=iTime(_Symbol,PERIOD_M15,0))
                    {
                    if(Schalter_10B==0)
                        {
                        Schalter_10B=1;
                        }
                    else
                        {
                        if(Schalter_20B==0)
                          {
                          Schalter_20B=1;
                          }
                        else
                          {
                          if(Schalter_21B==0)
                              {
                              Schalter_21B=1;
                              }
                            else
                              {
                              if(Schalter_22B==0)
                                {
                                Schalter_22B=1;
                                }
                              else
                                {
                                if(Schalter_23B==0)
                                    {
                                    Schalter_23B=1;
                                    }
                                else
                                    {
                                    if(Schalter_24B==0)
                                      {
                                      Schalter_24B=1;
                                      }
                                    else
                                      {
                                      if(Schalter_25B==0)
                                          {
                                          Schalter_25B=1;
                                          }
                                      else
                                          {
                                          if(Schalter_30B==0)
                                            {
                                            Schalter_30B=1;
                                            }
                                          else
                                            {
                                            if(Schalter_31B==0)
                                                {
                                                Schalter_31B=1;
                  }  }  }  }  }  }  }  }  }  }  }

ich weiß das ist jetzt nicht ganz so leicht mit diesem Codeschnipsel aber warum funktioniert die zurück Setzung des Schalters jetzt nicht mehr?
Und könnte man das nicht auch über ein Array lösen?


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