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: 4798
Beiträge: 42561
Benutzer: 7.159
Aktive Benutzer: 125
Links: 83
Wir begrüßen unseren neuesten Benutzer: Hery Priyanto
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 13 Stunden
- Hery...
vor 4 Tagen
- expertfx
vor einer Woche
- teig
vor einer Woche
- windowsmov...
vor einer Woche
- Grabman.19...

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 30
Gesamt: 31
Team: 0
Team:  
Benutzer:  MA-EA
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 11.12.21
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 542
AVT befindet sich auf einem aufstrebenden Ast
Standard Zeit für Vertical Line wird nicht umgesetzt

Ich habe ein Problem mit dem Zeichnen von vertikalen Linien.
Aufgabe: zu einer bestimmten Zeit vertikale Linien in den Chart zeichnen.
Die Zeit für die vertikale Line wird berechnet, das alles über einen bestimmten Zeitraum im Chart.
Problem: alle Linien werden auf die letzte Bar gezeichnet.
Code:
/* string LaterTimeHHandMM(int HHhour=0, int MMminute=0, int HHadd=0, int MMadd=0)
   errechnet den späteren HH:MM Wert
   Hier die OnCalculate Zusammenfassung
*/
   for(int i=limit; i>=0; i--)
   {
      DayOfiWkDay=TimeDayOfWeek(Time[i]); //CurrentWeekdayofIndexnummber
      if(DayOfiWkDay>=WEEKSTART && DayOfiWkDay<=WEEKSTOP) //default:Mo-Fr
      {
         string SepHM=":";
         int SepHMpos=StringFind(HSTART,SepHM,0); //PositionOfHour:MinuteSeparator,=2
         int HHofStart=(int)StringToInteger( StringSubstr(HSTART,0,SepHMpos) );   //0 tillSep(WithoutSep)
         int MMofStart=(int)StringToInteger( StringSubstr(HSTART,SepHMpos+1,0) ); //1 afterSep
         string TmpLater= LaterTimeHHandMM(HHofStart, MMofStart,1,30);            //1:30
           //Print(HSTART," SepHMpos=",(int)SepHMpos,
           //      " HHofStart=",(int)HHofStart,
           //      " MMofStart=",(int)MMofStart,
           //      " from ",HSTART," 1:30 TmpLater=",TmpLater,
           //      " Time[i]=",TimeToStr(Time[i]),
           //      " DayOfiTDate+TmpLater=",DayOfiTDate+" "+TmpLater );
         if(Time[i]==StringToTime(DayOfiTDate+" "+TmpLater) )
            PaintVertLine("TrendStart"+TimeToStr(Time[i]),
                          Time[i]);
      }//Mo-Fr
   }//int i=limit; i>=0; i--

// ======================= Funktion zum Malen der Vertikalen
bool PaintVertLine(string name="VertBaseName", datetime VertTime=0)
{
   name=PFX+name;
   ResetLastError();
   if(ObjectFind(name)!=0)
      if(!ObjectCreate(0,name,OBJ_VLINE,0,VertTime,0))
         { Print(__FUNCTION__," failed ",name," Code=",_LastError); return(false); }
   //ObjectSetInteger(0,name,OBJPROP_TIME,VertTime);
   ObjectSetInteger(0,name,OBJPROP_COLOR,COLOROPCL9); 
   ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_DOT);
   ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
   ObjectSetString(0,name,OBJPROP_TEXT,"Trend Trade Start");
   ObjectSetInteger(0,name,OBJPROP_BACK,true);
   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,true); //make deleting possible
   ObjectSetInteger(0,name,OBJPROP_SELECTED,false); 
   return(true);
}
// =======================
Die Printzeile liefert korrekte Werte (hier im m15 chart)
Code:
...
08:00 SepHMpos=2 HHofStart=8 MMofStart=0 from 08:00 1:30 TmpLater=9:30 Time[i]=2021.12.09 09:15 DayOfiTDate+TmpLater=2021.12.09 9:45
08:00 SepHMpos=2 HHofStart=8 MMofStart=0 from 08:00 1:30 TmpLater=9:30 Time[i]=2021.12.09 09:30 DayOfiTDate+TmpLater=2021.12.09 9:45
08:00 SepHMpos=2 HHofStart=8 MMofStart=0 from 08:00 1:30 TmpLater=9:30 Time[i]=2021.12.09 09:45 DayOfiTDate+TmpLater=2021.12.09 9:45
...
08:00 SepHMpos=2 HHofStart=8 MMofStart=0 from 08:00 1:30 TmpLater=9:30 Time[i]=2021.12.10 09:15 DayOfiTDate+TmpLater=2021.12.10 9:45
08:00 SepHMpos=2 HHofStart=8 MMofStart=0 from 08:00 1:30 TmpLater=9:30 Time[i]=2021.12.10 09:30 DayOfiTDate+TmpLater=2021.12.10 9:45
08:00 SepHMpos=2 HHofStart=8 MMofStart=0 from 08:00 1:30 TmpLater=9:30 Time[i]=2021.12.10 09:45 DayOfiTDate+TmpLater=2021.12.10 9:45
...
08:00 SepHMpos=2 HHofStart=8 MMofStart=0 from 08:00 1:30 TmpLater=9:30 Time[i]=2021.12.10 20:45 DayOfiTDate+TmpLater=2021.12.10 9:45
Ich kann beim besten Willen nicht rausfinden, warum alle Linien (die Namen sind korrekt) übereinander auf die letzte Bar im Chart gesetzt werden, selbst wenn ich das Objekt erst ohne Zeit erstelle und dann die OBJPROP_TIME setze.
Hat jemand eine Idee?
Danke. AVT
Mit Zitat antworten
  #2 (permalink)  
Alt 11.12.21
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.618
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ich würde das so schreiben:

bool PaintVertLine(string name, datetime VertTime)

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #3 (permalink)  
Alt 11.12.21
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 542
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Ich würde das so schreiben:
bool PaintVertLine(string name, datetime VertTime)
traderdoc
Danke traderdoc, hilft leider auch nicht.
AVT
Mit Zitat antworten
  #4 (permalink)  
Alt 11.12.21
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.618
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Was printet er denn für Werte für den Namen und die Zeit, wenn mittels

bool PaintVertLine(string name, datetime VertTime)

das Print() nach

if(!ObjectCreate(0,name,OBJ_VLINE,0,VertTime,0))

geschrieben wird?

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #5 (permalink)  
Alt 11.12.21
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 542
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Was printet er denn für Werte für den Namen und die Zeit, wenn mittels
bool PaintVertLine(string name, datetime VertTime)
das Print() nach
if(!ObjectCreate(0,name,OBJ_VLINE,0,VertTime,0))
geschrieben wird?
traderdoc
Alles was man sonst noch so printen kann mit Ergebnissen:
1. vor dem Aufruf der PaintVertLine Funktion:
Code:
   Print(" PaintVertLine named ","TrendStart"+TimeToStr(Time[i]),
         " at Time[i]=",TimeToStr(Time[i]) );
PaintVertLine named TrendStart2021.12.10 09:45 at Time[i]=2021.12.10 09:45
PaintVertLine named TrendStart2021.12.09 09:45 at Time[i]=2021.12.09 09:45
PaintVertLine named TrendStart2021.12.08 09:45 at Time[i]=2021.12.08 09:45
2. im Aufruf der PaintVertLine Funktion:
Code:
   Print(__FUNCTION__," got name: ",name," time: ",TimeToStr(VertTime));
PaintVertLine got name: TrendStart2021.12.10 09:45 time: 2021.12.10 09:45
PaintVertLine got name: TrendStart2021.12.09 09:45 time: 2021.12.09 09:45
PaintVertLine got name: TrendStart2021.12.08 09:45 time: 2021.12.08 09:45

   if(!ObjectCreate....
   else Print(" created name ",name,
              " at VertTime=",TimeToStr(VertTime) );   
created name LIN-DlinEU_TrendStart2021.12.10 09:45 at VertTime=2021.12.10 09:45
created name LIN-DlinEU_TrendStart2021.12.09 09:45 at VertTime=2021.12.09 09:45
created name LIN-DlinEU_TrendStart2021.12.08 09:45 at VertTime=2021.12.08 09:45
Also alles gemäß Print in Ordnung (LIN-DlinEU ist Prefix), nur nicht vom Chart her.
1. Bild: am Ende der "Haufen", die kleinen Vertikalen sind wo sie eigentlich sein sollen
2. Bild: Ausschnitt aus Objektanzeige

AVT
Angehängte Grafiken
Dateityp: jpg VertLine1.jpg (32,5 KB, 4x aufgerufen)
Dateityp: jpg VertLine2.jpg (42,7 KB, 2x aufgerufen)
Mit Zitat antworten
  #6 (permalink)  
Alt 11.12.21
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 542
AVT befindet sich auf einem aufstrebenden Ast
Standard Nachtrag zum Vorigen

oder als Print (letzter Teil in OnCalculate)
Code:
   for(int i=ObjectsTotal()-1; i>=0; i--)
   {
      string obj=ObjectName(i);
      if( StringSubstr(obj,0,StringLen(PFX+"TrendStart") )==PFX+"TrendStart" )
         Print(obj," time: ",TimeToStr( (datetime)ObjectGetInteger(0,obj,OBJPROP_TIME) ) );
   }
LIN-DlinEU_TrendStart2021.12.10 09:45 time: 2021.12.10 21:30
LIN-DlinEU_TrendStart2021.12.09 09:45 time: 2021.12.10 21:30
LIN-DlinEU_TrendStart2021.12.08 09:45 time: 2021.12.10 21:30
AVT
Mit Zitat antworten
  #7 (permalink)  
Alt 12.12.21
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.618
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Bei mir werden die Linien an der korrekten Position gezeichnet, allerdings ohne Text??

Code:
Code:
int OnInit(){
   ObjectsDeleteAll();
   string line = "Linie";
   for (int i = 0; i < 5; i++) {
      Draw(line + (string)i, iTime(NULL, 0, i));
   }
   return(INIT_SUCCEEDED);
}

void Draw(string name, datetime time_draw) {
   ResetLastError();
   if(ObjectFind(name)!=0)
      if(!ObjectCreate(0,name,OBJ_VLINE,0,time_draw,0))
         { Print(__FUNCTION__," failed ",name," Code=",_LastError); return; }
   //ObjectSetInteger(0,name,OBJPROP_TIME,VertTime);
   ObjectSetInteger(0,name,OBJPROP_COLOR,clrGreen); 
   ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_DOT);
   ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
   ObjectSetString(0,name,OBJPROP_TEXT,"Trend Trade Start");
   ObjectSetInteger(0,name,OBJPROP_BACK,true);
   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,true); //make deleting possible
   ObjectSetInteger(0,name,OBJPROP_SELECTED,false); 
   return;
}
traderdoc
Angehängte Grafiken
Dateityp: jpg V-Linien.JPG (51,6 KB, 2x aufgerufen)
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #8 (permalink)  
Alt 13.12.21
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 542
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Bei mir werden die Linien an der korrekten Position gezeichnet, allerdings ohne Text??
traderdoc
Danke, das muß ich analysieren, wo da der Unterschied ist.

Bezüglich Text, Charteigenschaften - Objektbeschreibung anzeigen (bei nicht angezeigt, gibt's keinen Text). AVT
Mit Zitat antworten
  #9 (permalink)  
Alt 14.12.21
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 542
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Code:
void Draw(string name, datetime time_draw) {
   ResetLastError();
   if(ObjectFind(name)!=0)
      if(!ObjectCreate(0,name,OBJ_VLINE,0,time_draw,0))
         { Print(__FUNCTION__," failed ",name," Code=",_LastError); return; }
   //ObjectSetInteger(0,name,OBJPROP_TIME,VertTime);
   ObjectSetInteger(0,name,OBJPROP_COLOR,clrGreen); 
   ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_DOT);
   ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
   ObjectSetString(0,name,OBJPROP_TEXT,"Trend Trade Start");
   ObjectSetInteger(0,name,OBJPROP_BACK,true);
   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,true); //make deleting possible
   ObjectSetInteger(0,name,OBJPROP_SELECTED,false); 
   return;
}
Ich verstehe die Welt nicht mehr.
Diese Funktion ist doch das Gleiche wie meine.
Und sowohl der Name als auch die Zeit werden korrekt übergeben und auch erhalten.
Zusätzlich ist der Timeframe des Charts innerhalb des Ergebnis-Frames (also wenn ich z.B. zu 7:00 1,5 Stunden addiere, erhalte ich 8:30; und das ist bis zum M30 mit einem Zeitvergleich Chartzeit==ErrechneteZeit gültig und anzeigbar).
Gleichzeitig: wieso wird bei ObjectCreate kein Fehler ausgegeben, wenn ich die Zeit übergebe, sie aber nicht zu dieser Zeit erstellt werden kann, sondern einfach zu irgendeiner Phantasiezeit erstellt wird??

Und um den ganzen noch die Krone aufzusetzen:
Wenn ich statt vertikaler Linien einen Buffer verwende und z.B. einen Arrow zu der errechneten Zeit in den Chart setze - dann sind diese Arrows korrekt!!

Dies ist MT4 Version: 4.00 build 1350, 14 Oct 2021
Für mich heißt das erst mal, Linien raus und Buffer rein.
AVT
Mit Zitat antworten
  #10 (permalink)  
Alt 14.12.21
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 542
AVT befindet sich auf einem aufstrebenden Ast
Standard update

Ich habe mir eine Miniversion des Indikators gebaut, der nur die OpenLine sowie den TrendBuffer und die Vertikallinien enthält. Wenn ich den auf den Chart schmeiße, werden die Linien korrekt gezeichnet.
Den Inhalt dieser Miniversion habe ich dann in den "großen" Indikator kopiert - trotzdem funktioniert es im Großen nicht. Irgendwo ist der Wurm im Großen.
AVT
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 03:22 Uhr.





Die Suchmaschine - Der Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2022 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.
-----------------------------------------------------------------------------------------------------------------------------