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: 4245
Beiträge: 39297
Benutzer: 6.551
Aktive Benutzer: 258
Links: 80
Wir begrüßen unseren neuesten Benutzer: Jonnes
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 2 Tagen
- Jonnes
vor 2 Tagen
- bluesdd
vor 4 Tagen
- KEY
vor 5 Tagen
- aliconii
vor einer Woche
- Matthias

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 99
Gesamt: 101
Team: 0
Team:  
Benutzer:  fxnoob, traderdoc
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 18.05.19
Mitglied
 
Registriert seit: Dec 2017
Ort: 76891
Beiträge: 117
Angel befindet sich auf einem aufstrebenden Ast
Standard Objekt bewegen - wie? Gar nicht so einfach..

Mir fehlt irgendwie der "Aha"-Effekt, wie ich ein Rechteck zu den festgestellten Zeitpunkten (Ankerpunkten) bewegen kann. Vielleicht kann mir da jemand mal helfen?!
Code:
int TF=1; //Timeframe M1
datetime Anfang,Ende;

void OnTick()
{

   Anfang=iTime ( _Symbol, M1, 10 );// Ab der letzten 10.ten Kerze auf M1, Kerze ist jetzt mal willkürlich
   Ende=   iTime ( _Symbol, M1, 2 );// Bis zur letzten 2.ten Kerze auf M1, Kerze ist jetzt mal willkürlich

ObjectCreate ( "Rechteck" ,OBJ_RECTANGLE , 0 , Anfang, iLow(_Symbol,TF,6) , Ende, iHigh(_Symbol,TF,6)) ; // 6.te Kerze ist jetzt mal willkürlich
ObjectSetDouble ( 0, "Rechteck", OBJPROP_PRICE1, iLow(_Symbol,TF,6)); // 6.te Kerze ist jetzt mal willkürlich
ObjectSetDouble ( 0, "Rechteck", OBJPROP_PRICE2, iHigh(_Symbol,TF,6)); // 6.te Kerze ist jetzt mal willkürlich
ObjectSetInteger( 0, "Rechteck", OBJPROP_TIME1, Anfang);
ObjectSetInteger( 0, "Rechteck", OBJPROP_TIME2, Ende);
ObjectSetInteger( 0, "Rechteck", OBJPROP_COLOR,clrWhite);    
}
Eigentlich sollte das Rechteck "wandern", und zwar mit fortschreitenden Kerzen eben nach links.
Genauer: Mir schwebt vor, den Zeitraum eines Breakout-Fensters farbig mittels Rechteck zu markieren. Hier ist es mal auf Minutenbasis (Der Zeitraum ist mal gleich). Es könnte sich genauso ein Außenstab handeln. Das Prinzip ist ja gleich. Ich habe das Problem, dass die festgestellte Zeit (Der Anfang / Das Ende) eben immer wieder neu berechnet wird.
Und damit nicht genug, es könnten ja mehrere Rechtecke eingezeichnet werden müssen. Ich habe schon überall gesucht, nach Codeschnipseln usw, wurde aber nicht fündig.
Hat jemand eine Idee?
__________________
MQL4-Interessiert... und noch gaaaanz am Anfang
Mit Zitat antworten
  #2 (permalink)  
Alt 22.05.19
Premium Mitglied
 
Registriert seit: Jun 2016
Ort: Österreich
Beiträge: 316
Leopold befindet sich auf einem aufstrebenden Ast
Standard

Was genau passiert? Bekommst du Fehlermeldungen?

Hinweis: Ein Objekt erstellt man normalerweise nur einmal wenn es dann verschoben werden soll. In deinem Code wird versucht das objekt bei jedem Tick zu erstellen.

---Leopold---
Mit Zitat antworten
  #3 (permalink)  
Alt 22.05.19
AVT AVT ist offline
Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 160
AVT befindet sich auf einem aufstrebenden Ast
Standard

Generelles Vorgehen bei mir wäre folgendermaßen:
1. Zeiten für Beginn und Ende der Messung festlegen
2. Wenn Zeitraum erreicht, Werte der Messung holen
3. Sobald Werte vorhanden, Objekt mit diesen Werten zeichnen

4. je nach Zeitfenster des Charts die xPosition der Objekte ändern
5. das passiert bei mir, wenn Bar Null/aktuell ist
Beispiel Code aus einem meiner Indikatoren:
Code:
extern int              LabelShift     = 2;   // right shift from current bar (2)

   for(i=5;i>=0;i--) // from oldest to current
   {  // 8<--- Snip ---
      if(i==0 && ShowLabels && !AllOff)
      {  
         CreateLabel("mark1opn","opn."+NameMarket1,Mark1StartCol);
         CreateLabel("mark1clo","clo."+NameMarket1,Mark1StopCol);
         if(ShowPrices)
         {
            ChangeLabelText("mark1opn","opn."+NameMarket1+" "+DoubleToString(Mark1open[i],2) );
            ChangeLabelText("mark1clo","clo."+NameMarket1+" "+DoubleToString(Mark1close[i],2) );
         }
            	
         int LShiftMult=_Period*MinInSec;    // move description by x bars
         datetime ShiftTime=Time[i]+(LabelShift*LShiftMult);
         MoveLabel("mark1opn",ShiftTime,Mark1open[i]);
         MoveLabel("mark1clo",ShiftTime,Mark1close[i]);
      } // ShowLabels
   }
So wie ich hier bei Bar Null die Labels verschiebe, so änderst Du von Deinem Rechteck den 2.Zeitpreis (also den Endpunkt-Preis) um ShiftTime.
Meiner Meinung nach wäre das in einem Timer besser aufgehoben als in der OnTick, die kleinste darstellbare Einheit auf dem Chart ist eine Minute und ich wüßte nicht, warum man da auf Tickebene runtergehen wollte - nur ne Anmerkung.
Ich hoffe, das hilft Dir schon mal weiter. AVT
Mit Zitat antworten
  #4 (permalink)  
Alt vor 4 Wochen
Mitglied
 
Registriert seit: Dec 2017
Ort: 76891
Beiträge: 117
Angel befindet sich auf einem aufstrebenden Ast
Unhappy

@Leopold:
Stimmt, wird bei jedem Tick gezeichnet. Das könnte einiges an Objekten geben... Eigentlich "wandert" ja ein gezeichnetes Objekt automatisch mit den Kerzen. War , denke ich, ein Denkfehler....

@AVT:
Ja , Deine Lösung scheint recht einleuchtend.
Inzwischen versuchte ich auch, mit "for"-Schleifen zu arbeiten und die Werte der Kerzen im jeweilgen Zeitraum / Timeframe in einem Array zu speichern.
Dabei kam ich nie zu einem zufriedenstellenden Ergebnis, weil seltsame Werte entstanden.
Gerade beim Vergleich mit Kerze x und deren Vorgängerkerze entstehen irgendwann noch vor Erreichen der Zählvariablen "Sprünge".

Guckt mal hier bitte:

Code:
#property copyright "Angel"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

int i;
int z;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   for(i=50;i>1;i--) 
     {
      for(z=i-1;z>0;z--) 
        {
         Alert("  i= ",i,"    z= ",z);
        }
     }
  }
Ich checkte das mal im Strategietester auf H1. Die Ergebnisreihe der i- und z-Werte kann man im Journal sehen.
Wenn ich i=10 setze, dann ist noch alles ok. Aber sobald ich zB i= 50 setze, dann ergibt die Reihe ab ca. i=20 immer unterschiedliche und nicht kontinuierliche Werte. Kann mir das jemand erklären?? Ich meine , das bischen Code, da ist nix drin, was irgendwie querschlägt... es sollten bei i=50 rund 1250 Berechnungen stattfinden. Das ist eigentlich nix... Hat jemand Rat? Eine verschachtelte "for-Schleife" mit festgelegten Werten i=50 und z=i-1 kann doch kein Eigenleben haben?!?!?
Bitte macht Euch mal den Spaß , ladet den EA und seht selbst...!? Oder hat mein MT4 einen Hau weg?!
Ich werde dieses Teilthema als separaten Beitrag bringen.
__________________
MQL4-Interessiert... und noch gaaaanz am Anfang
Mit Zitat antworten
  #5 (permalink)  
Alt vor 4 Wochen
Mitglied
 
Registriert seit: Dec 2017
Ort: 76891
Beiträge: 117
Angel befindet sich auf einem aufstrebenden Ast
Standard

Ich habe mal nur auf die i-Schleife und i=50 reduziert:
Ab dem 5.ten Durchlauf (Also 5 x die i-Schleife durchlaufen) fangen die unregelmäßigen Werte an.
Und der Beginn der Anomalie ist stets unterschiedlich!
Ich weiß echt keinen Rat mehr.

Code:
#property copyright "Angel"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

int i;
int z;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   for(i=50;i>1;i--) 
     {
         Alert("  i= ",i,"    z= ",z);
     }
  }
__________________
MQL4-Interessiert... und noch gaaaanz am Anfang
Mit Zitat antworten
  #6 (permalink)  
Alt vor 4 Wochen
Mitglied
 
Registriert seit: Dec 2017
Ort: 76891
Beiträge: 117
Angel befindet sich auf einem aufstrebenden Ast
Standard

Ich habe nun mal versucht, eine NewBar-Funktion einzubauen, die alle 60 Minuten eine neue Kerze anzeigt. Die oft zu sehende Time[]-Funktion seheich nicht als so toll an, da die Kerze sich immer nur auf den aktuellen Chart bezeiht und ich gerne alles einstellen können möchte, in Drop-Down-Menüs etc.
Hier habe ich zur Vereinfachung einfach 60 eingetragen - für 60 Minuten.
Also der Code soll alle 60 Minuten die beiden Schleifen 1 x durchlaufen.
Das tut er auch - aber nur 1 x und zwar das erste Mal, nur bei der ersten Stunde. Obwohl ich im Strategietester einen ganzen zu testenden Tag einstellte. Was mache ich denn nur falsch?!?!?!?

Code:

datetime dt;
bool NewBar;
int i;
int z;
int y;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+


   static datetime dt;
   if(dt!=iTime(_Symbol,60,0)) //Alle 60 Minuten soll auf neue Kerze geprüft werden
     {
      dt=iTime(_Symbol,60,0);
      NewBar=true;
     }

   if(NewBar==true)
     {
      for(i=25;i>1;i--) // Erste Schleife; Soll alle 60 Minunten 1 x durchlaufen werden
        {
          for(z=i-1;z>0;z--) // Zweite Schleife; Anfang soll i-1 sein
           {
            y=y+1;//Einfache Zählvariable zur Kontrolle

            Alert("  i= ",i,"    z= ",z,"   y= ",y,"   dt= ",dt);//Ausgabe der benutzten Variablen zur Kontrolle

         
           }
        }
     }
   NewBar=false;
  }
__________________
MQL4-Interessiert... und noch gaaaanz am Anfang
Mit Zitat antworten
  #7 (permalink)  
Alt vor 4 Wochen
Mitglied
 
Registriert seit: Dec 2017
Ort: 76891
Beiträge: 117
Angel befindet sich auf einem aufstrebenden Ast
Standard

Ok. Jetzt habe ich ab Montag, Handelsbeginn, im Strategietester weiter gestestet. Immer noch seltsame Ergebnisse und das eingebaute Zeitglied wurde nicht angebsprochen, d.h. der Zeitraum belief sich auf den ersten Tick nach einer Stunde.
Umstellung von 1 Stunde auf 1 Minute brachte nichts.
Jetzt, im real-Betrieb, wo "Alert" nicht im Journal des Strategietesters ausgegeben wird, sondern im "Live-Alamfenster" des MT4, wird jede Minute eine neue Berechnung durchgeführt, sprich : Brav die For-Schleife durchgerechnet. Und zwar richtig und exakt! Wenn auch nur ca. 1 - 4 Sekunden verzögert,obwohl nach jeder neuen Minute einige Ticks erschienen, die wohl - unglaublicherweise - einfach "verschluckt" wurden.
Warum die unterschiedlichen Ergebnisse im Strategietester vs. Realbetrieb existieren, erschließt sich mir nicht - ich kann nur die Konsequenz daraus schließen, dass
a) ein Testen eines EA im Strategietester im Allgemeinen und am Wochenende im Besonderen nur bedingte bis gar keine Aussagekraft besitzt
b) eine Handelsentscheidung (bzw. im EA) auf Tickbasis unnsinnig ist, da einige Ticks nicht berücksichtigt / verschluckt werden, obgleich sie im Chart auf M1 zu sehen sind. Ob dies brokerabhängig ist, kann ich nicht sagen. Dies hat jedoch Einfluss auf EAs auf Basis kleiner Timeframes.

Beinahe faszinierend (oder erschreckend, ich bin hin- und hergerissen) finde ich, dass mein Broker "Leverate" / Direktbroker-FX trotz Anmahnung den gesamten Montag (!) die Ticks zwar in Echtzeit liefert, aber 5 Minuten später beginnt, d.h. Forex sonntags um 23:05 Uhr, was für die Montage erheblichen Einfluss auf die Kerzengestaltung / Aussehen haben kann (Und dies auch oft so ist). Auf M5 kann man dann montags gar nichts entscheiden, da mein M15 oder H1 anders aussieht als in Australien oder US oder eben bei anderen Brokern, deren Handelsbeginn eben um 23:00 Uhr beginnt. Sehr unbefriedigend, aber ich habe ohnehin vor, zu wechseln. Der Spread im EURUSD von 2-3 Pipetten bei Kommission von 2,4 pro Lot wird wohl eben auf diese Art und Weise erkauft.
__________________
MQL4-Interessiert... und noch gaaaanz am Anfang
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 +2. Es ist jetzt 00:03 Uhr.


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