Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 740

 

Ich dupliziere hier nur die Frage, niemand antwortet in den Indikatoren...

Ich habe mit dem Studium von MQL5 begonnen. Ich habe keine Erfahrung mit der Programmierung und habe daher einige Fragen und Zweifel. Einige davon kann ich selbst lösen, indem ich Beispiele analysiere und zum Teil nach dem 'Bauchgefühl' handle, aber einige Aspekte sind auf Anhieb schwer zu verstehen. Ich habe angefangen, eine einfache Sache zu studieren - zwei Toollinien im Hauptfenster des Diagramms anzeigen zu lassen. Ich zeichne den Close für das aktuelle und zusätzliche (verwandte, der Hinweis folgt) Instrument für den aktuellen Zeitrahmen um 1000 Balken rückwärts. Das zugehörige Instrument sind die Futures der nächsten Reihe, es ist illiquide und weist immer einige Lücken in den Daten auf, d.h. die Anzahl der Geschäfte ist nicht so häufig wie in der Haupt-Futures-Reihe. Die Aufgabe scheint erfüllt zu sein, aber es gibt Fehler. Ich kann nicht sagen, ob eine Glättung sinnvoll ist, daher habe ich iMA mit Periode 1 verwendet, so dass sie bei Bedarf ohne Nacharbeit geglättet werden kann.

Hier sind die Fragen:

Wenn ich beim Kompilieren den iMA-Puffer in ein Array kopiere, sehe ich eine Warnung "möglicher Datenverlust aufgrund von Typkonvertierung". Worum handelt es sich dabei und warum, von welcher Art der Umwandlung ist die Rede? Die Linien sind normal gezeichnet und es scheint nichts zu fehlen.

2. Nachdem der Indikator funktioniert hat und die Linien der beiden Instrumente im Hauptdiagrammfenster erscheinen, sehe ich, dass sie nicht synchronisiert sind. D.h. das erste Instrument ist normal und entspricht dem Candlestick-Chart des Hauptfensters. Die zweite (weniger flüssige) hat Lücken und wird daher allmählich "gequetscht", was die Desynchronisation verursacht. Ich muss sie irgendwie zeitlich synchronisieren. Das übersteigt bei weitem meine Möglichkeiten. Ich muss es visuell sehen, um zu verstehen, was fehlt.

Hier ist ein Screenshot, der zeigt, wie es aussieht. Die gelbe Linie ist das, was im Verhältnis zur grünen Linie synchronisiert werden muss. Damit die gelbe Linie, bei der die Lücken in den Daten nur "Verbindungen" der vorherigen Werte zum nächsten sind, nicht zu einem Engpass mit fehlenden Daten führt. Der Code befindet sich im Anhang.

Dateien:
 
ottenand:

Ich dupliziere hier nur die Frage, niemand antwortet in den Indikatoren...

Ich habe mit dem Studium von MQL5 begonnen. Ich habe keine Erfahrung mit der Programmierung und habe daher einige Fragen und Zweifel. Einige davon kann ich selbst lösen, indem ich Beispiele analysiere und zum Teil nach dem 'Bauchgefühl' handle, aber einige Aspekte sind auf Anhieb schwer zu verstehen. Ich habe begonnen, eine einfache Sache zu studieren - zwei Toollinien, die im Hauptfenster des Diagramms angezeigt werden sollen. Ich zeichne den Close für das aktuelle und zusätzliche (verwandte, der Hinweis folgt) Instrument für den aktuellen Zeitrahmen um 1000 Balken rückwärts. Das zugehörige Instrument sind die Futures der nächsten Reihe, es ist illiquide und weist immer einige Lücken in den Daten auf, d.h. die Anzahl der Geschäfte ist nicht so häufig wie in der Haupt-Futures-Reihe. Die Aufgabe scheint erfüllt zu sein, aber es gibt Fehler. Ich kann nicht sagen, ob eine Glättung sinnvoll ist, daher habe ich iMA mit Periode 1 verwendet, so dass sie bei Bedarf ohne Nacharbeit geglättet werden kann.

Hier sind die Fragen:

Wenn ich beim Kompilieren den iMA-Puffer in ein Array kopiere, sehe ich eine Warnung "möglicher Datenverlust aufgrund von Typkonvertierung". Worum handelt es sich dabei und warum, von welcher Art der Umwandlung ist die Rede? Die Linien sind normal gezeichnet und es scheint nichts zu fehlen.

2. Nachdem der Indikator funktioniert hat und die Linien der beiden Instrumente im Hauptdiagrammfenster erscheinen, sehe ich, dass sie nicht synchronisiert sind. D.h. das erste Instrument ist normal und entspricht dem Candlestick-Chart des Hauptfensters. Die zweite (weniger flüssige) hat Lücken und wird daher allmählich "gequetscht", was die Desynchronisation verursacht. Ich muss sie irgendwie zeitlich synchronisieren. Das übersteigt bei weitem meine Möglichkeiten. Ich muss es visuell sehen, um zu verstehen, was fehlt.

Hier ist ein Screenshot, der zeigt, wie es aussieht. Die gelbe Linie ist das, was im Verhältnis zur grünen Linie synchronisiert werden muss. Damit die gelbe Linie, bei der die Lücken in den Daten nur "Verbindungen" der vorherigen Werte zum nächsten sind, nicht zu einem Engpass mit fehlenden Daten führt. Der Code befindet sich in der Anlage.


Der Handle des Indikators muss vom Typ int sein. Beispiel siehe hier:CopyBuffer

int  CopyBuffer( 
   int       indicator_handle,     // handle индикатора 
   int       buffer_num,           // номер буфера индикатора 
   int       start_pos,            // откуда начнем  
   int       count,                // сколько копируем 
   double    buffer[]              // массив, куда будут скопированы данные 
   );
 
Vladimir Karputov:


Der Handle des Indikators muss vom Typ int sein. Beispiel siehe hier:CopyBuffer

Richtig, diesen Punkt habe ich übersehen, der Kompilierungsfehler ist verschwunden, danke!

Das Hauptproblem ist derzeit jedoch die Zeitverschiebung, die immer noch relevant ist. Ohne diese Aufgabe zu lösen, kann ich keine mathematischen Operationen zwischen den Werkzeugen durchführen, die ich zu testen beabsichtige.

 
ottenand:

Richtig, diesen Punkt habe ich übersehen, der Kompilierfehler ist weg, danke!

Das Hauptproblem, nämlich die Frage des Zeitplans, ist jedoch nach wie vor aktuell. Ohne die Lösung dieses Problems wäre es zum Beispiel unmöglich, mathematische Operationen zwischen Instrumenten durchzuführen, was ich zu testen beabsichtige.


An Ihrer Stelle würde ich mit einer korrekten Kodierung beginnen - die Sache ist die, dass Ihr Stil jetzt ein rücksichtsloser "Vierweg" ist - das heißt, es gibt keine Kontrollen, alles ist zufällig.

Beginnen Sie mit der Festlegung von OnInit():

  1. nachdem Sie den Griff erhalten haben, müssen Sie ihn auf seine Richtigkeit überprüfen
  2. wenn alles korrekt ist, wird NICHT "0", sondern "INIT_SUCCEED" zurückgegeben.
All dies ist in demiMA-Beispiel enthalten. Erst dann können wir weitermachen.

 
Vladimir Karputov:


An Ihrer Stelle würde ich damit beginnen, den Code richtig zu schreiben - die Sache ist die, dass Ihr Stil jetzt ein rücksichtsloser "quaternärer" ist - d.h. keine Kontrollen, alles nach Lust und Laune.

Beginnen Sie mit der Korrektur von OnInit():

  1. nachdem Sie den Griff erhalten haben, müssen Sie ihn auf seine Richtigkeit überprüfen
  2. wenn ok, wird NICHT "0", sondern "INIT_SUCCEED" zurückgegeben.
All dies ist in demiMA-Beispiel enthalten. Nur dann können Sie weitermachen.

Wer hat dir denn gesagt, dass man nicht auf einer Fünf heften und auf einer Vier schön schreiben kann?

Es geht nicht um die PLATFORM, es geht um den Kopf des jeweiligen Schreibers...

Professor Preobrazhensky hatte Recht, als er sagte, dass das Problem nicht in den Toiletten, sondern in den Köpfen liegt...


 
Vladimir Karputov:


Wenn ich Sie wäre, würde ich damit beginnen, einen ordentlichen Code zu schreiben - die Sache ist die, dass Ihr Stil jetzt ein rücksichtsloser "quaternärer" ist - das heißt, es gibt keine Kontrollen, alles ist auf gut Glück.

Beginnen Sie mit der Korrektur von OnInit():

  1. nachdem Sie den Griff erhalten haben, müssen Sie ihn auf seine Richtigkeit überprüfen
  2. wenn ok, wird NICHT "0", sondern "INIT_SUCCEED" zurückgegeben.
All dies ist in demiMA-Beispiel enthalten. Erst dann können Sie weitermachen.

Nun, jetzt weiß ich, wie mein Stil heißt) Stimmt, ich fange gleich mit Version 5 an, von vorne)

Danke, ich habe die Punkte 1 und 2 korrigiert. Der ganze Fehler liegt im Berechnungsblock. Ich werde darüber nachdenken, wie ich die Lage der Balken von zwei Instrumenten in Übereinstimmung mit der Zeit vorschreiben kann. Andernfalls gibt es eine Verzögerung und die gleiche Warnung #4806.

Dateien:
 
ottenand:

Nun, jetzt weiß ich, wie mein Stil heißt) Wirklich, ich fange gleich mit Version 5 an, von Grund auf)

Danke, ich habe die Punkte 1 und 2 behoben. Der ganze Haken liegt im Berechnungsblock. Ich werde darüber nachdenken, wie man die Lage der Balken zweier Instrumente je nach der Zeit vorschreiben kann. Andernfalls gibt es eine Verzögerung und die gleiche Warnung #4806.

Genau! So gibt es z. B. bei M1 auf dem Futures "A" Balken bei 13 Minuten, 14 Minuten und 15 Minuten. Futures "B" hat jedoch nur Balken bei 13 und 15 Minuten - also eine Lücke. Es gab irgendwo Artikel, suchen Sie nach dem Wort "Loch".
 
Vladimir Karputov:
Juhu! Richtig! Denn der M1-Future "A" hat zum Beispiel Balken bei 13 Minuten, 14 Minuten und 15 Minuten. Aber die Zukunft "B" hat nur Balken bei 13 Minuten und 15 Minuten - das ist ein Loch. Es gab irgendwo Artikel, suchen Sie nach dem Wort "Loch".
Das ist es, wovon ich spreche) Der Fehler #4806 scheint der Grund dafür zu sein. OK, ich werde es suchen.)
 

Guten Tag.

Können Sie mir bitte sagen, wie ich den Preis der Trendlinie für den aktuellen Balken finden kann? Ich habe es mit ObjectGetDouble versucht, aber es bringt nicht das gewünschte Ergebnis. Beispiel-Code:

   ObjectCreate(0,"O_Resistance",OBJ_TREND,0,UpTime_2[0],UpFractal_2,UpTime_1[0],UpFractal_1);
   ObjectMove(0,"O_Resistance",0,UpTime_2[0],UpFractal_2);
   ObjectMove(0,"O_Resistance",1,UpTime_1[0],UpFractal_1);
   ObjectSetInteger(0,"O_Resistance",OBJPROP_RAY_RIGHT,true);
   ObjectSetInteger(0,"O_Resistance",OBJPROP_COLOR,O_Resistance_Color);
   ObjectSetInteger(0,"O_Resistance",OBJPROP_STYLE,O_Resistance_Style);
   ObjectSetInteger(0,"O_Resistance",OBJPROP_WIDTH,O_Resistance_Width);


double O_ResistancePrice = ObjectGetDouble(0,"O_Resistance",OBJPROP_PRICE,0); // при любом баре дает координату изначальной точки луча, а нужна цена
                                                                              // соответствующая текущему бару или первому
 
MaksGroup:

Guten Tag.

Können Sie mir bitte sagen, wie ich den Preis der Trendlinie für den aktuellen Balken finden kann? Ich habe es mit ObjectGetDouble versucht, aber es bringt nicht das gewünschte Ergebnis. Beispiel-Code:

ObjectGetValueByShift() (nur MT4), ObjectGetValueByTime()(MT4, MT5)
Grund der Beschwerde: