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

 
Дмитрий Прокопьев:

Ich habe es ausprobiert, es hängt alles von der Hardware ab, auf der es läuft.

Eine Instanz verbraucht etwa 45-50Mb RAM + 2,5-4% CPU. (Ja, % CPU hängt vom CPU-Typ ab, in meinem Fall Intel Xeon L5640 @ 2.27GHz).

Dasselbe, eine Instanz von python.

Wenn Python mit History läuft, + 200-300Mb RAM. Die CPU ist fast nicht ausgelastet.

Nun, warum, das hängt von Ihrer Aufgabenstellung oder Idee ab.

Verstanden. Vielen Dank für die Informationen.

 
Entwickler, bitte erstellen Sie die API-Funktion copy_buffer(). Gewinnung von Indikatordaten aus analogen.
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Отсчет элементов копируемых данных (индикаторный буфер с индексом buffer_num) от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар (значение индикатора для текущего бара). При копировании заранее неизвестного количества данных в качестве массива-приемника buffer[] желательно...
 
Denis Kirichenko:
Entwickler, bitte erstellen Sie die API-Funktion copy_buffer(). Abrufen von Indikatordaten über Analog.

Gibt es in Python nicht ein Indikatorpaket? Oder ist es eine Art spezieller Indikator. Diese scheint zu funktionieren https://github.com/twopirllc/pandas-ta

twopirllc/pandas-ta
twopirllc/pandas-ta
  • twopirllc
  • github.com
Technical Analysis (TA) is an easy to use library that is built upon Python's Pandas library with more than 80 Indicators. These indicators are comminly used for financial time series datasets with columns or labels similar to: datetime, open, high, low, close, volume, et al. Many commonly used indicators are included, such as: Moving Average...
 
Vladimir Perervenko:

Gibt es in Python nicht ein Indikatorpaket? Oder ist es eine Art spezieller Indikator. Diese scheint zu funktionieren https://github.com/twopirllc/pandas-ta

copy_buffer() bedeutet, dass Sie ein Array mit Daten für Ihre Berechnungen erhalten.
Undcopy_buffer() sollte in beide Richtungen funktionieren.
Was fehlt, ist eine bidirektionale Array-Übertragung.

 
Roman:

Die Funktionen symbols_total und symbol_name fehlen
Um eine Liste von Symbolen wie diese zu erhalten:

In 5.0.29 hinzugefügt symbols_total(), symbols_get([group="EURUSD, "USDGBP", *RU*"]), erfordert die neueste Beta-Version des Terminals, um zu funktionieren.

Außerdem wurde in allen Funktionen orders_get(), positions_get(), history_orders_get(), history_deals_get() die Möglichkeit hinzugefügt, nach Gruppen zu filtern - group="EURUSD, "USDGBP", *RU*".
Die Methoden order_check(), order_send() geben die ursprüngliche Anfrage zur Ausführung in das Feld request zurück.

 
Roman:

Die Funktioncopy_buffer() bezieht ein Array von Daten für ihre eigenen Berechnungen.
Undcopy_buffer() sollte in beide Richtungen funktionieren.
Was fehlt, ist die bidirektionale Übergabe des Arrays.

Es gibt eine Menge davon auf github, es gibt sowohl b/gbin Libs als auch bezahlte Pakete...

Übertragen Sie das Modell der Arbeit mit MQL5 nicht auf Python. Sie sind unterschiedlich und haben unterschiedliche Zwecke.

 
Almaz:

In 5.0.29 hinzugefügt symbols_total(), symbols_get([group="EURUSD, "USDGBP", *RU*"]), benötigt die neueste Beta-Version von Terminal, um zu funktionieren.

Außerdem haben wir in allen Funktionen orders_get(), positions_get(), history_orders_get(), history_deals_get() die Möglichkeit hinzugefügt, nach Gruppen zu filtern - group="EURUSD, "USDGBP", *RU*".
Die Methoden order_check(), order_send() geben die ursprüngliche Anfrage zur Ausführung in das Feld request zurück.

Und die Liste von _todict() ist noch nicht in der Lage, zurückzugeben?

 
Дмитрий Прокопьев:

Können sie noch nicht eine Liste von _todict() zurückgeben?

Ja, das können sie, siehe das Beispiel.

import MetaTrader5 as mt5
# выведем данные о пакете MetaTrader5
print("MetaTrader5 package author: ",mt5.__author__)
print("MetaTrader5 package version: ",mt5.__version__)

# установим подключение к терминалу MetaTrader 5
if not mt5.initialize():
    print("initialize() failed")
    mt5.shutdown()

# подключимся к торговому счету с указанием пароля и сервера
authorized=mt5.login(25115284, password="gqsdfgtdm",server="MetaQuotes-Demo")
if(authorized):
    # выведем данные о торговом счете
    print(mt5.account_info())
else:
    print("failed to connect to trade account 25115284 with password=gqz0lbdm")

account_info_dict=mt5.account_info(). _asdict()
for prop in account_info_dict:
    print("{}={}".format(prop,account_info_dict[prop]))

mt5.shutdown()

Ergebnis

AccountInfo(login=25115284, trade_mode=0, leverage=100, limit_orders=200, margin_so_mode=0, trade_allowed=True, trade_expert=True, margin_mode=2, currency_digits=2, fifo_close=False, balance=99511.4, credit=0.0, profit=9.04, equity=99520.44, margin=98.18, margin_free=99422.26, margin_level=101365.28824607862, margin_so_call=50.0, margin_so_so=30.0, margin_initial=0.0, margin_maintenance=0.0, assets=0.0, liabilities=0.0, commission_blocked=0.0, name='MetaQuotes Dev Demo', server='MetaQuotes-Demo', currency='USD', company='MetaQuotes Software Corp.')
login=25115284
trade_mode=0
leverage=100
limit_orders=200
margin_so_mode=0
trade_allowed=True
trade_expert=True
margin_mode=2
currency_digits=2
fifo_close=False
balance=99511.4
credit=0.0
profit=9.04
equity=99520.44
margin=98.18
margin_free=99422.26
margin_level=101365.28824607862
margin_so_call=50.0
margin_so_so=30.0
margin_initial=0.0
margin_maintenance=0.0
assets=0.0
liabilities=0.0
commission_blocked=0.0
name=MetaQuotes Dev Demo
server=MetaQuotes-Demo
currency=USD
company=MetaQuotes Software Corp.
 
Rashid Umarov:

Sie können, siehe Beispiel

Ergebnis

Danke, ich habe dieses Beispiel gesehen, es funktioniert.

Meine Frage ist ein bisschen anders.

    if mt5.initialize('c:\\Works\\MT5 - terminals\\RoboForex - MT5\\terminal64.exe',
                            login=500036189, server='RoboForex-MetaTrader 5', password='',  portable=True):
        positions = mt5.positions_get()
        print(positions)
        pList = []
        for elem in positions:
            pList.append(elem._asdict())

positions_get - liefert mir eine Liste von TradePosition. Im Prinzip ist das in Ordnung, wir können es in Pandas einbauen und es funktioniert gut.

(TradePosition(ticket=164661016, time=1585075408, time_msc=1585075408163, time_update=1585075408, time_update_msc=1585075408163, type=1, magic=0, identifier=164661016, reason=0, volume=0.01, price_open=120.306, sl=0.0, tp=0.0, price_current=120.279, swap=0.0, profit=0.24, symbol='EURJPY', comment='', external_id=''), 
 TradePosition(ticket=164661051, time=1585075426, time_msc=1585075426062, time_update=1585075426, time_update_msc=1585075426062, type=0, magic=0, identifier=164661051, reason=0, volume=0.01, price_open=1.07798, sl=0.0, tp=0.0, price_current=1.07806, swap=0.0, profit=0.08, symbol='EURUSD', comment='', external_id=''))

Aber es ist nicht auf Pandas beschränkt, und wenn du so etwas haben willst, dann musst du das tun:

[{'ticket': 164661016, 'time': 1585075408, 'time_msc': 1585075408163, 'time_update': 1585075408, 'time_update_msc': 1585075408163, 'type': 1, 'magic': 0, 'identifier': 164661016, 'reason': 0, 'volume': 0.01, 'price_open': 120.306, 'sl': 0.0, 'tp': 0.0, 'price_current': 120.328, 'swap': 0.0, 'profit': -0.2, 'symbol': 'EURJPY', 'comment': '', 'external_id': ''}, 
{'ticket': 164661051, 'time': 1585075426, 'time_msc': 1585075426062, 'time_update': 1585075426, 'time_update_msc': 1585075426062, 'type': 0, 'magic': 0, 'identifier': 164661051, 'reason': 0, 'volume': 0.01, 'price_open': 1.07798, 'sl': 0.0, 'tp': 0.0, 'price_current': 1.07881, 'swap': 0.0, 'profit': 0.83, 'symbol': 'EURUSD', 'comment': '', 'external_id': ''}]

wir müssen es irgendwie umwandeln, Pandas oder für ... Das sind eine Menge unnötiger Gesten.

_asdict() ist viel praktischer geworden, wenn der Entwickler kein MQL5-Programmierer ist, sondern z.B. ein Pythonist ... oder ein Datenwissenschaftler, Liste/Diktat ist

list/dict sind die Hauptelemente von Python. Viele Libs verwenden list/dict, um Datentransfers zu erstellen.

Auch Tupel werden häufig verwendet, aber nur, wenn Sie die darin enthaltenen Datentypen streng kontrollieren wollen.

und haben eine Fehlerbehandlung für falsche Verwendung oder Zuweisung. Irgendwo ... :) Ich könnte mich irren.

 
Дмитрий Прокопьев:

Es gibt viele von ihnen auf github, es gibt sowohl b/bp Libs und bezahlte Pakete...

Übertragen Sie das Modell der Arbeit mit MQL5 nicht auf Python. Sie sind unterschiedlich und haben unterschiedliche Ziele.

Was meinen Sie damit? Kopieren eines Arrays von mql5 nach py und zurück?
Sie sollten zumindest genau lesen, worüber wir sprechen.
Sie müssen nicht nur an sich selbst denken. Wenn Sie es nicht brauchen, tun es andere.