Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 147

 
-Aleks-:

Bitte helfen Sie mir - ich kann nicht verstehen, warum ich bei der Berechnung des VesMass-Arrays bei i>0-Werten Null erhalte?

Es stellt sich heraus, dass ich nicht 4 und 5, sondern 4.0 und 5.0 schreiben sollte - was die Logik ist, ist mir nicht klar...
 
-Aleks-:

Es stellt sich heraus, dass man nicht 4 und 5, sondern 4.0 und 5.0 schreiben sollte - was die Logik ist, ist mir nicht klar...
Lesen Sie die Dokumentation und es wird Ihnen klar werden. Es ist gut, dass Sie es selbst gemacht haben.
 
Alexey Viktorov:
Lesen Sie die Dokumentation und es wird Ihnen klar werden. Es ist gut, dass Sie es selbst gemacht haben.

Ja, ich habe schon einmal von so etwas gelesen - also beschloss ich, es auszuprobieren, aber es ist nicht klar, welche Logik dahinter steckt... und ich konnte die Antwort übrigens nicht in der Dokumentation finden.
 
-Aleks-:

Ich habe schon einmal von so etwas gelesen - also beschloss ich, es auszuprobieren, aber es ist nicht klar, welche Logik dahinter steckt... Übrigens konnte ich die Antwort nicht in der Dokumentation finden.


Dies ist eine Funktion nicht nur in MCL, sondern auch in C++ und anderen Programmiersprachen - die Division von zwei Ganzzahlen oder Variablen vom Typ (int) ergibt ein abgeschnittenes Ganzzahlergebnis. In Ihrem Fall ist 4/5=0.

Sie können 4.0/5 oder (double)4/5 schreiben - dann ist das Ergebnis eine reelle Zahl.
 
Vitalie Postolache:


Dies ist nicht nur ein Merkmal von ICL, in C++ und anderen Programmiersprachen ist es dasselbe - die Division von zwei Ganzzahlen oder Variablen vom Typ (int) ergibt ein abgeschnittenes Ergebnis auf eine Ganzzahl. In Ihrem Fall ist 4/5=0.

Sie können 4.0/5 oder (double)4/5 schreiben - dann ist das Ergebnis eine reelle Zahl.

Das verstehe ich, aber ich verstehe nicht die Logik der Lösung, d. h. die Notwendigkeit.

 
-Aleks-:

Das verstehe ich, aber ich verstehe nicht die Logik hinter der Lösung, d. h. die Notwendigkeit.


Nun, Sie argumentieren nicht "warum 2*2=4 in der Arithmetik, was ist die Logik der Lösung"? Sie nehmen es einfach als Axiom und verwenden es. So ist es auch bei der Division von zwei ganzen Zahlen.
 
Vitalie Postolache:

Nun, Sie argumentieren nicht "warum 2*2=4 in der Arithmetik, was ist die Logik hinter der Lösung"? Sie nehmen es einfach als Axiom und verwenden es. Dasselbe gilt für die Division von zwei ganzen Zahlen.

Ich werde das mit dem Zusatz...

 


Kot:


Die Linie ist eine Trendlinie. Ich habe die Eigenschaften in einen Strahl geändert. Es hat nicht geholfen. Wenn ich wollte, dass der Preis unabhängig von der Position des Nullbalkens (oben, unten) ausgegeben wird.

Auch dieser Code funktioniert nicht.

int start() {

double pr=ObjectGetValueByShift("line",0);

Wenn (Gebot==pr){

Alert (pr);}

return(0);}


Ist der Name der Linie richtig geschrieben?

Probieren Sie dieses Skript aus, und zeigen Sie, was es in den Protokollen sagt.

void OnStart()
  {
     double pr;
     int obj_total=ObjectsTotal(); 
     string name;
     int i; 
     
   for(i=0;i<obj_total;i++) 
     { 
      name=ObjectName(i); 
      if(ObjectType(name)!=OBJ_TREND) continue; 
      PrintFormat("Объект %d:     Имя объекта - %s",i,name); 
      pr=ObjectGetValueByShift(name,0);
      PrintFormat("Объект %d:     Цена - %.5f",i,pr);
      
     }  

}

Das Skript erkennt das Objekt und schreibt den Namen korrekt. Aber der Preis ist absolut linkslastig. Sie ist auf dem Foto mit einer horizontalen Linie markiert. Sie gibt diese Preise unabhängig davon an, ob die Balken die Linie überschritten haben oder nicht.

Dateien:
23.png  62 kb
 
Kot:


Die Linie ist im Trend. Die Eigenschaften wurden in Balken geändert. Es hat nicht geholfen. Idealerweise sollte der Preis unabhängig von der Position des Nullbalkens (oben, unten) angezeigt werden.

Auch dieser Code funktioniert nicht.

int start() {

double pr=ObjectGetValueByShift("line",0);

Wenn (Gebot==pr){

Alert (pr);}

return(0);}

Das Gebot kann leicht über die Linie springen, es ist nicht verpflichtet, an jedem Punkt anzuhalten (d. h., Sie werden nicht die exakte Gleichheit erhalten).

ändern Sie die Bedingung z.B. in if ((MathMin(Close[1],Open[0])<=pr && Bid>=pr) || (MathMax(Close[1],Open[0])>=pr && Bid<=pr)) oder ähnlich...

 
Maxim Kuznetsov:

Das Gebot kann leicht über die Linie springen, es ist nicht verpflichtet, an jedem Punkt anzuhalten (d.h., die exakte Gleichheit wird nicht erreicht)

ändern Sie die Bedingung z.B. in if ((MathMin(Close[1],Open[0])<=pr && Bid>=pr) || (MathMax(Close[1],Open[0])>=pr && Bid<=pr)) oder ähnlich...


Danke! Ich habe die Idee.

Was ist, wenn die Situation anders ist? Auf dem Diagramm befinden sich horizontale Linien mit unterschiedlichen Bezeichnungen. Sie benötigen das Skript, um zu berechnen, welche Zeile welchem Preis entspricht.