Fehler in SetTypeFillingBySymbol - Seite 3

 
amando:

Also ich bin mal raus, du willst ja nicht verstehen das du den filling type nicht brauchst und hast es nicht mal versucht.

da ist hilfe zwecklos

Hallo amando,

du mußt es schon mal lesen, ich habe oben geschrieben das ich diese benötige und :

Was keinen unterschied zu meiner Variante ist, da Buy als minimum das Volumen benötigt.

Buy gibt mir in beiden fällen ein "invalid fill" zurück.

Also habe ich es getestet. Aber ich muss mich korrigieren, Buy gibt mir natürlich ein false zurück da ja Bool Rückgabe.

Buy --> PositionOpen füllt die m_request und ruft die Funktion FillingCheck auf, die dann mit false beendet wird und dadurch auch PositionOpen --> Buy mit false beendet.

In m_result steht dann "invalid fill".

vg

Thorsten

 
Thorsten Fischer:

Hallo Carl,

ich dachte immer ein Forum ist für das Besprechen von Fehlern, Problemen, Verbesserung oder sonstigen Veränderungen da.

Wenn ich da falsch liege, sage mir bescheid, dann meide ich das Deutsche Forum.

Ich möchte nur einen Funktionierenden Code bzw. den Code richtig verstehen und dem entsprechend anwenden.

vg

Thorsten

  1. Das Problem ist nur, dass bei Deinem Problem Dir niemand, weder hier noch ein einem anderen Forum, helfen kann.

  2. Wenn Du etwas wartest, bis auch Du die neueste Releaseversion vom Broker bekommst,
    oder Dir inzwischen die Beta-Version selber herunter lädst, dann löst sich Dein Problem
    von selber auf, weil dann die dritte Option auch in der Dok. nicht mehr existiert.

  3. Alternativ kannst Du vorschlagen, wie Dir hier einer der Nutzer helfen könnte?
    Wir alle müssen mit dem zufrieden sein, was uns MQ (kostenlos) anbietet.

  4. Frag Deinen Broker, ober er außer den beiden Optionen noch eine dritte anbietet?
    Wenn nicht, könnte man auch vermuten, er kann es nicht, weil es die dritte Option nicht (mehr?) gibt.
 
Thorsten Fischer:

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.

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


  printf ("Start Test %s %s, Expert %s",AccountInfoString(ACCOUNT_COMPANY),
          EnumToString((ENUM_ACCOUNT_TRADE_MODE)AccountInfoInteger(ACCOUNT_TRADE_MODE)),
          (AccountInfoInteger(ACCOUNT_TRADE_EXPERT) ? "Allowed" : "Disabled"));
  TestTrade.SetExpertMagicNumber(1234);
//---
  if(TestTrade.SetTypeFillingBySymbol(Symbol()))
    Print("True SetTypeFillingBySymbol");
  else
    Print("False SetTypeFillingBySymbol");
  TestTrade.SetTypeFilling(ORDER_FILLING_RETURN);
  Print("SetTypeFillingBySymbol forced to ORDER_FILLING_RETURN");
//---
  if(TestTrade.Buy(0.01))
    Print("True Buy");
  else
    Print("False Buy");
2020.02.11 12:33:08.139    332422 (EURUSD,M1)    Start Test GBE Trading Technology Ltd ACCOUNT_TRADE_MODE_DEMO, Expert Disabled
2020.02.11 12:33:08.139    332422 (EURUSD,M1)    False SetTypeFillingBySymbol
2020.02.11 12:33:08.139    332422 (EURUSD,M1)    SetTypeFillingBySymbol forced to ORDER_FILLING_RETURN
2020.02.11 12:33:08.139    332422 (EURUSD,M1)    CTrade::OrderSend: exchange buy 0.01 EURUSD [auto trading disabled by server]
2020.02.11 12:33:08.139    332422 (EURUSD,M1)    False Buy

Auto-Trading ist auf meiner Seite deaktiviert, ist es auf Ihrer Seite erlaubt?

 
Alain Verleyen:


2020.02.11 12:33:08.139    332422 (EURUSD,M1)    Start Test GBE Trading Technology Ltd ACCOUNT_TRADE_MODE_DEMO, Expert Disabled
2020.02.11 12:33:08.139    332422 (EURUSD,M1)    False SetTypeFillingBySymbol
2020.02.11 12:33:08.139    332422 (EURUSD,M1)    SetTypeFillingBySymbol forced to ORDER_FILLING_RETURN
2020.02.11 12:33:08.139    332422 (EURUSD,M1)    CTrade::OrderSend: exchange buy 0.01 EURUSD [auto trading disabled by server]
2020.02.11 12:33:08.139    332422 (EURUSD,M1)    False Buy

Auto-Trading ist auf meiner Seite deaktiviert, ist es auf Ihrer Seite erlaubt?

Hallo Alain,

Auto Trading ist auch bei mir disabled by Server. Deswegen habe ich eine E-Mail an GBE geschrieben.

Der Broker hat mir geschrieben das er nicht SYMBOL_FILLING_FOK und SYMBOL_FILLING_IOC setzt.

So mit bleibt No identifier Fill Policy Return übrig.

//--- get possible filling policy types by symbol
   uint filling=(uint)SymbolInfoInteger(symbol, SYMBOL_FILLING_MODE);

Bei der Abfrage wird 0 in filling zurück gegeben.

Mit folgender Änderung funktioniert die Abfrage mit SetTypeFillingBySymbol richtig.

//+------------------------------------------------------------------+
//| 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);
     }
   else // Neu Hinzu
      if((filling&SYMBOL_FILLING_IOC)==SYMBOL_FILLING_IOC)
        {
         m_type_filling=ORDER_FILLING_IOC;
         return(true);
        }
      // Neu Hinzu anfang
      else   
        {
         m_type_filling=ORDER_FILLING_RETURN;
         return(true);
        }
      // Neu Hinzu ende
//---
   return(false);
  }

VG

Thorsten

 
Thorsten Fischer :

Hallo Alain,

Auto Trading ist auch bei mir disabled by Server. Deswegen habe ich eine E-Mail an GBE geschrieben.

Der Broker hat mir geschrieben das er nicht SYMBOL_FILLING_FOK und SYMBOL_FILLING_IOC setzt.

So mit bleibt No identifier Fill Policy Return übrig.

Bei der Abfrage wird 0 in filling zurück gegeben.

Mit folgender Änderung funktioniert die Abfrage mit SetTypeFillingBySymbol richtig.


VG

Thorsten

Ich stimme zu, das scheint ein Fehler in der Standardbibliothek zu sein. Es ist jedoch das erste Mal, dass ich einen Broker / ein Symbol sehe, bei dem weder FILLING_FOK noch FILLING_IOC verfügbar sind.

Wie auch immer, wenn der automatisierte Handel auf der Serverseite deaktiviert ist, spielt das alles keine Rolle. Dieser GBE-Server scheint falsch konfiguriert zu sein, EURUSD mit "Exchange" -Ausführung und FILLING_RETURN ergeben nur keinen Sinn.

 
Alain Verleyen:

Ich stimme zu, das scheint ein Fehler in der Standardbibliothek zu sein. Es ist jedoch das erste Mal, dass ich einen Broker / ein Symbol sehe, bei dem weder FILLING_FOK noch FILLING_IOC verfügbar sind.

Wie auch immer, wenn der automatisierte Handel auf der Serverseite deaktiviert ist, spielt das alles keine Rolle. Dieser GBE-Server scheint falsch konfiguriert zu sein, EURUSD mit "Exchange" -Ausführung und FILLING_RETURN ergeben nur keinen Sinn.

Hallo Alain,

bist du Programmierer für MQ ?

Ich habe bei GBE angefragt ob ich den Screenshot und die anderen Angaben veröffentlichen darf, ich warte noch auf eine Antwort.

Aber ich kann dir sagen, das in dem Tab "Trade" in dem Feld "Filling " kein hacken bei FOK und auch keiner bei IOC ist und somit None im Feld steht.

Wegen dem anderen Thema (Server) habe ich auch nachgefragt und warte noch auf eine Antwort.

Gruß

Thorsten

 
Carl Schreiber:
  1. Das Problem ist nur, dass bei Deinem Problem Dir niemand, weder hier noch ein einem anderen Forum, helfen kann.

  2. Wenn Du etwas wartest, bis auch Du die neueste Releaseversion vom Broker bekommst,
    oder Dir inzwischen die Beta-Version selber herunter lädst, dann löst sich Dein Problem
    von selber auf, weil dann die dritte Option auch in der Dok. nicht mehr existiert.

  3. Alternativ kannst Du vorschlagen, wie Dir hier einer der Nutzer helfen könnte?
    Wir alle müssen mit dem zufrieden sein, was uns MQ (kostenlos) anbietet.

  4. Frag Deinen Broker, ober er außer den beiden Optionen noch eine dritte anbietet?
    Wenn nicht, könnte man auch vermuten, er kann es nicht, weil es die dritte Option nicht (mehr?) gibt.

Hallo Carl,

zu 1. Bei meinem Problem kann mir nur ein MQ Programmierer helfen, Lösung habe ich gerade an Alain Verleyen (oben) gesendet.

zu 2. Ich habe mich bei deiner Aussage zu deiner Version geirrt. Deine Angabe "Ich habe MT5 b 2316" hatte ich das b als Beta interpretiert, aber du meintest build.

         Ich habe mir von MQ die neuste Version runtergeladen und installiert. Siehe da gleicher Fehler es hat sich nichts geändert, weder am Programm Code noch an der Doku.

         Und es sind überall genau dieselben Bezeichnungen.

zu 3. Ich gebe dir ja Recht das wir mit dem Leben müssen was MQ uns Programmiert. Aber wir müssen ja nicht Fehlerhaften Code fehlerhaft belassen.

         Helfen kann jeder, der die Beiträge auch richtig liest und nicht nur überfliegt.

zu 4. Ich hab meinen Broker gefragt und er hat mir das Bestätigt was ich vermutet hatte. Es gibt 3 Varianten sowohl bei der SYMBOL_FILLING_... als auch ORDER_FILLING_...

         Die 3. Variante ist die wenn ich weder die 1. noch die 2. habe. So ist es ja auch in der Doku beschrieben.


Also Carl, du bist doch Moderator, wie bekommt man den Fehler jetzt beseitigt. An wen oder wo muss man sich hin wenden?

VG

Thorsten

 
Thorsten Fischer :

Hallo Alain,

bist du Programmierer für MQ ?

Ich habe bei GBE angefragt ob ich den Screenshot und die anderen Angaben veröffentlichen darf, ich warte noch auf antwort.

Aber ich kann dir sagen, das in dem Tab "Trade" in dem Feld "Filling " kein hacken bei FOK und auch keiner bei IOC ist und somit None im Feld steht.

Wegen dem anderen habe ich auch nachgefragt.

Gruß

Thorsten

Nein, ich habe nichts mit Metaquotes zu tun.

Ich weiß, es gibt "None" an (ich habe ein Demokonto), was, wie gesagt, für ein Symbol wie EURUSD oder Forex im Allgemeinen seltsam ist.

 

Du wirfst zwei Dinge durcheinander!

1.)

SymbolInfoInteger()

Kennt nur 2 Optionen:
https://www.mql5.com/de/docs/marketinformation/symbolinfointeger und
https://www.mql5.com/de/docs/constants/environment_state/marketinfoconstants#enum_symbol_info_integer
https://www.mql5.com/de/docs/constants/environment_state/marketinfoconstants#symbol_filling_mode

Beim Senden der Order kann die Politik der Ausfüllung des im Handelsbefehl gemeldeten Volumens angegeben werden. Zulässige Varianten der Ordererfüllung für Volumen werden für jedes Symbol in der Tabelle angegeben. Für jedes Instrument kann nicht einen, sondernmehrere Modi durch Kombination der Flaggen gestellt werden. Kombination der Flaggen wird durch Operation der logischen ODER (|) ausgedrückt, ZB, SYMBOL_FILLING_FOK|SYMBOL_FILLING_IOC.  für Prüfung der Zulässigkeit bestimmtes Modus für Instrument muss das Ergebnis der logischen UND (&) mit der Flagge des Modus verglichen werden.

Ausfüllungspolitik

Identifikator

Wert

Beschreibung

Alles/Nichts

SYMBOL_FILLING_FOK

1

Diese Ausfüllungspolitik bedeutet, dass der Order nur in der angegebenen Volumen ausgefüllt werden kann. Wenn die ausreichende Menge eines Finanzinstruments sich auf dem Markt derzeit nicht präsentieren, wird der Order nicht ausgeführt werden. Das erforderliche Volumen kann aus mehreren Vorschlägen, die derzeit auf dem Markt erhältlich sind, bestehen.

Alles/Teil

SYMBOL_FILLING_IOC

2

In diesem Fall verpflichtet sich der Händler, einen Deal mit dem maximalen Volumen, das auf dem Markt erhältlich ist, im Bereich in der angegebenen Reihenfolge zu machen. Wenn die volle Ausführung unmöglich ist, wird der Order auf das verfügbare Volumen ausgeführt werden und das übrige Volumen wird storniert. Erlaubnis zur Nutzung von IOC Aufträge wird auf dem Trading-Server bestimmt.

Abrufen

Kein Identifier

 

Dieser Modus ist für Markt (Buy und Sell), Limit- und Stop-Limit-Aufträge verwendet, und nur in der Modi "Market execution" und "Exchange execution". Im Falle von Teilausfüllung wird ein Markt- oder Limit-Order mit dem Restvolumen nicht entfernt und arbeitet weiter.

In "Auf Anfrage" und "Sofort" Modi der Ausführung wird für Markt-Orders immer Ausfüllungspolitik Alles/nichts, und für Limit-Orders "Return" verwendet. In diesem Fall, wenn die Funktionen OrderSend oder OrderSendAsync Order senden, ist Eingabe der Ausfüllungstyp für sie nicht erforderlich.

In Ausführungsmodi "Market" und "Exchange" ist die Ausfüllungspolitik "Return" immer für alle Arten von Orders erlaubt. Erlaubnis von anderen Arten wird durch Eigenschaften SYMBOL_FILLING_FOK und SYMBOL_FILLING_IOC überprüft.

Beispiel:

//+------------------------------------------------------------------+
//| prüft Zulässigkeit des angegebenen Modus der Ausfüllung          |
//+------------------------------------------------------------------+
bool IsFillingTypeAllowed(string symbol,int fill_type)
  {
//--- erhalten wir den Wert der Eigenschaft, die Modus der Ausfüllung beschreibt 
   int filling=(int)SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE);
//--- geben wir true zurück, wenn Modus fill_type erlaubt ist
   return((filling & fill_type)==fill_type);
  }



OrderSend hingegen kennt 3 Modi:
https://www.mql5.com/de/docs/constants/tradingconstants/orderproperties#enum_order_property_integer

Beim Senden einer Handelsanforderung durch die Funktion OrderSend() kann für Order Ausfüllungspolitik im Feld type_filling in der speziellen Struktur MqlTradeRequest vorgegeben werden, zulässig sind Werte aus der Enumeration ENUM_ORDER_TYPE_FILLING. Für Erhaltung des Werte dieser Eigenschaft verwenden Sie die Funktion OrderGetInteger() oder HistoryOrderGetInteger() mit dem Modifikator ORDER_TYPE_FILLING.

ENUM_ORDER_TYPE_FILLING

Identifikator

Beschreibung

ORDER_FILLING_FOK

Diese Ausfüllungspolitik bedeutet, dass eine Order nur in der angegebenen Menge gefüllt werden kann. Wenn die notwendige Menge eines Finanzinstruments ist auf dem Markt derzeit nicht verfügbar, wird die Order nicht ausgefüllt werden. Das erforderliche Volumen kann mit mehreren Angeboten, die im Moment auf dem Markt verfügbar sind, gefüllt werden.

ORDER_FILLING_IOC

Dieser Modus bedeutet, dass der Trader mit einem Deal mit dem maximalen auf dem Markt verfügbaren Volumen innerhalb der Order einverstanden ist. Falls das gesamte Volumen einer Order nicht gefüllt werden kann, wird das verfügbare Volumen davon gefüllt werden und das restliche Volumen wird abgebrochen.

ORDER_FILLING_RETURN

Dieses Modus wird für die Markt- (ORDER_TYPE_BUY undORDER_TYPE_SELL), Limit- und Stop-Limit-Orders (ORDER_TYPE_BUY_LIMIT, ORDER_TYPE_SELL_LIMIT, ORDER_TYPE_BUY_STOP_LIMIT und ORDER_TYPE_SELL_STOP_LIMIT) und nur in Modi "Markt Ausführung " und "Börse Ausführung" verwendet. Im Falle einer teilweisen Ausführung wird die Markt- oder Limit-Order mit verbleibende Volumen nicht annulliert, sondern weiter verarbeitet.

Für die Aktivierung der Ordern ORDER_TYPE_BUY_STOP_LIMIT und ORDER_TYPE_SELL_STOP_LIMIT wird eine entsprechende Limit-Order ORDER_TYPE_BUY_LIMIT/ORDER_TYPE_SELL_LIMIT mit Ausfüllungstyp ORDER_FILLING_RETURN erstellt werden.



Die Enums können nicht 'ausgetauscht' werden!!
Dokumentation zu MQL5: Marktinformation erhalten / SymbolInfoInteger
Dokumentation zu MQL5: Marktinformation erhalten / SymbolInfoInteger
  • www.mql5.com
2. Gibt true oder false zurück abhängig von der erfolgreichen Durchführung der Funktion. Im Erfolgsfall wird der Eigenschaftswert in die Empfangsvariable gestellt, die durch Referenz vom letzten Parameter übertragen wird. Wenn die Funktion wird verwendet, um Informationen über den letzten Tick zu bekommen, ist es besser SymbolInfoTick() zu...
 
Carl Schreiber:

Du wirfst zwei Dinge durcheinander!

1.)

Kennt nur 2 Optionen:
https://www.mql5.com/de/docs/marketinformation/symbolinfointeger und
https://www.mql5.com/de/docs/constants/environment_state/marketinfoconstants#enum_symbol_info_integer
https://www.mql5.com/de/docs/constants/environment_state/marketinfoconstants#symbol_filling_mode


OrderSend hingegen kennt 3 Modi:
https://www.mql5.com/de/docs/constants/tradingconstants/orderproperties#enum_order_property_integer


Die Enums können nicht 'ausgetauscht' werden!!

Hallo Carl,

zu 1) genau hier ist dein Gedankenfehler, int filling=(int)SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE);

         liefert in filling eine 1 zurück wenn der Broker SYMBOL_FILLING_FOK  setzt

         liefert in filling eine 2 zurück wenn der Broker SYMBOL_FILLING_IOC setzt

         liefert in filling eine 0 zurück wenn der Broker keins der beiden setzt

         Ist bei mir so und auch von meinem Broker bestätigt, das er keins der beiden Signale setzt.

         Außerdem werden doch auch 3 Optionen beschrieben, allerdings werden nur für 2 die Werte angegeben.

         Und vergleiche die Beschreibungstexte von SYMBOL_FILLING_... und ORDER_FILLING_... dann siehst du das es jeweils 3 Varianten sind.

Die Enums sollen nicht ausgestauscht werden. Vielleicht siehst du es besser in der Englischen Doku :



Das was fehlt ist lediglich in der oberen Doku, das bei Return die Value 0 stehen müsste. Wie schon gesagt, bei mir und

meinem Broker liefert filling eine 0 zurück. Unten ein Screenshot von meinem Brocker in der Einstellmaske und die

Aussage das sie None = nichts von beidem Ausgewählt haben.


Und ich wiederhole mich hier schon wieder. Du mußt auch das unter 4. aus meiner letzten Antwort lesen. Da habe genaug das beschrieben.


Und ich wiederhole auch meine Frage an dich als Moderator nochmal:

Also Carl, du bist doch Moderator, wie bekommt man den Fehler jetzt beseitigt. An wen oder wo muss man sich hin wenden?

Gibt es sowas wie Bugzilla oder etwas vergleichbares?


VG

Thorsten

Grund der Beschwerde: