Python/MT5 - keine Order möglich - Fehlermeldung 'Unsupported filling mode'

 

Ich habe ein Python-Programm, dass über die Schnittstelle Python/MT5 auf eine CFD-Plattform zugreift. Das läuft auch eigentlich alles, wie es soll (z.B. Einloggen, Kurse abfragen etc.).

Nur, wenn ich versuche, von dem Python-Programm über die Metatrader5-Schnittstelle eine Order auf der CFD-Plattform abzusetzen, klappt das leider nicht. Ich bekomme immer wieder die Fehlermeldung 'Unsupported filling mode', egal ob ich   "type_filling": mt5.ORDER_FILLING_RETURN, "type_filling":mt5.ORDER_FILLING_FOK oder "type_filling": mt5.RDER_FILLING_IOC einstelle.

Hat jemand eine Idee, woran das liegen könnte („Algo-Handel“ habe ich im MT5 aktiviert).

 

Vielen Dank im Voraus!

 

Die vollständige Fehlermeldung:


2. order_send failed, retcode=10030
   retcode=10030
   deal=0
   order=0
   volume=0.0
   price=0.0
   bid=0.0
   ask=0.0
   comment=Unsupported filling mode
   request_id=0
   retcode_external=0
   request=TradeRequest(action=1, magic=0, order=0, symbol='USDJPY', volume=0.1, price=108.891, stoplimit=0.0, sl=0.0, tp=0.0, deviation=0, type=0, type_filling=0, type_time=0, expiration=0, comment='python script open', position=0, position_by=0)
       traderequest: action=1
       traderequest: magic=0
       traderequest: order=0
       traderequest: symbol=USDJPY
       traderequest: volume=0.1
       traderequest: price=108.891
       traderequest: stoplimit=0.0
       traderequest: sl=0.0
       traderequest: tp=0.0
       traderequest: deviation=0
       traderequest: type=0
       traderequest: type_filling=0
       traderequest: type_time=0
       traderequest: expiration=0
       traderequest: comment=python script open
       traderequest: position=0
       traderequest: position_by=0


Mein Code für die Order entspricht praktisch 100% dem Beispiel in der Anleitung (https://www.mql5.com/de/docs/integration/python_metatrader5/mt5ordersend_py): 

# Vorbereitung der Struktur request für einen Kauf

symbol = "USDJPY"

symbol_info = mt5.symbol_info(symbol)

if symbol_info is None:

    print(symbol, "not found, can not call order_check()")

    mt5.shutdown()

    quit()

 

# Wenn das Symbol im MarketWatch nicht verfügbar ist, wird es hinzugefügt

if not symbol_info.visible:

    print(symbol, "is not visible, trying to switch on")

    if not mt5.symbol_select(symbol,True):

        print("symbol_select({}}) failed, exit",symbol)

        mt5.shutdown()

        quit()

 

lot = 0.1

point = mt5.symbol_info(symbol).point

price = mt5.symbol_info_tick(symbol).ask

deviation = 20 # Maximal akzeptierte Abweichung vom gewünschten Preis, angegeben in Punkten

request = {

    "action": mt5.TRADE_ACTION_DEAL,

    "symbol": symbol,

    "volume": lot,

    "type": mt5.ORDER_TYPE_BUY,

    "price": price,

    "sl": price - 100 * point, #Ein Preis, zu dem eine Stop-Loss-Order aktiviert wird, wenn sich der Preis in eine ungünstige Richtung bewegt.

    "tp": price + 100 * point, #Ein Preis, zu dem ein Take-Profit-Auftrag aktiviert wird, wenn sich der Preis in eine günstige Richtung bewegt.

    "deviation": deviation, #Maximal akzeptierte Abweichung vom gewünschten Preis, angegeben in Punkten

    "magic": 234000, # EA-ID. Ermöglicht das Erkennen von Handelsaufträgen für eine anlytische Behandlung. Jeder EA kann beim Senden einer Handelsanfrage eine eindeutige ID festlegen.

    "comment": "python script open",

    "type_time": mt5.ORDER_TIME_GTC,

    "type_filling": mt5.ORDER_FILLING_RETURN, 

}



# Senden eines Handelsauftrags

result = mt5.order_send(request)

# Prüfen des Ausführungsergebnisses

print("1. order_send(): by {} {} lots at {} with deviation={} points".format(symbol,lot,price,deviation));

if result.retcode != mt5.TRADE_RETCODE_DONE:

    print("2. order_send failed, retcode={}".format(result.retcode))

   # Abrufen des Ergebnisses als Liste und Darstellung Element für Element

    result_dict=result._asdict()

    for field in result_dict.keys():

        print("   {}={}".format(field,result_dict[field]))

        # Wenn es die Struktur eines Handelsauftrags ist, werden die Elemente auch einzeln angezeigt

        if field=="request":

            traderequest_dict=result_dict[field]._asdict()

            for tradereq_filed in traderequest_dict:

                print("       traderequest: {}={}".format(tradereq_filed,traderequest_dict[tradereq_filed]))

    print("shutdown() and quit")

    mt5.shutdown()

    #quit()

 

print("2. order_send done, ", result)

print("   opened position with POSITION_TICKET={}".format(result.order))

Dokumentation zu MQL5: Integration / MetaTrader für Python / order_send
Dokumentation zu MQL5: Integration / MetaTrader für Python / order_send
  • www.mql5.com
order_send - MetaTrader für Python - Integration - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 

Bitte beim Posten von Code den Code Button </> oder Alt+s verwenden.

Geh doch mit dem Debugger durch Dein MQ5-Programm, damit Du genau siehst, wann der Fehler auftritt und dann steht wahrscheinlich in den Doks wie alles korrekt aussehen soll. Dazu den Kursor auf die Funktion stellen und F1 drücken - meist gibt es auch Beispiele.

 
Bitte keine Doppel-Posts.
 
Carl Schreiber:

Bitte beim Posten von Code den Code Button </> oder Alt+s verwenden.

Geh doch mit dem Debugger durch Dein MQ5-Programm, damit Du genau siehst, wann der Fehler auftritt und dann steht wahrscheinlich in den Doks wie alles korrekt aussehen soll. Dazu den Kursor auf die Funktion stellen und F1 drücken - meist gibt es auch Beispiele.

Hallo Carl Schreiber, 


es ist ein Python-Programm, kein MQ5-Programm.

Wo der Fehler auftritt, und was das Debugging anzeigt, habe ich schon oben beschrieben.

Und mein Python-Programm entspricht 1zu1 der Anleitung dazu (https://www.mql5.com/de/docs/integration/python_metatrader5/mt5ordersend_py). Hatte ich auch schon geschrieben.


Vielleicht doch noch eine zweite Idee?

Dokumentation zu MQL5: Integration / MetaTrader für Python / order_send
Dokumentation zu MQL5: Integration / MetaTrader für Python / order_send
  • www.mql5.com
order_send - MetaTrader für Python - Integration - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 
Carl Schreiber:
Bitte keine Doppel-Posts.
Den zweiten Post zu löschen, war nicht hilfreich. Ich hatte das Ganze extra noch einmal in Englisch verfasst, weil es ja auch Mitglieder gibt, die kein Deutsch können.
 
PeterXY:
Den zweiten Post zu löschen, war nicht hilfreich. Ich hatte das Ganze extra noch einmal in Englisch verfasst, weil es ja auch Mitglieder gibt, die kein Deutsch können.

Diese mitglieder schauen aber selten ins deutsche forum

 
PeterXY:

Hallo Carl Schreiber, 


es ist ein Python-Programm, kein MQ5-Programm.

Wo der Fehler auftritt, und was das Debugging anzeigt, habe ich schon oben beschrieben.

Und mein Python-Programm entspricht 1zu1 der Anleitung dazu (https://www.mql5.com/de/docs/integration/python_metatrader5/mt5ordersend_py). Hatte ich auch schon geschrieben.


Vielleicht doch noch eine zweite Idee?

Dann würde ich die Frage im Kommentartteil des Artikels stellen. Der Autor kriegt dann eine Nachricht und die meisten antworten.

M;an kann die Frage dort auch auf Deutsch stellen, die Webseiten bieten an, einen Post mit einem Knopf in die eigene Sprache zu übersetzen (deswegen vielleicht einfache Sätze schreiben).

 
Carl Schreiber:

Dann würde ich die Frage im Kommentartteil des Artikels stellen. Der Autor kriegt dann eine Nachricht und die meisten antworten.

M;an kann die Frage dort auch auf Deutsch stellen, die Webseiten bieten an, einen Post mit einem Knopf in die eigene Sprache zu übersetzen (deswegen vielleicht einfache Sätze schreiben).

Der Artikel, in dem die Anleitung steht, ist ja:  https://www.mql5.com/de/docs/integration/python_metatrader5/mt5ordersend_py

Da finde ich aber nirgends eine Kommentarfunktion. Dein Link führt auch nur zur MQL-Comment-Funktion. Oder übersehe ich da was? 

Dokumentation zu MQL5: Integration / MetaTrader für Python / order_send
Dokumentation zu MQL5: Integration / MetaTrader für Python / order_send
  • www.mql5.com
order_send - MetaTrader für Python - Integration - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 
PeterXY:

Der Artikel, in dem die Anleitung steht, ist ja:  https://www.mql5.com/de/docs/integration/python_metatrader5/mt5ordersend_py

Da finde ich aber nirgends eine Kommentarfunktion. Dein Link führt auch nur zur MQL-Comment-Funktion. Oder übersehe ich da was? 

Naja, die Suche nach "python" ergab auf der ersten Seite: https://www.mql5.com/de/articles/5691.

Das wäre einmal etwas, um vielleicht den eigenen Code anzupassen und dort kann man unten auch Fragen stellen: https://www.mql5.com/de/forum/312958.

Insgesamt gibt es 25 Artikel, in denen die Verwendung von Python beschrieben ist: https://www.mql5.com/de/search#!keyword=Python&module=mql5_module_articles&page=3.
Integration von MetaTrader 5 und Python: Daten senden und empfangen
Integration von MetaTrader 5 und Python: Daten senden und empfangen
  • www.mql5.com
Eine umfassende Datenverarbeitung erfordert umfangreiche Werkzeuge und geht oft über den Sandkasten (Sandbox) einer einzigen Anwendung hinaus. Für die Verarbeitung und Analyse von Daten, Statistiken und maschinellem Lernen werden spezielle Programmiersprachen verwendet. Eine der führenden Programmiersprachen für die Datenverarbeitung ist Python. Der Artikel enthält eine Beschreibung, wie man MetaTrader 5 und Python über Sockets verbindet und wie man Kurse über die Terminal-API erhält.
 
Carl Schreiber:

Naja, die Suche nach "python" ergab auf der ersten Seite: https://www.mql5.com/de/articles/5691.

Das wäre einmal etwas, um vielleicht den eigenen Code anzupassen und dort kann man unten auch Fragen stellen: https://www.mql5.com/de/forum/312958.

Insgesamt gibt es 25 Artikel, in denen die Verwendung von Python beschrieben ist: https://www.mql5.com/de/search#!keyword=Python&module=mql5_module_articles&page=3.

Hi, danke! Es passt aber leider nicht wirklich. Es gibt hier 3 unterschiedliche "Universen". Einmal die propietäre Metatrader-Programmiersprache, zum Zweiten die darin (bzw in C++) geschriebene Schnittstellen zu Python und und drittens das "offizielle" "MetaTrader-Paket für Python", eine von MetaQuotes geschrieben Bibliothek für die Integration von Python in den MT5 (siehe dazu  https://www.mql5.com/de/docs/integration/python_metatrader5). Mit dem letzteren arbeite ich. Und das läuft auch alles, nur mit dem darin dokumentierten Befehl "order_send"  (siehe dazu https://www.mql5.com/de/docs/integration/python_metatrader5/mt5ordersend_py) funkt es hier nicht. Ich finde bisher auch leider keinen Ansprechpartner zu dieser Bibliothek von MetaQuotes.   

Dokumentation zu MQL5: Integration / MetaTrader für Python
Dokumentation zu MQL5: Integration / MetaTrader für Python
  • www.mql5.com
MetaTrader für Python - Integration - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 
PeterXY:

Hi, danke! Es passt aber leider nicht wirklich. Es gibt hier 3 unterschiedliche "Universen". Einmal die propietäre Metatrader-Programmiersprache, zum Zweiten die darin (bzw in C++) geschriebene Schnittstellen zu Python und und drittens das "offizielle" "MetaTrader-Paket für Python", eine von MetaQuotes geschrieben Bibliothek für die Integration von Python in den MT5 (siehe dazu  https://www.mql5.com/de/docs/integration/python_metatrader5). Mit dem letzteren arbeite ich. Und das läuft auch alles, nur mit dem darin dokumentierten Befehl "order_send"  (siehe dazu https://www.mql5.com/de/docs/integration/python_metatrader5/mt5ordersend_py) funkt es hier nicht. Ich finde bisher auch leider keinen Ansprechpartner zu dieser Bibliothek von MetaQuotes.   

Kann  es einfach sein, dass die Auftragsart vom Handelsserver nicht unterstützt wird? Funktioniert denn: ORDER_FILLING_RETURN?