Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4715
Beiträge: 42151
Benutzer: 7.067
Aktive Benutzer: 154
Links: 83
Wir begrüßen unseren neuesten Benutzer: caps4476
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 21:38).
Neue Benutzer:
vor 3 Tagen
- caps4476
vor 4 Tagen
- michi023
vor einer Woche
- severus
vor einer Woche
- droyo33
vor 2 Wochen
- Jonam

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

Empfehlungen

Antwort
 
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
Mit Zitat antworten
  #2 (permalink)  
Alt 08.05.21
AVT AVT ist offline
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 500
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
Mit Zitat antworten
  #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?
Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +1. Es ist jetzt 15:28 Uhr.





Die Suchmaschine - Der Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2021 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2020 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------