Fehler, Irrtümer, Fragen - Seite 1954

 
Andrey Barinov:
Bringen Sie die Wegweiser zurück.
Danke für diese Idee. Ich hatte sie ganz vergessen.
 
Alexey Kozitsyn:
Danke für diese Idee. Ich hatte sie völlig vergessen.

Das ist merkwürdig. Ich erhalteeinen Kompilierungsfehler von Ihrem Code.

object of 'B' cannot be returned, copy constructor 'B::B(const B &)' not found

In der Beschreibung der Funktion GetBMember (die im Klartext besagt, dass eine Kopie erstellt werden soll). Ist es die neueste Version des Compilers?

Wenn dieses Problem durch Hinzufügen eines Kopierkonstruktors B behoben ist, können Sie dann const B von der GetBMember-Methode zurückgeben.

Dann flucht der Compiler bei dem Versuch, einen Reset der zurückgegebenen Variablen vorzunehmen:

'Reset' - call non-const method for constant object

 
Stanislav Korotky:

Das ist merkwürdig. Ich erhalte einen Kompilierungsfehler von Ihrem Code.

object of 'B' cannot be returned, copy constructor 'B::B(const B &)' not found

Zur Beschreibung der Funktion GetBMember. Ist es die neueste Version des Compilers?

Wenn dieses Problem durch Hinzufügen eines Kopierkonstruktors B behoben ist, können Sie dann const B von der GetBMember-Methode zurückgeben.

Dann wird der Compiler fluchen, wenn Sie versuchen, einen Reset der zurückgegebenen Variablen durchzuführen:

'Reset' - call non-const method for constant object

Dieser Code ist nur ein Beispiel, das im Browser geschrieben wurde. Ich habe mich nur gefragt, warum der Compiler nichts meldet. Aber ich habe es bereits herausgefunden.

Und, es gibt keine Konstruktoren in meinem Beispiel überhaupt:)

 

Hallo! 2017.08.03_18:45 GMT+3. Ich habe eine OOP-Datei SignalIchimoku.mqh geschrieben. Aber wenn ich brauche, um einfache Berechnungen zu LongCondition() und ShortCondition() in einer separaten Funktion zu tun, Funktion geschrieben wird, Compiler gibt 0 Fehler, 0 Warnungen. Aber diese Funktion funktioniert nicht, es werden keine Berechnungen durchgeführt. Das Programm öffnet die Transaktionen nicht. Ich habe es überprüft: Ich habe den Wert der Variable Print() in die Funktion eingefügt. Diese Funktion ähnelt den Funktionen StateStoch(int ind), ExtStateStoch(int ind) und CompareMaps() in SignalStoch.mqh , einer Standarddatei der Standardbibliothek. In der Standarddatei funktioniert alles, aber bei mir funktioniert es nicht. Und warum? Sind es wieder "einfache Regeln"? Wer weiß - sagen Sie es mir. Wenn Sie Einzelheiten benötigen oder Fragen haben, schreiben Sie uns. 18:59 GMT+3.

Dateien:
 

CCanvas. Es gibt einen kleinen Fehler in der Implementierung der Funktion FillCircle. Sie ist ein Pixel schmaler, wie in dieser GIF-Animation zu sehen ist:

Außerdem ist der Algorithmus sehr unvernünftig konstruiert, da etwa 30 % der Punkte doppelt gezeichnet werden. Dies lässt sich leicht durch das Verschieben von zwei Codezeilen lösen, was im Durchschnitt eine Geschwindigkeitssteigerung von 30 % bedeutet.
Hier ist die Originalversion von FillCircle:

void CCanvas::FillCircle(int x,int y,int r,const uint clr)
  {
   int f   =1-r;
   int dd_x=1;
   int dd_y=-2*r;
   int dx  =0;
   int dy  =r;
//--- draw
   while(dy>=dx)
     {
      LineHorizontal(x-dx,x+dx,y-dy,clr);
      LineHorizontal(x-dx,x+dx,y+dy,clr);
      LineHorizontal(x-dy,x+dy,y-dx,clr);
      LineHorizontal(x-dy,x+dy,y+dx,clr);
      //---
      if(f>=0)
        {
         dy--;
         dd_y+=2;
         f+=dd_y;
        }
      dx++;
      dd_x+=2;
      f+=dd_x;
     }
  }

Und hier ist die korrigierte Version:

void CCanvas::FillCircle(int x,int y,int r,const uint clr)
  {
   int f   =1-r;
   int dd_x=1;
   int dd_y=-2*r;
   int dx  =0;
   int dy  =r;
//--- draw
   while(dy>=dx)
     {
      LineHorizontal(x-dy-1,x+dy,y-dx,clr);
      LineHorizontal(x-dy-1,x+dy,y+dx,clr);
      //---
      if(f>=0)
        {
         LineHorizontal(x-dx-1,x+dx,y-dy,clr);
         LineHorizontal(x-dx-1,x+dx,y+dy,clr);
         dy--;
         dd_y+=2;
         f+=dd_y;
        }
      dx++;
      dd_x+=2;
      f+=dd_x;
     }
  }
 

Über schwebende Bestellung wird gelöscht (nicht genug Geld)

Die Arbeit des Expert Advisors ist dann gültig, wenn keine Fehler während seines Betriebs auftreten.

Der schwebende Auftrag wird gelöscht (nicht genug Geld) ist ein Fehler.

Das Problem ist, dass es theoretisch unmöglich ist, die erforderliche Marge für die Eröffnung eines Auftrags zu ermitteln, wenn dieser mit einem Slippage eröffnet wird.

Wir haben zum Beispiel festgestellt und berechnet, dass genügend Geld vorhanden ist, um einen schwebenden Verkaufsstoppauftrag bei 1,500 zu eröffnen. (Bei 1,499 gibt es keine mehr.)

Der aktuelle Kurs beträgt 1,501.

Der nächste Tick und wir haben einen Preis von 1,499.

Beim Versuch, einen Auftrag zu öffnen, ist ein Fehler aufgetreten.

Daher haben wir zunächst die Situation betrachtet, in der dieser Fehler nicht zu 100 % vermieden werden kann.

Oder habe ich etwas übersehen?

 

Ich kann nicht herausfinden, wie ich mqh-Dateien aus einem Unterverzeichnis des OrdnersExperts abrufen kann.

Wie kann man mqh-Dateien aus dem One-Ordner in den Two-Ordner ziehen?

 
Vladimir Pastushak:

Ich kann nicht herausfinden, wie ich mqh-Dateien aus einem Unterverzeichnis des OrdnersExperts abrufen kann.

Wie kann man mqh-Dateien aus dem One-Ordner in den Two-Ordner ziehen?


Lösung gefunden. Wenn sich die Datei, mit der Sie den Injektor verbinden wollen, in Test\One befindet und der Injektor in Test\Two, dann...

Das geht so:

#include "..\Two\name.mqh""
Es stellt sich heraus: ..\ - von One gehen Sie zu Test und Two\name.mqh - von Test gehen Sie zu Two und wählen Sie den Dateinamen.mqh
 
das Profil zeigt keine "Meine Nachrichten" an

und in den Profilen anderer Leute
 
Vladimir Pastushak:

Lösung gefunden. Wenn sich eine Datei, mit der Sie eine Verbindung herstellen wollen, in Test\One befindet und eine Verbindung in Test\Two, dann...

Zum Beispiel so:

Es stellt sich heraus: ..\ - von One auf Test und Two\name.mqh gehen - von Test auf Two gehen und file name.mqh auswählen

Es gibt solche Konstrukte:

#include "..\..\Two\name.mqh"