ObjectCreate (OBJ_HLINE & und OBJ_VLINE)

 

Hallo zusammen,


kann mir jemand sagen warum die Linien nicht eingezeichnet werden? Lediglich die Testlinie funktioniert. Chart: DE40.


Danke
Thomas


//+------------------------------------------------------------------+
//|                                             _masterMQLScript.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"




//#include<zInclude\_masterMQLInclude.mqh>

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
 
   objectClearAll();
   marketOpenTimes();
   indicatorHighLowDayBefore();
   
  }
//+------------------------------------------------------------------+



void marketOpenTimes(){

datetime openUSWinterTime = "2023.02.22 10:00:00";

//ObjectSetInteger(0,"openUSWinterTime",OBJPROP_COLOR,clrYellow); 
ObjectCreate(0,"openUSWinterTime",OBJ_HLINE,NULL,openUSWinterTime,NULL);

Print(" error ",GetLastError());
//ObjectCreate(0,"openUSWinterTime",OBJ_VLINE,0,0,15388);
Print("");
}

void objectClearAll(){
   
    for(int i = ObjectsTotal(0,0,-1); i >= 0; i--)
   {
      // Delete each object
      ObjectDelete(0, ObjectName(0,i));
   }

}

void indicatorHighLowDayBefore(){

double candleValueHigh, candleValueLow;

 MqlRates rates[];
   int copied = CopyRates(Symbol(),PERIOD_D1,1,1,rates);
   rates;
   for(int i=0; i<copied; i++)
     {
       candleValueHigh = NormalizeDouble(rates[i].high,2);
       candleValueLow = NormalizeDouble(rates[i].low,2);
     }
      
     ObjectSetInteger(0,"High",OBJPROP_COLOR,clrYellow); 
     ObjectSetInteger(0,"Low",OBJPROP_COLOR,clrYellow); 
     
     ObjectCreate(0,"openUSWinterTime",OBJ_VLINE,0,0,15388); //Test Linie funktioniert.
     
     //candleValueHigh=15388;
     
     bool objc;
     
     objc = ObjectCreate(0,"High",OBJ_VLINE,0,0,candleValueHigh);
     objc = ObjectCreate(0,"Low",OBJ_VLINE,0,0,candleValueLow);
     
     Print(objc);
     
}
 

Bitte genauer beschreiben, was nicht funktioniert.

  1. Bei Dir zB. mit Screenshots von dem wie es aussehen soll und wie es stattdessen aussieht.
  2. Hast Du über die Objekte in Chart geprüft, wie die Linien gezeichnet werden bzw. sind deren Eigenschaften wie geplant?
  3. Wenn das Programm nicht tut was es soll wäre der erste Griff zum Debugger:
    https://www.metatrader5.com/de/metaeditor/help/development/debug
    Zur Fehlerbehebung von MQL5-Programmen (Debugging) : https://www.mql5.com/de/articles/654
    Einführung in MQL5: Schreiben eines einfachen Expert Advisor und benutzerdefinierten Indikators, Siehe Ende: Starten und Debuggen     https://www.mql5.com/de/articles/35
    Die Fehlerverarbeitung und Protokollierung in MQL5:     https://www.mql5.com/de/articles/2041
    https://www.mql5.com/de/articles/272
    Fehler finden und Protokollierung     https://www.mql5.com/de/articles/150

Zur Fehlerbehebung von MQL5-Programmen (Debugging)
Zur Fehlerbehebung von MQL5-Programmen (Debugging)
  • www.mql5.com
Dieser Artikel richtet sich primär an Programmierer, die die Sprache zwar bereits gelernt haben, die allerdings noch keine Meister ihres Fachs sind. Er wird auf verschiedene Debugging-Techniken eingehen, die der gebündelten Erfahrung des Autors sowie vieler anderer Programmierer entspringen.
 
Carl Schreiber #:

Bitte genauer beschreiben, was nicht funktioniert.

  1. Bei Dir zB. mit Screenshots von dem wie es aussehen soll und wie es stattdessen aussieht.
  2. Hast Du über die Objekte in Chart geprüft, wie die Linien gezeichnet werden bzw. sind deren Eigenschaften wie geplant?
  3. Wenn das Programm nicht tut was es soll wäre der erste Griff zum Debugger:
    https://www.metatrader5.com/de/metaeditor/help/development/debug
    Zur Fehlerbehebung von MQL5-Programmen (Debugging) : https://www.mql5.com/de/articles/654
    Einführung in MQL5: Schreiben eines einfachen Expert Advisor und benutzerdefinierten Indikators, Siehe Ende: Starten und Debuggen     https://www.mql5.com/de/articles/35
    Die Fehlerverarbeitung und Protokollierung in MQL5:     https://www.mql5.com/de/articles/2041
    https://www.mql5.com/de/articles/272
    Fehler finden und Protokollierung     https://www.mql5.com/de/articles/150

Hallo Carl, danke für die Links. Der Debugger ist bekannt. Leider werden die Linien überhaupt nicht eingezeichnet. 

Habe ich noch etwas vergessen?

VG

Thomas

 

Wenn ObjectCreate() fehlschlägt gibt es Fehlermeldungen - so etwas fragst Du nicht ab und ins Log hast Du wohl auch nicht geschaut - und wenn die Parameter falsch gesetzt sind, sind sie gezeichnet, aber nicht sichtbar auf dem Chart - hast Du das geprüft?

Überigens alles Punkte in den o.a. Artikeln: Suchen und Lesen hilft.

 
Beim Ansehen Deines Codes fiel mir auf:
1.)Du löscht die alten Linien, 
2.)berechnest die Werte neu und dann 
3.)überträgst Du die neuen int-Werte in Linien, die noch gar nicht existieren. Das ist wahrscheinlich der Fehler.
Die ObjectCreate müssen vor den ObjectSetIntegern kommen. Wo soll denn der Wert sonst auch hin?
Wenn Du Dir die Rückgabewerte von den  ObjectSetInteger Funktionen ausgeben lässt wette ich, dass da false rauskommt, es kann ja auch nicht gehen.

Deine Vorgehensweise mit den Funktionen ist schon ganz schön aber Du kannst diese auch als bool einrichten, die nur true zurückgibt wenn alle Schritte erfolgreich abgeschlossen wurden.

Wenn Du jedoch Variablen (objc) mehrfach benutzt um den Rückgabewert von ObjectCreate Funktionen auszudrucken, wird logischerweise nur der letzte boolsche Wert gespeichert. 
 
Tausche VLine mit HLine.

Du benutzt sie verdreht. -> HLine ist horizontal und benötigt einen Preis, VLine ist vertikal und benötigt eine Zeit.


Grund der Beschwerde: