Fehler in SetTypeFillingBySymbol

 

Hallo,

hat jemand das gleiche Problem oder kennt eine Lösung?

Ich erstelle mir einen EA, der soll mit der Funktion SetTypeFillingBySymbol den Type der Order Filling setzten, um mit Buy / Sell dann eine Order zu eröffnen.

Die Funktion gibt aber immer false zurück (true – erfolgreiche Ausführung, false – die Ausführungspolitik konnte nicht definiert werden).

Es gibt in ENUM_ORDER_TYPE_FILLING 3 Identifikatoren ORDER_FILLING_FOK, ORDER_FILLING_IOC und ORDER_FILLING_RETURN.

In der Klasse CTrade ist ORDER_FILLING_FOK als standart vorgegeben, SetTypeFillingBySymbol kann aber nur die ersten beiden Identifikatoren einstellen.

Deshalb glaube ich, das hier ein fehler in SetTypeFillingBySymbol vorliegt.

Mein Broker ist GBE Brokers und in der Symbol Spezifikation steht bei Orderfüllung "Nichts".

Bei Google und im Forum konnte ich dazu nichts finden.


Vielen Dank im Voraus

VG

Thorsten

 
Thorsten Fischer:

Hallo,

hat jemand das gleiche Problem oder kennt eine Lösung?

Ich erstelle mir einen EA, der soll mit der Funktion

Thorsten Fischer:

Hallo,

hat jemand das gleiche Problem oder kennt eine Lösung?

Ich erstelle mir einen EA, der soll mit der Funktion SetTypeFillingBySymbol den Type der Order Filling setzten, um mit Buy / Sell dann eine Order zu eröffnen.

Die Funktion gibt aber immer false zurück (true – erfolgreiche Ausführung, false – die Ausführungspolitik konnte nicht definiert werden).

Es gibt in ENUM_ORDER_TYPE_FILLING 3 Identifikatoren ORDER_FILLING_FOK, ORDER_FILLING_IOC und ORDER_FILLING_RETURN.

In der Klasse CTrade ist ORDER_FILLING_FOK als standart vorgegeben, SetTypeFillingBySymbol kann aber nur die ersten beiden Identifikatoren einstellen.

Deshalb glaube ich, das hier ein fehler in SetTypeFillingBySymbol vorliegt.

Mein Broker ist GBE Brokers und in der Symbol Spezifikation steht bei Orderfüllung "Nichts".

Bei Google und im Forum konnte ich dazu nichts finden.


Vielen Dank im Voraus

VG

Thorsten

den Type der Order Filling setzten, um mit Buy / Sell dann eine Order zu eröffnen.

Die Funktion gibt aber immer false zurück (true – erfolgreiche Ausführung, false – die Ausführungspolitik konnte nicht definiert werden).

Es gibt in ENUM_ORDER_TYPE_FILLING 3 Identifikatoren ORDER_FILLING_FOK, ORDER_FILLING_IOC und ORDER_FILLING_RETURN.

In der Klasse CTrade ist ORDER_FILLING_FOK als standart vorgegeben, SetTypeFillingBySymbol kann aber nur die ersten beiden Identifikatoren einstellen.

Deshalb glaube ich, das hier ein fehler in SetTypeFillingBySymbol vorliegt.

Mein Broker ist GBE Brokers und in der Symbol Spezifikation steht bei Orderfüllung "Nichts".

Bei Google und im Forum konnte ich dazu nichts finden.


Vielen Dank im Voraus

VG

Thorsten

In der Dok (im Editor F1) steht:

+Wenn für das Symbol gleichzeitig zwei Politiken der Ausführung SYMBOL_FILLING_FOK und SYMBOL_FILLING_IOC erlaubt sind, wird der Order der Wert ORDER_FILLING_FOK zugewiesen.

und dort klick mal auf SYMBOL_FILLING_MODE!

 

Hallo Carl,


was meinst du?

Doku etc. alles gelesen, trotzdem kann die Funktion ja den dritten Wert gar nicht setzten.

Außerdem kommt von der Funktion immer ein false, was ja auf eine nicht korrekte ausführung hindeutet.

true – erfolgreiche Ausführung, false – die Ausführungspolitik konnte nicht definiert werden

vg

Thorsten

 
Was hast du denn vor? Wie sieht dein code aus?
 
Thorsten Fischer:

Hallo Carl,


was meinst du?

1.) Doku etc. alles gelesen, trotzdem kann die Funktion ja den dritten Wert gar nicht setzten.

2.) Außerdem kommt von der Funktion immer ein false, was ja auf eine nicht korrekte ausführung hindeutet.

true – erfolgreiche Ausführung, false – die Ausführungspolitik konnte nicht definiert werden

vg

Thorsten

1) Es können nur zwei gesetzt werden! Welchen Dritten meinst Du, wenn Du sagst, Du hast die Doks. gelesen?

2) Vielleicht lässt der Broker keine Änderung zu?

 
amando:
Was hast du denn vor? Wie sieht dein code aus?

Hallo amando,

jetzt erstmal Buy und Sell Order ohne fehler ausführen.

Die Trade Klasse stellt dafür ja einiges an Funktionen zur Verfügung.

Über die Funktion SetTypeFillingBySymbol soll unabhängig vom Broker und Symbol die richtige Filling Methode benutzt/gesetzt werden.

#include <Trade\Trade.mqh>
CTrade TestTrade;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Print("Start Test");
   TestTrade.SetExpertMagicNumber(1234);
   if(TestTrade.SetTypeFillingBySymbol(Symbol()))
      Print("True SetTypeFillingBySymbol");
   else
      Print("False SetTypeFillingBySymbol");
   if(TestTrade.Buy(0.01))
      Print("True Buy");
   else
      Print("False Buy");
//---
   return(INIT_SUCCEEDED);
  }

Das ist die Ausgabe im Experten-Tab:

2020.02.10 19:10:19.739    Trade-Buy (EURUSDc,M1)    Start Test
2020.02.10 19:10:19.739    Trade-Buy (EURUSDc,M1)    False SetTypeFillingBySymbol
2020.02.10 19:10:19.739    Trade-Buy (EURUSDc,M1)    False Buy

vg

Thorsten

 
Carl Schreiber:

1) Es können nur zwei gesetzt werden! Welchen Dritten meinst Du, wenn Du sagst, Du hast die Doks. gelesen?

2) Vielleicht lässt der Broker keine Änderung zu?

Hallo Carl,

zu 1)

Es geht um die Variable m_type_filling

//+------------------------------------------------------------------+
//| Set order filling type according to symbol filling mode          |
//+------------------------------------------------------------------+
bool CTrade::SetTypeFillingBySymbol(const string symbol)
  {
//--- get possible filling policy types by symbol
   uint filling=(uint)SymbolInfoInteger(symbol, SYMBOL_FILLING_MODE);
   if((filling&SYMBOL_FILLING_FOK)==SYMBOL_FILLING_FOK)
     {
      m_type_filling=ORDER_FILLING_FOK;
      return(true);
     }
   if((filling&SYMBOL_FILLING_IOC)==SYMBOL_FILLING_IOC)
     {
      m_type_filling=ORDER_FILLING_IOC;
      return(true);
     }
//---
   return(false);
  }


zu 2)    Genau darum geht es ja bei dieser Funktion, vom Broker für die Symbole die entsprechende Einstellung auslesen und dann für die Order richtig setzen.


vg

Thorsten

         

 

Welche Version hast Du?

Ich habe MT5 b 2316:

SetTypeFillingBySymbol

Setzt den Typ derAusführung einer Order entsprechend den Einstellungen des angegebenen Symbols.

bool   SetTypeFillingBySymbol(
   const string   symbol      // Name des Symbols
   )

Parameter

symbol

[in] Name des Symbols, in welchem SYMBOL_FILLING_MODE zulässige Politiken der Ausführung von Orders beinhaltet.

Rückgabewert

true – erfolgreiche Ausführung, false – die Ausführungspolitik konnte nicht definiert werden.

Hinweis

+Wenn für das Symbol gleichzeitig zwei Politiken der Ausführung SYMBOL_FILLING_FOK und SYMBOL_FILLING_IOC erlaubt sind, wird der Order der Wert ORDER_FILLING_FOK zugewiesen.


bzw:


 
Carl Schreiber:

Welche Version hast Du?

Ich habe MT5 b 2316:

bzw:


Hallo Carl,

Ich habe MT5 2280


Deinen hinweis habe ich auch gelesen, jedoch der Code aus der Klasse CTrade::SetTypeFillingBySymbol kann m_type_filling nur 2 Zustände zuweisen.

Das ist der Orginal Code und es sind nur 2 IF() Anweisungen, also nur 2 zustände.

Beispiel:

Der EA wird bei verschiedenen Brokern benutzt und die wollen über diese Funktion folgende Filling Methode einstellen:

Broker A = ORDER_FILLING_FOK

Broker B = ORDER_FILLING_IOC

Broker C = ORDER_FILLING_RETURN

Durch die fehlerhafte Funktion würde der EA bei Broker C nie eine Order ausführen.

Im moment würde, wenn mein EA fertig wäre, der EA immer abbrechen, da egal welche ORDER_FILLING Methode ich Voreinstelle, ein false zurück gegeben wird, was ja Aussagt: die Ausführungspolitik konnte nicht definiert werden.

vg

Thorsten

 

Du musst die filling methode gar nicht setzen in der ctrade klasse

probiers mal ohne

 
amando:

Du musst die filling methode gar nicht setzen in der ctrade klasse

probiers mal ohne

was soll ich wo ohne probieren?

Wenn ich die CTrade Klasse benutze, ist ja schon ORDER_FILLING_FOK automatisch gesetzt.

Und wie ich Carl schon geschrieben habe, möchte ich den EA später bei verschiedenen Brokern ausführen und nicht jedesmal das dann Händisch einstellen.

Dafür gibt es ja die Klassen mit Ihren Funktionen, oder ?


vg

Thorsten