[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 82

 
wolf05632:

Danke, aber bei mir funktioniert es nicht. Ich brauche keinen Ausgleich. Oben habe ich geschrieben. Nehmen wir an, für die erste Kerze ist buffer[1]=High[1], für die dritte buffer[3]=Hight[3] und für die zweite Kerze müssen wir berechnen: buffer[2]=MathAbs(Higth[1]-Hight[3])/2 und erhalten das, was ich auf dem Bild möchte.
Und was gefällt Ihnen an meiner Variante nicht? :)) Es ist viel einfacher und weniger kompliziert. Oder benötigen Sie, dass in einem Puffer verbliebene Werte auf jeden Balken?
 

wolf05632:

SZY: Wie kann ich erreichen, dass ein Indikator nur in einem bestimmten Zeitrahmen (H1) funktioniert, d.h. Berechnungen durchführt (er funktioniert, ist aber nicht sichtbar)?

Sie müssen die Berechnung nicht an den aktuellen Zeitrahmen, sondern an H1 binden! :)) D.h. verwenden Sie nicht die Arrays Open[], Close[], High[], Low[], Time[], sondern die Funktionen iOpen(), iClose(), iHigh(), iLow(), iTime() mit entsprechenden Parametern...
 
MaxZ:
Warum hat Ihnen meine Version nicht gefallen? :)) Viel einfacher und mit weniger Berechnungen. Oder wollen Sie die Werte bei jedem Takt im Puffer behalten?

Ich habe es versucht, danke, aber es hat nicht funktioniert. Ich konnte sie nicht in der Tabelle anzeigen lassen. Vielleicht habe ich etwas missverstanden. Das Einzige, was ich verstanden habe, ist die Hauptsache: die Elemente im Puffer müssen der Reihe nach (1,2,3...), d.h. ohne Lücken (1,3,5...) und JEDEM! Element im Puffer muss ein Wert zugewiesen sein! :-)
 

Roman, danke für die Antwort..... Leider verstehe ich eine Sache immer noch nicht. Im Lehrbuch, https://book.mql4.com/ru/basics/expressions, unter "Type Approach". Option 4.1. Berechnung des Ergebnisses eines Integer-Typs

und die Variante 4.2. Eine ähnliche Situation tritt ein, wenn wir ein Ergebnis als Wert eines reellen Typs suchen", die gleiche Formel ist gegeben, aber im ersten Fall wird der Typ der Variablen F als int bezeichnet

   double A = 2.0;                      // Количество карандашей у Васи
   int    Y = 3;                        // Количество ответов Пети
   int    F = A + Y;                    // Общее количество

und im zweiten Beispiel ist die Variable double

   double A = 2.0;                   // Количество карандашей у Васи
   int    Y = 3;                     // Количество ответов Пети
   double F = A + Y;                 // Общее количество

Leider verstehe ich die Logik der Umstellung immer noch nicht. Wenn in der ersten Variante klar ist, warum int der Variablen F zugewiesen wird (d. h. nach der Regel der impliziten Typkonvertierung), warum wird dann in der zweiten Variante double.... zugewiesen verwirrt mich total.

Bitte klären Sie, was ich in meinen Ausführungen übersehen haben könnte.

Ich danke Ihnen im Voraus.

 
wolf05632:

Ich habe es versucht, danke, aber es hat nicht funktioniert. In der Tabelle war nichts zu sehen. Vielleicht habe ich etwas missverstanden?

Haben Sie den gesamten Code kopiert oder nur das, was in der Funktion start() stand? Das ist wichtig!

wolf05632:

Das einzige, was ich verstanden habe, ist das Wichtigste: Die Elemente im Puffer müssen hintereinander stehen (1,2,3...), d.h. ohne Lücken (1,3,5...) und JEDEM! Element im Puffer muss ein Wert zugewiesen sein! :-)
Sie haben sich geirrt! :)) Zum Beispiel sind beim Zickzack nicht alle Elemente des Puffers gefüllt. Außerdem müssen Sie nicht alle Pufferelemente für Symbole ausfüllen.
 
Geowind64:

Roman, danke für die Antwort..... Leider verstehe ich eine Sache immer noch nicht. Im Lehrbuch, https://book.mql4.com/ru/basics/expressions, unter "Type Adduction. Option 4.1. Berechnung des Ergebnisses eines Integer-Typs

und die Variante 4.2. Eine ähnliche Situation tritt auf, wenn ein Ergebnis als Wert eines reellen Typs gesucht wird", die gleiche Formel ist gegeben, aber in einem Fall wird der Typ der Variablen F als int bezeichnet

und im zweiten Beispiel ist die Variable bereits ein Double

Leider verstehe ich die Logik der Umstellung immer noch nicht. Wenn in der ersten Variante klar ist, warum int der Variablen F zugewiesen wird (d. h. nach der Regel der impliziten Typkonvertierung), warum wird dann in der zweiten Variante double.... hat mich völlig verwirrt.

Bitte erklären Sie mir, was ich in meiner Erklärung übersehen haben könnte.

Vielen Dank im Voraus.



n


Der Interanger-Typ ist ein Duble-Typ, der Duble-Variablen-Typ hat einen größeren Bereich, so dass es nicht möglich ist, dass Variablen in einem Ausdruck "die Möglichkeit" haben, von verschiedenen Typen zu sein, und das Ergebnis ist eine Variable, die einen engeren Bereich von akzeptierten Werten hat, in diesem Fall, der Interanger-Typ. D.h., wenn mindestens eine Variable in einem Ausdruck vom Typ duble ist, muss und kann auch das Ergebnis im Bereich von duble liegen, sonst kommt es zu einem Kompilierfehler - type mismatch.

Einzelheiten finden Sie hier.

 
Roman.:


Integer ist ein Duble-Typ, und Duble-Variablen haben einen breiteren Anwendungsbereich, so dass es nicht möglich ist, dass Variablen in einem Ausdruck "die Möglichkeit" haben, von verschiedenen Typen zu sein, und das Ergebnis ist eine Variable, die einen engeren Bereich von akzeptierten Werten hat, in diesem Fall der Typ Integer. D.h., wenn mindestens eine Variable in einem Ausdruck vom Typ duble ist, muss und kann auch das Ergebnis im Bereich von duble liegen, sonst kommt es zu einem Kompilierfehler - type mismatch.

Weitere Einzelheiten finden Sie hier.


Ich verwende oft die implizite Typkonvertierung. Aber ich muss unnötige Klammern verwenden.
 

Leute, was bedeutet #INF - ist es außerhalb des zulässigen Bereichs von double? siehe zweite Zeile von oben (es zählt das Produkt von double TWR, nämlich sein vorheriger Wert wird mit dem nächsten multipliziert). Wie werden diese Werte, die von der TWR-Variablen genommen werden, korrekt gezählt?

 
Geowind64:

Wenn Sie diesen Abschnitt des Lehrbuchs aufmerksam lesen, werden Sie feststellen, dass Sie sich zunächst den Ausdruck links von der Zuordnung "=" ansehen müssen:

   A + Y

Die Regel besagt:

  • Wenn der Typ des Ausdrucks rechts vom Zuweisungszeichen nicht mit dem Typ der Variablen links vom Zuweisungszeichen übereinstimmt, wird der Wert des Ausdrucks in den Typ der Variablen links vom Zuweisungszeichen umgewandelt; dies wird als Zieltypkonvertierung bezeichnet;

A ist eine Variable vom Typ double auf der linken Seite, und der Wert von A+Y ist eine Zahl vom Typ double.

Achten Sie dann auf den Typ der Variablen, der der Ausdruck zugewiesen ist.

Im ersten Fall: "Zunächst wird der Typ des Ausdrucks A+Y in den Typ int umgewandelt (gemäß der Regel für die Berechnung von Ganzzahlen), und dann wird dieses Ergebnis zum Wert der Ganzzahlvariablen F".

Im zweiten Fall: "Der Zieltyp der Variablen F (links vom Zuweisungszeichen), in diesem Fall der Typ double, ist der gleiche wie der Typ double des Ausdrucks A+Y, so dass keine Zieltypkonvertierung stattfindet".

Verstehen? :)))

 
Roman.:

Leute, was bedeutet #INF - ist es außerhalb des zulässigen Bereichs von double? siehe die zweite Zeile von oben (es zählt das Produkt von double TWR, nämlich sein vorheriger Wert wird mit dem nächsten multipliziert). Wie werden DIESE Werte der TWR-Variablen korrekt gezählt?

Im Allgemeinen ist INFINITY (kurz INF ) unendlich! :)) Ja, es stellt sich heraus, dass Double nicht genügend Leistung (Speicher) hat, um eine so große Zahl zu speichern.

Und wie man richtig rechnet, kann ich nur raten... Eigenen Typ erstellen, bedingt: Speichern in zusätzlicher Variable Ziffernkapazität, und doppelte Multiplikation mit 10^n, wobei n die Ziffernkapazität ist. Aber in diesem Fall geht die Genauigkeit verloren, und ich sehe, dass Ihre Genauigkeit immer schlechter wird...

Aber vielleicht ist es einfacher, die Logik der Berechnungen zu ändern? :))) Oder vielleicht liegt irgendwo ein Fehler vor.