MetaTrader 5 Python User Group - wie man Python in Metatrader verwendet - Seite 85

 
Sivoraksha-ia:
Seltsam, aber es kommt auch ein leerer Tisch an. Es ist nicht nötig, im Terminal selbst etwas zu öffnen, wie in Quicksilver, damit das Entladen funktioniert?

Ein beliebiges Diagramm mit dem gewünschten Paar (für Ticks).

 
Hallo zusammen,


Ich habe ein Problem mit der OrderSendResult-Struktur, die nach einer order_send ()-Anforderung unter Verwendung der Python-API zurückgegeben wird. Eines der zurückgegebenen Felder ist ein "Kommentar", der den Kommentar des Maklers zu der Transaktion enthalten sollte. Dieses Feld gibt jedoch denselben Kommentar zurück, der an die Anfrage übergeben wurde, und nicht die Rückgabe des Maklers, wie es sein sollte.


Um den Fehler zu reproduzieren, gehen Sie wie folgt vor:

1. Erstellen Sie eine Abfrage, die zu einem Kommentar führt. Füllen Sie die Abfrage "Kommentar" mit einem Dummy-Kommentar.

2. Senden Sie die Anfrage mit dem Befehl order_send () aus der Python-API.

3. Überprüfen Sie im zurückgegebenen orderSendResult-Objekt das Feld "comment".


Das Feld "Kommentar" wird denselben Kommentar weitergeben, während es einen vom Broker zurückgegebenen Kommentar haben sollte, der auf der Registerkarte "Log" des MT5-Terminals überprüft werden kann.

Kann jemand dies bestätigen? Gibt es eine Möglichkeit, eine Stellungnahme des Maklers zu erhalten?



Документация по MQL5: Торговые функции / OrderSend
Документация по MQL5: Торговые функции / OrderSend
  • www.mql5.com
OrderSend - Торговые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir Perervenko:

Würden Sie der Dokumentation eine Beschreibung hinzufügen?

Hinzugefügt

  • markt_buch_hinzufuegen
  • markt_buch_holen
  • markt_buch_freigabe
  • Документация по MQL5: Интеграция / MetaTrader для Python / market_book_add
    Документация по MQL5: Интеграция / MetaTrader для Python / market_book_add
    • www.mql5.com
    market_book_add - MetaTrader для Python - Интеграция - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
     

    Ich möchte eine virtuelle Handelsbuchhaltung in Python organisieren. Ich brauche sie, um die Merkmale verschiedener Handelsstrategien zu unterscheiden. Der verwendete Makler ist Otkritie. Es gibt keine Netze. Es gibt eine gemeinsame Position für das Instrument, Stop und Take der Position ist gemeinsam. Ich beschloss, dies zu tun: Ich eröffne einen Handel durch eine beliebige Strategie von Markt mit einem beliebigen Volumen, ohne Stop und Take. Stattdessen habe ich einen Stopp- und einen Limit-Auftrag in der gleichen Größe platziert. Ich merke mir die Aufträge in der Tabelle separat. In jedem bestimmten Zeitraum platziere ich orders = mt5.orders_get(symbol=symb) und erhalte eine Liste der bekannten ticket orders.ticket.tolist().

    Dann gehe ich meine Handelstabelle durch und prüfe, ob in der Liste der eingegangenen offenen Aufträge noch ein Stop- oder Limit-Order-Ticket vorhanden ist. Wenn kein Stop-Loss vorhanden ist, bedeutet dies, dass ein Stop-Loss praktisch ausgelöst wurde; wenn kein Limit vorhanden ist, bedeutet dies einen Take-Profit. Dann lösche ich die Einträge für diesen Handel aus meiner Tabelle und lösche die verbleibende Pending Order für diesen Handel. Und alles funktioniert, bis auf eine Ausnahme: Ich weiß nicht, wie ich den virtuellen Gewinn bei diesem Geschäft berechnen soll. Auf dem Bild können Sie sehen, dass der Verkaufsstopp bei 141430 gesetzt wurde, aber in Wirklichkeit gab es einen Slippage und der Eröffnungskurs liegt bei 141350. Ich fordere die Anfrage für eine ausgelöste Position an: deals = mt5.history_orders_get(ticket=246525084) (dieses Ticket wurde vom System bei der Platzierung gespeichert), aber in der Antwort sehe ich keine Informationen über die Platzierung der Order, nur Informationen über ihre Platzierung. Die Historie zeigt, dass der Verkaufsstopp im Ticket 15215696 tatsächlich ausgeführt wurde und ich in diesem Ticket den richtigen Preis verlangen kann. Aber zuerst muss ich das Ticket aus dem Handel finden. Wie kann ich dieses Ticket mit dem Ticket für den schwebenden Auftrag (Verkaufsstopp) abgleichen?

     
    Ich bin mit meiner Frage weitergekommen. Wenn ich die Historie der geschlossenen Positionen abfrage (mt5.history_deals_get ), kann ich das Ticket einer geschlossenen Order und ihren Ausführungspreis unter den Orders finden. Dies funktioniert, wenn ich in den Parametern einen Zeitbereich angebe. Ich rufe auch dieselbe Funktion auf und übergebe ihr das Ticket einer Bestellung - mt5. history_deals_get(ticket=TICKET) - aber die Antwort (-2, 'Terminal: Invalid params'). Funktioniert die Funktion mit diesem Parameter überhaupt?
     
    Liebe Entwickler, könnten Sie sich bitte zu meiner vorherigen Frage äußern? Die Funktion history_deals_get(ticket=TICKET) funktioniert nicht. Die Antwort ist immer (-2, 'Terminal: Ungültige Parameter'). Die gleiche Funktion, aber mit einem anderen Parameter history_deals_get(position=POSITION) funktioniert, aber ich muss einen Handel nach Ticketreihenfolge finden.
     
    Ist es möglich, einen Python-Api-Nachrichtenkalender mit Zugriff auf die Geschichte zu erstellen, um Recherchen durchzuführen?
     
    Hallo, gibt es jemanden, der an der MOEX handelt? Wer hat das gleiche Problem, dass bei der Initialisierung der Verbindung zum Terminal die Verbindung zum Server wiederhergestellt wird und ein Zertifikatspasswort verlangt wird?
    Документация по MQL5: Интеграция / MetaTrader для Python / initialize
    Документация по MQL5: Интеграция / MetaTrader для Python / initialize
    • www.mql5.com
    initialize - MetaTrader для Python - Интеграция - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
     

    order_send und order_check geben keine zurück. Ich weiß nicht, wo ich suchen soll. Bitte sagen Sie mir, was los ist. Ich bitte Sie.

    Code

    import MetaTrader5 as mt
    
    if not mt.initialize(login=12345):#
        print("initialize() failed")
        mt.shutdown()
    
    terminal_info=mt.terminal_info()
    if terminal_info!=None:
        print(f"terminal {'''connected''' if terminal_info.connected else '''disconnected'''}")
    print("version: ",mt.version())
    
    info = mt.symbol_info("Si-6.21")
    print(f"Si-6.21  {info.bid=}  {info.ask=}")
    
    request = {
        "action": mt.TRADE_ACTION_PENDING,
        "symbol": "Si-6.21",
        "volume": 1,
        "type": mt.ORDER_TYPE_BUY_LIMIT,
        "price": 77300,
        "sl": 0,
        "tp": 0,
        "deviation": 0,
        "magic": 123,
        "comment": "test",
        "type_time": mt.ORDER_TIME_DAY,
        "type_filling": mt.ORDER_FILLING_RETURN,
    }
    
    check = mt.order_check(request)
    print("order check: ",check)
    
    ret = mt.order_send(request)
    print("order send: ", ret)
    if not ret is None:
        print(f" retcode:{ret.retcode}")
    

    Ausgabe

    terminal connected
    version:  (500, 2875, '02 Apr 2021')
    Si-6.21  info.bid=77770.0  info.ask=77773.0
    order check:  None
    order send:  None
    
    Process finished with exit code 0


    Es ist mir gelungen, das Problem zu lösen. In der Anfrage sollten die Felder volume, price, sl, tp den Typ float haben. Das funktioniert folgendermaßen

    request = {
        "action": mt.TRADE_ACTION_PENDING,
        "symbol": "Si-6.21",
        "volume": 1.,
        "type": mt.ORDER_TYPE_BUY_LIMIT,
        "price": 77300.,
        "sl": 0.,
        "tp": 0.,
        "deviation": 0,
        "magic": 123,
        "comment": "test",
        "type_time": mt.ORDER_TIME_DAY,
        "type_filling": mt.ORDER_FILLING_RETURN,
    }
     

    Kolleginnen und Kollegen, bitte um Rat:

    1. Wie kann ich verfügbare Handelssitzungsintervalle nach Instrument von mt5 in Python ziehen und sie regelmäßig aktualisieren?

    2. Erwarte ich eine Methode in der Bibliothek, um den Trailing Stop für offene Positionen anzufordern und zu ändern?