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)
-   -   Bid Zwischen Rectangle Widerstand Unterstützung (http://www.expert-advisor.com/forum/showthread.php?t=6363)

Max2018 15.03.19 10:11

Bid Zwischen Rectangle Widerstand Unterstützung
 
Hallo,

wie könnte man eine "If" Abfrage formulieren, wenn der Bidkurs zwischen einem eingezeichneten Rectangle Objekt liegt.
Begründung:
Ich habe in einem Chart verschiedene Widerstände und Unterstützungen eingezeichnet mit Rectangle Objekten. Jedesmal wenn der Kurs nun
irgend eines der Objecte berührt oder darin liegt, soll ein EA eine Funktion ausführen.
Problem:
Zum einen habe ich zahlreiche Rectangles eingezeichnet, und die if Abfrage soll bei JEDEM Rectangle funktionieren

Mein Ansatz geht irgendwie nicht:
Code:

if (OB_Check(ZwischenRectangle)!=true)break;
und
Code:

bool OB_Check(double ZwischenRectangle) {
  for (int vv = 0; vv <= 300; vv++)
{
  ObereRectangleLinie[vv] = NormalizeDouble(ObjectGetDouble(0,vv,OBJPROP_PRICE1),NACHKOMMA);   
  UntereRectangleLinie[vv] = NormalizeDouble(ObjectGetDouble(0,vv,OBJPROP_PRICE2),NACHKOMMA);
if(Bid>ObereRectangleLinie[vv]&&Bid<UntereRectangleLinie[vv])
return(false);
            }
        }
      }
  }
  return(true); 
}


traderdoc 15.03.19 11:17

Dann nimm mal statt && die Zeichen || für die logische ODER-Verknüpfung.

traderdoc

Max2018 18.03.19 01:02

Danke! Geht leider nicht

Habe die Rectangles von 1 bis n durchnummeriert - geht aber nicht.
Zur Vereinfachung hier das vollständige TestProgramm
Eigentlich müsste der Comment, wenn Bid zwischen einem Rectangle ist, auf 1 umspringen.... macht es aber nicht

Code:


int ObereRectangleLinie[111],UntereRectangleLinie[111];
 

int start()
  { 
  double ZwischenRectangle;
      if (PO_Check(ZwischenRectangle)!=true)Comment(1);
      if (PO_Check(ZwischenRectangle)==true)Comment(0); 
}   
  bool PO_Check(double ZwischenRectangle) {
  for(int i = OrdersTotal()-1; i >= 0; i--)
  {ObereRectangleLinie[i] = NormalizeDouble(ObjectGetDouble(0,i,OBJPROP_PRICE1),1);   
  UntereRectangleLinie[i] = NormalizeDouble(ObjectGetDouble(0,i,OBJPROP_PRICE2),1);
if(Bid>ObereRectangleLinie[i]||Bid<UntereRectangleLinie[i])
return(false);
  }
  return(true);
}

:confused:

FatSpiderman 18.03.19 09:07

Ich verstehe den Iterator in deinem Testprogramm nicht:

for(int i = OrdersTotal()-1; i >= 0; i--)

OrdersTotal() liefert dir doch die Anzahl deiner Orders zurück.

Wenn du keine Order im Markt hast, kommst du gar nicht in die Schleife rein bzw. falls du weniger Orders im Markt hast als Rectangles, werden gar nicht alle Objekte getestet.
Müsst hier nicht i mit der Anzahl deiner Objekte initialisiert und iteriert werden, in deinem Fall 111?

traderdoc 18.03.19 10:55

Dass das so nicht ging, war klar, denn das war auch nur der Hinweis auf die korrekte Logik der Abfrage bzgl. der Position des aktuellen Kurses.

Wie @FatSpiderman schon richtig bemerkte, hat da OrdersTotal() nichts zu suchen. Es muss nach den Objekten gesucht werden und bei ObjectGetDouble() muss u.a. der Parameter des ObjectNamens!! angegeben werden und ein Index.

traderdoc

Max2018 18.03.19 13:15

Aaaah ja, stimmt :eek::rolleyes::D

So geht´s
Code:


 
int ObereRectangleLinie[111],UntereRectangleLinie[111];
 

int start()
  { 
  double ZwischenRectangle;
      if (PO_Check(ZwischenRectangle)!=true)Comment(1);
      if (PO_Check(ZwischenRectangle)==true)Comment(0); 
}   
  bool PO_Check(double ZwischenRectangle) {
  for(int i = 111; i >= 0; i--)
  {ObereRectangleLinie[i] = NormalizeDouble(ObjectGetDouble(0,i,OBJPROP_PRICE1),1);   
  UntereRectangleLinie[i] = NormalizeDouble(ObjectGetDouble(0,i,OBJPROP_PRICE2),1);
if(Bid<ObereRectangleLinie[i]&&Bid>UntereRectangleLinie[i])
return(false);
  }
  return(true);
}

DAAANKEEE

traderdoc 18.03.19 14:40

Wenn das tatsächlich gehen sollte, dann hättest Du den Objekten die Namen "0" bis "111" gegeben müssen, was etwas ungewöhnlich wäre.

traderdoc

Max2018 18.03.19 14:54

JA habe ich, die werden automatisch eingezeichnet und durchnummeriert - alternativ zeichne ich die manuell ein und gebe den Rectangles auch eine Nummer....

DANKE nochmal

Max2018 18.03.19 14:59

hier den geändert:

Download Forex Indicator "SS SupportResistance v04c", Support and Resistance levels

bzw

SS_SupportResistance_v04c.mq4--MetaTrader 4/5 robots,Experts and Indicators source code advisors,Forex Automated Trading Systems.

dort aber dann statt den Namen, die Widerstände und Unterstützungen durchnummerieren


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