You are not logged in.

Vikke

Professional

Posts: 1,026

Thanks: 378

  • Send private message

1,914

Wednesday, January 11th 2012, 7:27pm

Gibts denn eine Möglichkeit das gestrige Hoch so darzustellen, dass links vom gelben Kreis(Bild) keine Linie mehr erscheint?
Vikke has attached the following image:
  • 2012-01-11_19-27.png

Vikke

Professional

Posts: 1,026

Thanks: 378

  • Send private message

1,913

Wednesday, January 11th 2012, 7:06pm

Das sieht natürlich sehr viel eleganter aus! Ich habe einfach, da ich mich mit Schleifen und dem Programmieren überhaupt noch schwer tue, für jede Linie einen eigenen Objektnamen benutzt und Ganze dann kopiert.

Die vielen Returns sind oft in MT4 Codes anzuftreffen, ich selbst vermag jedoch nicht die Sinnhaftigkeit zu bewerten.

Posts: 3,278

Thanks: 4064

  • Send private message

1,912

Wednesday, January 11th 2012, 6:40pm

Die Zeilen 28 und 29 kann man zu einem Aufruf zusammenfassen.
Wer nichts weiß, muß alles glauben.

1 registered user thanked already.

Users who thanked for this post:

Vikke (11.01.2012)

Posts: 3,278

Thanks: 4064

  • Send private message

1,911

Wednesday, January 11th 2012, 5:52pm

Programme übersichtlicher gestalten

@ Vikke

Wenn Du überall den gleichen 'objname' benutzt, überschreibst Du die vorige Einstellung.

Übrigens solltest Du Deine Programme übersichtlicher gestalten, indem Du Arrays und Funktions-Aufrufe benutzt und nicht andauernd Zeilen mit fast gleicher Funktionalität wiederholst. In ordentlicher Programmierung ist bereits das erstmalige Kopieren einer gleichen Funktionalität, statt sie zu abstrahieren und darüber zu loopen, ein Stil-Fehler.

Zum übersichtlichen Stil gehört es auch, Operatoren beidseitig und Kommata rechts freizustellen.

Was die Zeilen 43 f. bedeuten mögen, sei mal dahin gestellt. Da ist wohl die Reihenfolge vertauscht, wobei ich gar nicht wußte, daß MetaTrader so einen Nonsens übersetzt, denn das return in Zeile 44 paßt dort gar nicht hin. In manchen Sprachen bedeutet ein außerhalb von Funktionen stehendes 'return' die Rückkehr des ganzen Programmes, in C geht das nicht und in der MQL-Beschreibung steht sowas zumindest nicht an der entsprechenden 1. Anlauf-Stelle.

Ebenso spricht es nicht für den Compiler, wenn eine Funktion, die mit einem Rückgabewert deklariert ist, ohne zu meckern übersetzt wird. Aber offenbar haben die Herren bei der Konzeption ihrer Phantasie-Sprache einige Fehler in ihren Compiler eingebaut (was übrigens auf Grund der Komplexität einer Sprach-Beschreibung in er Regel mehrwöchiges, aber dann auch kritisches Testen erfordert, sowas mitzubekommen). Die erforderlichen Klammern um den Return-Wert sind auch eine Abweichung von C.

So in etwa hätte die in MQL4 mögliche Abstraktion gestaltet, wobei man das mit Sprachen mit vernünftiger Typisierung über Strukturen oder Klassen, wie MQL5 noch besser hinkriegt:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#property indicator_chart_window

string Names [ ] = {"Hi", "Lo", "Hi1", "Lo1"};
double Values[4]; 
   
int init() 
{ Values[0] = iHigh(NULL, PERIOD_D1, 1);
  Values[1] = iLow (NULL, PERIOD_D1, 1);
  Values[2] = iHigh(NULL, PERIOD_D1, 2);
  Values[3] = iLow (NULL, PERIOD_D1, 2);
  
  for ( int lineIndex = 0; lineIndex < ArrayRange(Names, 0); lineIndex ++ ) 
    draw_line(Names[lineIndex], Values[lineIndex]);
  
  return(0); 
}

int deinit()  
{ for ( int lineIndex = 0; lineIndex < ArrayRange(Names, 0); lineIndex ++ ) 
    ObjectDelete(Names[lineIndex]);

  return(0);
}

int start() { return(0); }  

void draw_line(string objname, double value)
{ ObjectCreate(objname, OBJ_HLINE, 0, 0, 0);
  ObjectSet   (objname, OBJ_HLINE, value);
  ObjectSet   (objname, OBJPROP_STYLE, STYLE_DASH);
}
Wer nichts weiß, muß alles glauben.

1 registered user thanked already.

Users who thanked for this post:

Vikke (11.01.2012)

Vikke

Professional

Posts: 1,026

Thanks: 378

  • Send private message

1,910

Wednesday, January 11th 2012, 4:38pm

Weiß jemand vielleicht wie ich die rot unrandeten Bereiche wegbekomme? Mit AB war das irgendwie "if Interval >= 86400 then 0" oder so. Was gibt es bei MT4 für Möglichkeiten? Ideal wäre natürlich, wenn die Line jeweils erst bei dem Hochpunkt starten würde und dahinter nichts wäre, das wäre optisch am Besten.
Vikke has attached the following image:
  • 2012-01-11_16-36.png

Vikke

Professional

Posts: 1,026

Thanks: 378

  • Send private message

1,909

Wednesday, January 11th 2012, 4:25pm

Gelöst:)
Vikke has attached the following image:
  • 2012-01-11_16-26.png

Posts: 3,278

Thanks: 4064

  • Send private message

1,908

Wednesday, January 11th 2012, 4:23pm

Wenn es da - wie bei mir - keine Option für gibt, wohl gar nicht. Aber wenn man unbedingt Zeilen-Nummern braucht, kann ein beliebiger anderen Editor benutzt werden. Ansonsten kann man doch mit den Fehler-Boxen an die richtigen Stellen springen und die aktuelle Position unten in der Status-Zeile lesen.

Da die meisten Editoren das An- und Ausschalten der Zeilen-Numerierung erlauben und es in vielen standard-mäßig ausgeschaltet ist (ich schalte es übrigens immer ein, wenn es geht), gibt es möglicherweise Bedien-Modelle, die die Zeilen-Nummer für obsolet halten.
Wer nichts weiß, muß alles glauben.

1 registered user thanked already.

Users who thanked for this post:

Vikke (11.01.2012)

Vikke

Professional

Posts: 1,026

Thanks: 378

  • Send private message

1,907

Wednesday, January 11th 2012, 4:18pm

Schon mal ein Anfang^^ Leider zeigt er mir noch nicht alle 4 Linien an X(

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//+------------------------------------------------------------------+
//|                                                        PHLHL.mq4 |
//+------------------------------------------------------------------+

#property indicator_chart_window

string objname = "Line1";

//+------------------------------------------------------------------+
int init()  {
//+------------------------------------------------------------------+

  ObjectCreate(objname,OBJ_HLINE,0,0,0);
  return(0);
}

//+------------------------------------------------------------------+
int deinit()  {
//+------------------------------------------------------------------+
  ObjectDelete(objname);
  return(0);
}

//+------------------------------------------------------------------+
int start()  {
//+------------------------------------------------------------------+
  double hi,lo,hi1,lo1;
  hi = iHigh(NULL,PERIOD_D1,1);
  lo = iLow(NULL,PERIOD_D1,1);
  hi1 = iHigh(NULL,PERIOD_D1,2);
  lo1 = iLow(NULL,PERIOD_D1,2);
  
  
    ObjectSet(objname,OBJ_HLINE,hi);
    ObjectSet(objname,OBJPROP_STYLE,STYLE_DASH);
    ObjectSet(objname,OBJ_HLINE,lo);
    ObjectSet(objname,OBJPROP_STYLE,STYLE_DASH);
    ObjectSet(objname,OBJ_HLINE,hi1);
    ObjectSet(objname,OBJPROP_STYLE,STYLE_DASH);
    ObjectSet(objname,OBJ_HLINE,lo1);
    ObjectSet(objname,OBJPROP_STYLE,STYLE_DASH);
    
  }  
  return(0);
Vikke has attached the following image:
  • 2012-01-11_16-19.png

Vikke

Professional

Posts: 1,026

Thanks: 378

  • Send private message

1,906

Wednesday, January 11th 2012, 4:00pm

Wie bekommt man eingentlich die Zeilennummern im Editor links dargestellt?

Posts: 3,278

Thanks: 4064

  • Send private message

1,905

Wednesday, January 11th 2012, 3:09pm

Wenn iHigh ein Double liefert, kann dessen Rückgabe schon mal nicht das erste Argument einer Objekt-Funktion sein, die zur Kennzeichnung einen String verlangt.

Wenn mehrere Objekte benötigt werden, müssen die auch innerhalb einer Schleife angelegt werden.

Wenn nur eine Linie gezeichnet werden soll, wird gar keine Schleife gebraucht.

Ohne die für die hiesigen Foren-Zwecke nicht nötigen Kopf-Kommentare wäre das Post übrigens kürzer.
Wer nichts weiß, muß alles glauben.

1 registered user thanked already.

Users who thanked for this post:

Vikke (11.01.2012)

Vikke

Professional

Posts: 1,026

Thanks: 378

  • Send private message

1,904

Wednesday, January 11th 2012, 2:44pm

Ich versuche gerade eine horizontale D1-Linie zu plotten, komme jedoch mit der Schleife und den Objects noch nicht zurecht. Kann mir mal jemand meinen Fehler aufzeigen?

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//+------------------------------------------------------------------+
//|                                                    HorizPlot.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#property indicator_chart_window

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
      double x,i;
      x = iHigh(NULL,PERIOD_D1,0);
      ObjectCreate(x,OBJ_HLINE,0,0,0,0,0,0);
      ObjectSet(x, OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet(x, OBJPROP_COLOR, Red);
      
      for(i=1;i<Bars;i++)
      {
         ObjectSet(x,i,0);
    
      }
//----
   return(0);
  }
//+------------------------------------------------------------------+

Vikke

Professional

Posts: 1,026

Thanks: 378

  • Send private message

1,903

Wednesday, November 16th 2011, 9:49pm

Ich habe mal von einem Expert Advisor irgendwo gelesen, der die einzelnen Fenster linken kann, sodass man nur noch einmal den TF umklicken muss und die anderen Fenster folgen sogleich. Hat da jemand eine Info drüber?

Vikke

Professional

Posts: 1,026

Thanks: 378

  • Send private message

1,902

Wednesday, November 16th 2011, 9:31pm

Danke euch beiden;-)

trash

Resteverzehrer

Posts: 1,022

Thanks: 1367

  • Send private message

1,901

Wednesday, November 16th 2011, 9:27pm

Hat ja auch einen Grund, wegen der Object Funktion. Nun wird es nicht mehr doppelt angezeigt
trash has attached the following file:
  • #vikke.zip (772 Byte - 13 times downloaded - latest: May 18th 2012, 2:13am)

1 registered user thanked already.

Users who thanked for this post:

Vikke (16.11.2011)

Vikke

Professional

Posts: 1,026

Thanks: 378

  • Send private message

1,900

Wednesday, November 16th 2011, 9:18pm

Hat funktioniert, nur zeigt er jetzt wieder alles doppelt an.

Quoted


//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

#property indicator_chart_window

extern int NumOfDays = 20;
extern string FontName = "Courier New";
extern int FontSize = 10;
extern color FontColor = White;
extern int Window = 0;
extern int Corner = 0;
extern int HorizPos = 5;
extern int VertPos = 5;

double pnt;
int dig;
string objname = "*DRPE";


//+------------------------------------------------------------------+
int init() {
//+------------------------------------------------------------------+
pnt = MarketInfo(Symbol(),MODE_POINT);
dig = MarketInfo(Symbol(),MODE_DIGITS);
if (dig == 3 || dig == 5) {
pnt *= 10;
}
ObjectCreate(objname,OBJ_LABEL,Window,0,0);

return(0);
}

//+------------------------------------------------------------------+
int deinit() {
//+------------------------------------------------------------------+
ObjectDelete(objname);

return(0);
}

//+------------------------------------------------------------------+
int start() {
//+------------------------------------------------------------------+
int c=0;
double sum=0;
double sum2=0;
for (int i=1; i<Bars-1; i++) {
double hi = iHigh(NULL,PERIOD_D1,i);
double lo = iLow(NULL,PERIOD_D1,i);
double hi1 = iHigh(NULL,PERIOD_D1,i);
double lo1 = iLow(NULL,PERIOD_D1,i);
datetime dt = iTime(NULL,PERIOD_D1,i);
if (TimeDayOfWeek(dt) > 0 && TimeDayOfWeek(dt) < 6) {
sum += hi - lo;
sum2 += hi1 - lo1;
c++;
if (c>=NumOfDays) break;
} }
hi = iHigh(NULL,PERIOD_D1,0);
lo = iLow(NULL,PERIOD_D1,0);
hi1 = iHigh(NULL,PERIOD_D1,1);
lo1 = iLow(NULL,PERIOD_D1,1);
if (i>0 && pnt>0) {
string objtext = "" ;
objtext = objtext + "ADR = " + DoubleToStr(sum/c/pnt/10,1) + "\n" ;
objtext = objtext + "Yesterday = " + DoubleToStr((hi1-lo1)/pnt/10,1) + "\n";
objtext = objtext + "Today = " + DoubleToStr((hi-lo)/pnt/10,1) ;
Comment(objtext);

ObjectSetText(objname,objtext,FontSize,FontName,FontColor);

}
return(0);
}
Vikke has attached the following image:
  • 2011-11-16_21-17.png

1 registered user thanked already.

Users who thanked for this post:

trash (16.11.2011)

Posts: 3,278

Thanks: 4064

  • Send private message

1,899

Wednesday, November 16th 2011, 9:03pm

Ja, mit Comment() funktioniert die "\n"-Ausdehnung inkonsistenter-weise abweichend von den Objekt-Funktionen, aber nur mit Comment. Damit ist die Position nur in der vorgesehen linken oberen Ecke möglich (wobei in diesem Fall auch nicht mehr gewünscht war).
Wer nichts weiß, muß alles glauben.

1 registered user thanked already.

Users who thanked for this post:

Vikke (16.11.2011)

trash

Resteverzehrer

Posts: 1,022

Thanks: 1367

  • Send private message

1,898

Wednesday, November 16th 2011, 8:58pm

Muss natürlich Backslash sein, also "\n". Ist ein Schreibfehler. Normalerweise sollte die Methode aus meinem Posting funktionieren, weil es in einem anderen mq4 Indikator auch funktioniert. Kann man die MQ4 Datei irgendwo herunterladen?

2 registered users thanked already.

Users who thanked for this post:

Perfect Trader (16.11.2011), Vikke (16.11.2011)

Posts: 3,278

Thanks: 4064

  • Send private message

1,897

Wednesday, November 16th 2011, 8:45pm

trash hatte schon eher geantwortet, aber Ihr meintet beide nicht "/n" sondern "\n". Aber wie gesagt, es geht nicht mit einem Text-Objekt, da die Sonder-Funktionalität des Zeilenumbruchs eben nicht unterstützt wird von jeder Device. Da ist der MetaTrader nicht die Ausnahme, obwohl es schön wäre.
Wer nichts weiß, muß alles glauben.

2 registered users thanked already.

Users who thanked for this post:

trash (16.11.2011), Vikke (16.11.2011)

Vikke

Professional

Posts: 1,026

Thanks: 378

  • Send private message

1,896

Wednesday, November 16th 2011, 8:44pm

Leider gibt er die Reihe dann doppelt aus.
Vikke has attached the following image:
  • 2011-11-16_20-41.png

Posts: 3,278

Thanks: 4064

  • Send private message

1,895

Wednesday, November 16th 2011, 8:37pm

"\n" geht in Text-Objekten nicht

Es war so etwas gemeint wie:

Source code

1
2
3
4
5
6
7
8
9
string objectName = "Demo object";

ObjectCreate (objectName, OBJ_TEXT, 0, 0, 0);
ObjectSet    (objectName, OBJPROP_XDISTANCE, 100);
ObjectSet    (objectName, OBJPROP_YDISTANCE, 100);
ObjectSetText(objectName
, "Demo text, 1st line\n,"
+ "Demo text, 2nd line"
, 10, "Times New Roman", Red);

Nach einem soeben erfolgten eigenen Test klappt das aber leider nicht, da weder Objekte des Typs OBJ_LABEL noch OBJ_TEXT das "\n" wie gewünscht zu einem Zeilenumbruch ausdehnen. Da bleibt nur der Weg, zwei Objekte untereinander anzulegen.
Wer nichts weiß, muß alles glauben.

1 registered user thanked already.

Users who thanked for this post:

Vikke (16.11.2011)