Fehler, Irrtümer, Fragen - Seite 1742

 

In der Hilfe heißt es:

In den Ausführungsmodi "By Market" und "Exchange" ist die Ausführungspolitik "Return" immer für alle Auftragsarten erlaubt. Die Zulässigkeit anderer Typen wird mit den Eigenschaften SYMBOL_FILLING_FOK und SYMBOL_FILLING_IOC überprüft.

Aber nicht immer. Auf Robo-Konten funktioniert "Return" also nicht, weder auf Pro- noch auf ECN-Konten.

 
Andrey Dik:

In der Hilfe heißt es:

In den Ausführungsmodi "By Market" und "Exchange" ist die Ausführungspolitik "Return" für alle Auftragsarten immer erlaubt. Die Zulässigkeit anderer Typen wird mit den Eigenschaften SYMBOL_FILLING_FOK und SYMBOL_FILLING_IOC überprüft.

Aber nicht immer. Auf Robo-Konten funktioniert die "Rückgabe" also nicht, weder auf Pro- noch auf ECN-Konten.

Ich bin gerade auf einen Roboter gestoßen

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

fxsaber, 2016.10.20 08:24

SB auf allen Handelsservern
//+------------------------------------------------------------------+
//| Get the property value "ORDER_TYPE_FILLING"                      |
//+------------------------------------------------------------------+
ENUM_ORDER_TYPE_FILLING COrderInfo::TypeFilling(void) const
  {
   return((ENUM_ORDER_TYPE_FILLING)OrderGetInteger(ORDER_TYPE_FILLING));
  }

ALWAYS im Tester gibtENUM_ORDER_TYPE_FILLING::ORDER_FILLING_RETURN zurück.

Wenn Sie also in OrderModify über COrderInfo::TypeFilling() die Füllung einstellen, wird im gleichen RoboForexEU-MetaTrader 5 ein logischer Fehler [Unsupported filling mode] angezeigt. Dieser Fehler tritt jedoch nicht in MetaQuotes-Demo auf - falsch konfigurierter Server des Entwicklers?



 
Andrey Dik:

In der Hilfe heißt es:

In den Ausführungsmodi "By Market" und "Exchange" ist die Ausführungspolitik "Return" für alle Auftragsarten immer erlaubt. Die Zulässigkeit anderer Typen wird mit den Eigenschaften SYMBOL_FILLING_FOK und SYMBOL_FILLING_IOC überprüft.

Aber nicht immer. Zum Beispiel funktioniert "Return" nicht auf Robo-Konten, weder auf Pro- noch auf ECN-Konten.

Ich habe den Verdacht, dass die "Return"-Einstellung bei allen Handelsservern voreingestellt ist (zumindest hat FxPro so geantwortet.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Befüllungsmodi auf Servern

Karputov Vladimir, 2016.10.14 19:18

Befüllungsmodus "Rücklauf":

Rückkehr

Kein Ausweis

Dieser Modus wird für Markt- (Kauf und Verkauf), Limit- und Stop-Limit-Aufträge und nur in den Modi "Market Execution" und "Exchange Execution" verwendet. Im Falle einer Teilausführung wird ein Markt- oder Limitauftrag mit einem Restvolumen nicht entfernt, sondern bleibt in Kraft.

Hier die Antwort des Maklerunternehmens zumModus "Rückgabe"

Unser MT5-Experte hat bei Metaquotes bestätigt, dass die Rendite standardmäßig verwendet wird, wenn Sie bei der Befüllung nichts auswählen.

)

Mit anderen Worten: Es handelt sich um eine Art Stummel.
 
Karputov Vladimir:

Es besteht der Verdacht, dass die Fülleinstellung "Return" die Standardeinstellung für alle Handelsserver ist (zumindest FxPro reagierte auf die gleiche Weise).

Mit anderen Worten: Es handelt sich um eine Art Stummel.

In einigen Unternehmen (insbesondere MT5 hat vor kurzem begonnen) ist es notwendig, die Art der Füllung angeben - wenn Sie nicht angeben, wird es einen Fehler.

Obwohl der Server in Robo bei der "Return"-Prüfung "true" zurückgibt, funktioniert diese Art des Ausfüllens in der Tat nicht. Kurz gesagt, es ist ein totales Durcheinander mit diesen Füllungen.

 
Kommentare, die für dieses Thema nicht relevant sind, wurden nach "CHART_SHOW_OHLC für OBJ_CHART" verschoben.
 
Offensichtlich bin ich langsam.
class A
{
public:
  virtual int f()
  {
    Print(__FUNCSIG__);
    
    return(0);
  }
};

class B : public A
{
public:
  virtual int f()
  {
    Print(__FUNCSIG__);
    
    return(0);
  }
};

void OnStart()
{
//  A* b = new B;
  B* b = new B;
  
  ((A*)b).f();

  delete b;
}
Verstehe ich es richtig, dass, wenn virtuelle in descendant überschrieben wird, dann die Basis virtuelle nie erreicht werden kann? D.h. es gibt keine Möglichkeit, A::f von b aus aufzurufen.
 
fxsaber:
Verstehe ich das richtig, dass, wenn virtual in descendant überschrieben wird, die Basis virtual nie erreicht werden kann? D.h. es gibt keine Möglichkeit, A::f von b aus aufzurufen.

Fast. In C++ ist der folgende Eintrag erlaubt:

B* b = new B;
b.A::f();

Aber das ist hier nicht möglich. Daher nur und ausschließlich per Krücke:

class B : public A
{
public:
  virtual int f()
  {
    Print(__FUNCSIG__);
    
    return(0);
  }
  
  int f1()
  {
    return A::f();
  }
};
 
Комбинатор:

Fast. In C++ ist der folgende Eintrag erlaubt:

B* b = new B;
b.A::f();

Dann verstehe ich nicht, warum es in C++ funktioniert. Schließlich sollte eine überschriebene virtuelle Methode in der Tabelle der virtuellen Methoden vollständig überschrieben werden. Und von der Basis sollte keine Spur mehr zu finden sein.

Aber das ist hier nicht möglich. Deshalb ist es auch nur eine Krücke:

class B : public A
{
public:
  virtual int f()
  {
    Print(__FUNCSIG__);
    
    return(0);
  }
  
  int f1()
  {
    return A::f();
  }
};
Dann wird A* b = new B; nicht funktionieren.
 
fxsaber:

Schließlich sollte die überschriebene virtuelle Methode in der Tabelle der virtuellen Methoden vollständig überschrieben werden. Und von der Basismethode sollte keine Spur mehr zu sehen sein.

Wenn der Typ explizit angegeben wird, wird die Methode direkt aufgerufen, ohne die virtuelle Funktionstabelle zu verwenden.

Auf diese Weise kann sogar eine rein virtuelle Funktion aufgerufen werden, wenn sie einen Körper hat.

fxsaber:
Then A* b = new B; wird nicht funktionieren.

In diesem Fall brauchen Sie eine andere Krücke - verschieben Sie die Funktionsinterna in der Basisklasse in eine nicht-virtuelle Methode und rufen Sie sie innerhalb der virtuellen Methode auf. Dann könnten wir explizit nicht-virtuelle Methoden von der Basisklasse und dem Erben aufrufen.

 
Комбинатор:

Wenn der Typ explizit angegeben wird, wird die Methode direkt aufgerufen, ohne die virtuelle Funktionstabelle zu verwenden.

Auch eine rein virtuelle Funktion kann auf diese Weise aufgerufen werden, wenn sie einen Körper hat.

In diesem Fall brauchen wir eine andere Krücke, die darin bestünde, die Funktionsinterna in eine nicht-virtuelle Methode in der Basisklasse zu verschieben und sie innerhalb der virtuellen Methode aufzurufen. Dann könnten Sie die nicht-virtuelle Methode sowohl von der Basis als auch vom Nachkommen explizit aufrufen.

Verstanden, danke!