Fehler in SetTypeFillingBySymbol - Seite 2

 
Thorsten Fischer:

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

Da ist in Deiner (veralteten) Version die Funktion schon angepasst, aber noch nicht die Dokumentation.

Geh davon aus, dass Du (und Deine zukünftige Broker) nur 'meine' zwei Optionen zur Verfügung hast.

 
Thorsten Fischer:

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

Schmeiss das mal raus

if(TestTrade.SetTypeFillingBySymbol(Symbol()))
      Print("True SetTypeFillingBySymbol");
   else
      Print("False SetTypeFillingBySymbol");

Und hier

TestTrade.Buy(0.01),_Symbol)
 
Carl Schreiber:

Da ist in Deiner (veralteten) Version die Funktion schon angepasst, aber noch nicht die Dokumentation.

Geh davon aus, dass Du (und Deine zukünftige Broker) nur 'meine' zwei Optionen zur Verfügung hast.

Hallo Carl,

meine Version ist nicht veraltet.

Es ist die Aktuelle Release Version.

Deine ist eine Beta Version.

Das mit der angepassten Doku kann ich mir nicht vorstellen, außerdem meinst du mit deinen 2 die SYMBOL_FILLING_MODE und ich rede von ENUM_ORDER_TYP_FILLING.

vg

Thorsten

 

Das hat mit beta oder nicht nix zu tun,

du hast den code falsch, carl liegt völlig richtig, der type hat nur 2

 
amando:

Das hat mit beta oder nicht nix zu tun,

du hast den code falsch, carl liegt völlig richtig, der type hat nur 2

Hallo Amando,

ich habe nicht behauptet das es an der Beta liegt, ich habe lediglich gesagt, das ich ein Aktuelles Release benutze und keine Beta.

Bitte teile mir mit an welcher Stelle der Code falsch sein soll. Das würde mir weiter helfen.

Carl spricht von


wobei Abrufen     Kein Identifier  hat, aber mit dem folgendem Code eine 0 zurück gibt was ja dann der 3 Wert wäre zu den beiden anderen 1 + 2.

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

Der Code ist aus der Funktion SetTypeFillingBySymbol.

Ich rede aber von ENUM_ORDER_TYP_FILLING der durch die Funktion SetTypeFillingBySymbol in der Variable m_type_filling gesetzt werden soll.


//+------------------------------------------------------------------+
//| 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;                 <-------------------- Variante 1
      return(true);
     }
   if((filling&SYMBOL_FILLING_IOC)==SYMBOL_FILLING_IOC)
     {
      m_type_filling=ORDER_FILLING_IOC;                 <-------------------- Variante 2
      return(true);
     }
//---                                                   <-------------------- Variante 3 ??????????????????????
   return(false);
  }

vg

Thorsten

 
Thorsten Fischer:

Hallo Amando,

ich habe nicht behauptet das es an der Beta liegt, ich habe lediglich gesagt, das ich ein Aktuelles Release benutze und keine Beta.

Bitte teile mir mit an welcher Stelle der Code falsch sein soll. Das würde mir weiter helfen.

Carl spricht von


wobei Abrufen     Kein Identifier  hat, aber mit dem folgendem Code eine 0 zurück gibt was ja dann der 3 Wert wäre zu den beiden anderen 1 + 2.

Der Code ist aus der Funktion SetTypeFillingBySymbol.

Ich rede aber von ENUM_ORDER_TYP_FILLING der durch die Funktion SetTypeFillingBySymbol in der Variable m_type_filling gesetzt werden soll.


vg

Thorsten

Ich hab ja keine ahnung warum du dich auf den filling modus fixierst.

hast du probiert was ich oben gepostet habe?

und du schreibst den identiefier wieder in den filling mode, das kann nicht gehen, da musst du wenn, den mode reinschreiben den du haben willst

 
Du kämpft gegen Windmühlen, akzeptiere wie es ist, alles andere kostet Dir nur Zeit.
 
amando:

Ich hab ja keine ahnung warum du dich auf den filling modus fixierst.

hast du probiert was ich oben gepostet habe?

und du schreibst den identiefier wieder in den filling mode, das kann nicht gehen, da musst du wenn, den mode reinschreiben den du haben willst

Hallo amando,

1. Mir geht es um die Funktion SetTypeFillingBySymbol, die ja von MQ Programmiert wurde um eine bestimmte Funktion auszuführen.

    Ich möchte in meinem geplanten EA der für viele Leute bei vielen Brokern seine Anwendung finden soll diese Funktion benutzen.

    Bei mir scheint diese Funktion aber nicht zu Funktionieren, da sie immer false zurück gibt und ORDER_FILLING_RETURN nicht gesetzt werden kann. Der EA den ich gepostet habe ist nur eine Testsequenz.

2. SetTypeFillingBySymbol kann ich ja nicht weg lassen da es ja um diese Funktion geht und nicht um die folgende Buy Funktion.

    Ich glaube das dir ein Schreibfehler unterlaufen ist und du folgendes meintest:

TestTrade.Buy(0.01,_Symbol)

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. Aber hier geht es nicht um die Buy Funktion, sondern um die SetTypeFillingBySymbol Funktion.

Aber wegen dem Fehler in der Buy Funktion wollte ich das korrekte filling mit der SetTypeFillingBySymbol Funktion setzen und dabei ist mir das verhalten der Funktion SetTypeFillingBySymbol  aufgefallen.

Bei der Abfrage des Fillings über das Symbol beim Broker gibt es laut MQ 3 Zustände mit 2 Identifizierer um damit laut MQ 3 Order Filling Zustände einzustellen.


3.Ich habe den identifier nicht in den filling mode geschrieben, ich kann doch nicht in den abfrage mode reinschreiben was ich am ende raus haben möchte.


Bitte richtig lesen was ich schreibe bzw. im Code von MQ steht:

Die Funktion SetTypeFillingBySymbol aus CTrade:

//+------------------------------------------------------------------+
//| 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);
  }

In der Funktion SetTypeFillingBySymbol wird als erstes mit folgender Funktion der Ausfüllmodus des Symbols bei dem jeweiligen Broker abgerufen:

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


um ihn bei Rückgabe einer 1 = SYMBOL_FILLING_FOK in der Variable m_type_filling als ORDER_FILLING_FOK zu speichern

   if((filling&SYMBOL_FILLING_FOK)==SYMBOL_FILLING_FOK)
     {
      m_type_filling=ORDER_FILLING_FOK;
      return(true);
     }

oder bei Rückgabe einer 2 = SYMBOL_FILLING_IOC in der Variable m_type_filling als ORDER_FILLING_IOC zu speichern

   if((filling&SYMBOL_FILLING_IOC)==SYMBOL_FILLING_IOC)
     {
      m_type_filling=ORDER_FILLING_IOC;
      return(true);
     }

da bei Initialisierung der CTrade Klasse in der Variablen m_type_filling = ORDER_FILLING_FOK gespeichert wird,

kann diese Funktion die Variable m_type_filling = ORDER_FILLING_RETURN nie setzen.Ich denke mal das

hier das einfach vergessen wurde. Wenn man sich im englischen doc die SYMBOL_FILLING s anschaut und dazu die ENUM_ORDER_TYPE_FILLING

dann sieht das für mich so aus das No identifier = ORDER_FILLING_RETURN ergeben soll.


vg

Thorsten

 
Carl Schreiber:
Du kämpft gegen Windmühlen, akzeptiere wie es ist, alles andere kostet Dir nur Zeit.

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

 

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

Grund der Beschwerde: