Fehler, Irrtümer, Fragen - Seite 1335

 

Im Quellcode des Indikators Fractals.mq5 gibt es solche Einträge zur Berechnung von Fraktalen (Zeilen 74 und 79):

//---- Upper Fractal
if(high[i]>high[i+1] && high[i]>high[i+2] && high[i]>= high[i-1] && high[i]>= high[i-2])

//---- Lower Fractal
if(low[i]<low[i+1] && low[i]<low[i+2] && low[i]<= low[i-1] && low[i]<= low[i-2])

Bei diesen Berechnungen verwirren mich die Gleichheitszeichen in >= und <= (in rot).

Ich war immer der Meinung, dass ein Aufwärtsfraktal entsteht, wenn in einer Kombination von mindestens fünf Balken der durchschnittliche Balken das höchste Maximum aufweist, d. h. immer über den beiden benachbarten Hochpunkten auf der linken und rechten Seite liegt (nicht über oder gleich). Jeweils mit dem Fraktal nach unten. Im obigen Teil des Codes können Sie sehen, dass Gleichheit erlaubt ist. Bitte prüfen Sie, ob ein Fehler im Code von Fractals.mq5 vorliegt.

 

Ich habe ein Signal, die Überwachung zeigt einen 100-prozentigen Dump, das Konto ist in Ordnung, ich habe drei Tage lang sowohl beim Service Desk als auch bei den Mitarbeitern des Unternehmens angerufen. Keine Antwort...

Wie lässt sich das Problem lösen....?

 
Stanislav Olhovsky:

Ich habe ein Signal, die Überwachung zeigt einen 100-prozentigen Dump, das Konto ist in Ordnung, ich habe den dritten Tag am Telefon geklopft, sowohl beim Service Desk als auch bei den Mitarbeitern des Unternehmens. Keine Antwort...

Wie lässt sich das Problem lösen....?

Sie sollten nicht mehr abheben, als Sie verdient haben, denn dann geht die Saldokurve nicht auf Null.
 

Ich habe an "Innovations in favourites"geschrieben und es herrscht Schweigen. Ich werde hier schreiben:

Windows 10 x64, Mozilla Firefox 39.0. Ich kann keine angehängten Bilder oder Dateien an mein persönliches Konto senden...

 
Karputov Vladimir:
Sie sollten nicht mehr abheben, als Sie verdient haben, denn dann geht die Saldokurve nicht auf Null.

Das Signal funktioniert seit fast 4 Monaten, nur ribate Ergänzungen, niemand hat dort etwas zurückgezogen, alles war normal, stabiles Wachstum... Im Terminal sind die Daten normal und in einer anderen Online-Überwachung ....

Screenshot von mybook beigefügt, dort ist alles normal.

Antwort von Broker, die Geschichte ist für 1 Monat gespeichert, aber dann zwei oder drei Monate vor auf Signale wäre das gleiche gewesen...

Dateien:
Error.png  36 kb
 
Es geht wieder um das "Private". Die Gelenke gehen weiter...
 

Liebe Entwickler!

Der Band-Indikator und der iBands-Indikator weisen unterschiedliche Werte auf. Im Indikator Bands wird die Standardabweichung mit der Funktion StdDev_Func berechnet, während sie im Indikator iBands mit der Methode GetData berechnet wird. Wenn man vergleicht, wie das Diagramm gezeichnet wird, kann man einen großen Unterschied im Zustand der Puffer erkennen, die für die Abweichungsniveaus verantwortlich sind. Ich hatte dieses Problem in MQL4, vielleicht ist es dasselbe in MQL5.

 

Ich hatte vorher nicht viel darauf geachtet, aber jetzt, bei der Arbeit mit großen Arrays von Klassenobjekten, ist mir ein zu großer Speicherverbrauch aufgefallen. Ich habe es mit sizeof() überprüft und eine absolut leere Klasse benötigt 16 Bytes. Und wenn man bedenkt, dass die Klassen hier verwaltet werden, kommen noch einmal 8 Bytes pro Zeiger hinzu. Insgesamt sind es 24 Bytes. Das ist zu teuer.

Ich habe die Dokumentation durchgesehen und gesehen, was ich dort gefunden habe:

объекты классов всегда имеют таблицу виртуальных функций, даже если в классе не объявлено ни одной виртуальной функции.

Es stellt sich die Frage, warum einfache Klassen (die nicht an der Vererbung beteiligt sind) die virtuelle Funktionstabelle benötigen, da alles über diese Klassen in der Kompilierungsphase bekannt ist.

Es stellt sich heraus, dass die Methoden darin auf die gleiche Weise aufgerufen werden wie virtuelle Methoden, d.h. es gibt eine zusätzliche Umleitung des Zugriffs über die Tabelle. Und wo bleibt die gelobte Compiler-Optimierung? Wie können wir danach einen Vergleich der Leistung mit C++ anstellen?

 

Sie irren sich.

Wenn eine Methode nicht als virtuell beschrieben ist, wird sie direkt aufgerufen. Darüber hinaus gibt es Optimierungen zur Beseitigung der Virtualität. Der Destruktor ist immer virtuell, was zu einer virtuellen Tabelle führt.

Etwa 24 Bytes ist eine seltsame Aussage - die Objektreferenz bezieht sich nicht auf die Größe.

Klassen in verwalteten/sicheren Sprachen enthalten immer Metainformationen, also ist das hier alles vernünftig. Wenn Sie reine Größe wollen, verwenden Sie Strukturen.

 
Renat Fatkhullin:

Der Destruktor ist immer virtuell, was zu einer virtuellen Tabelle führt.

Warum also sollte der Destruktor nicht optimiert werden? Nur wegen des Destruktors müssen wir zusätzliche 8 Bytes speichern...

Die 24 Bytes sind eine seltsame Aussage - die Objektreferenz hat nichts mit der Größe zu tun.

Nun, ich weiß einfach nicht, wie dort alles umgesetzt wird. Angenommen, Sie haben ein Array von Objekten:

CObj array[];

Speichert das System Referenzen (Zeiger) für jedes Element?

Wenn Sie reine Größe wollen, verwenden Sie Strukturen.

Aber man kann keinen Zeiger auf eine Struktur nehmen, und das mindert die Bequemlichkeit, sie zu benutzen. Deshalb muss man manchmal eine schmerzhafte Entscheidung treffen... Wenn man es schafft, die Klassengröße zu reduzieren, wäre das wunderbar. Und wenn man auch einen Zeiger auf die Struktur hat, ist alles in Ordnung.)