Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4
Startseite Registrieren Hilfe Community Kalender Heutige Beiträge Suchen

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4978
Beiträge: 43313
Benutzer: 7.222
Aktive Benutzer: 72
Links: 84
Wir begrüßen unseren neuesten Benutzer: Mane
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Mane
vor 2 Wochen
- AlbertZiz
vor 2 Wochen
- michak
vor 2 Wochen
- Amateur
vor 2 Wochen
- infos1982

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 08.05.21
Neues Mitglied
 
Registriert seit: Dec 2020
Beiträge: 11
Gaydon befindet sich auf einem aufstrebenden Ast
Standard 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
  #2 (permalink)  
Alt 08.05.21
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

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
  #3 (permalink)  
Alt 16.05.21
Neues Mitglied
 
Registriert seit: Dec 2020
Beiträge: 11
Gaydon befindet sich auf einem aufstrebenden Ast
Standard

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?
Thema geschlossen

Lesezeichen


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 +2. Es ist jetzt 07:36 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.
-----------------------------------------------------------------------------------------------------------------------------