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

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

Haben sich auch die Konstanten geändert?

Am Ausgang:

ja, die Konstanten haben das Präfix MT5_ entfernt, hier ein Beispiel für die Verwendung:

from datetime import datetime
import MetaTrader5 as mt5

mt5.initialize()
mt5.wait()

print(mt5.terminal_info())
print(mt5.version())

ticks1 = mt5.copy_ticks_from("EURAUD", datetime(2020,1,28,13), 10000, mt5.COPY_TICKS_ALL)
ticks2 = mt5.copy_ticks_range("AUDUSD", datetime(2020,1,27,13), datetime(2020,1,28,13,1), mt5.COPY_TICKS_ALL)

rates1 = mt5.copy_rates_from("EURUSD", mt5.TIMEFRAME_M1, datetime(2020,1,28,13), 1000)
rates2 = mt5.copy_rates_from_pos("EURGBP", mt5.TIMEFRAME_M1, 0, 1000)
rates3 = mt5.copy_rates_range("EURCAD", mt5.TIMEFRAME_M1, datetime(2020,1,27,13), datetime(2020,1,28,13))

mt5.shutdown()

print('ticks1(', len(ticks1), ')')
print('ticks2(', len(ticks2), ')')
print('rates1(', len(rates1), ')')
print('rates2(', len(rates2), ')')
print('rates3(', len(rates3), ')')

import matplotlib.pyplot as plt

plt.plot(rates2['time'], rates2['low'], 'g-')
plt.plot(rates2['time'], rates2['high'], 'r-')

plt.show()

komplexeres Beispiel - Expert Advisor mit Handel auf zwei gleitenden Durchschnitten ohne Verwendung der Historie:

import MetaTrader5 as mt5
import time

mt5.initialize()
mt5.wait()

info = mt5.terminal_info()
if info.trade_allowed == False:
    print("Auto-trading disabled in Terminal, enable it")
    quit()

symbol = "EURUSD" #  currency
lot = 0.01;       #  buy lot
interval = 5      #  price requesting interval in sec
long_len = 11     # long moving average length
short_len = 7     # short moving average length
long_ma = []      # long ma list
short_ma = []     # short ma list
ticket = 0        #  ticket for sell

mt5.symbol_select(symbol)

#  wait some time
time.sleep(1)

print("\nPreparing...")
for i in range(long_len):
    p = mt5.symbol_info_tick(symbol)
    print(p.bid,'/',p.ask)
    avg = (p.ask + p.bid) / 2

    long_ma.append(avg)
    if i >= long_len - short_len:
        short_ma.append(avg)
    time.sleep(interval)

print("\nWorking...")
while True:
    p = mt5.symbol_info_tick(symbol)
    print(p.bid,'/',p.ask)
    avg = (p.ask + p.bid) / 2
    
    # short values
    prev_short = sum(short_ma) / short_len
    short_ma.pop(0)
    short_ma.append(avg)
    short = sum(short_ma) / short_len
    
    # long values
    prev_long = sum(long_ma) / long_len
    long_ma.pop(0)
    long_ma.append(avg)
    long = sum(long_ma) / long_len

    #  buy signal
    if prev_short < prev_long and short > long:
        print("BUY: ([-1]:",prev_short,"/",prev_long,", [0]:",short,"/",long,")")
        r = mt5.Buy(symbol, lot)
        if r.retcode != mt5.TRADE_RETCODE_DONE:
            print("Buy failed: ", r)
        else:
            ticket = r.order
    elif prev_short > prev_long and short < long and ticket>0:
        print("CLOSE: ([-1]:",prev_short,"/",prev_long,", [0]:",short,"/",long,")")
        r = mt5.Sell(symbol, lot, ticket=ticket)
        if r.retcode != mt5.TRADE_RETCODE_DONE:
            print("Sell failed: ", r)
        else:
            ticket = 0
           
    time.sleep(interval)

mt5.shutdown()
 
Almaz:

Ja, das Präfix MT5_ wurde aus den Konstanten entfernt. Hier ist ein Beispiel, wie man es verwendet:

Ein komplexeres Beispiel ist ein Expert Advisor mit Handel auf zwei gleitenden Durchschnitten ohne Verwendung der Historie:

Ich danke Ihnen.

Die Entwicklung der Lib ist gut. Frage an die Entwickler - wo ist die Roadmap für die pinova Lib?

Welche Innovationen können wir noch erwarten, welche nicht?

 
Ich hätte gerne ein Update der Dokumentation, ja
 

Auf dem Testserver (MetaQuotes-Beta-Server, Adresse 78.140.180.203:443) ist eine Beta-Version des Terminals 2323 mit neuen Funktionen verfügbar. Die öffentliche Beta wird morgen veröffentlicht.

Wir haben auch eine neue MetaTrader 5.0.20 Version für Python (pip install --upgrade metatrader5) mit einer neuen Syntax für den Kontowechsel veröffentlicht:

import MetaTrader5 as mt5

mt5.initialize(timeout=10000)
mt5.initialize(login=25035662, password="oxeb7lpb", server="MetaQuotes-Demo")
mt5.login(25035662)
mt5.login(25035662, timeout=10000)
mt5.login(25035662, "oxeb7lpb")
mt5.login(25035662, password="oxeb7lpb")
mt5.login(25035662, password="oxeb7lpb", server="MetaQuotes-Demo")

Es ist jetzt möglich, die Berechtigung direkt in der Initialisierung anzugeben, sowohl in der vollständigen als auch in der kurzen Form.

Die Wartefunktion wurde abgeschafft, und nun wird der gesamte Initialisierungszyklus mit Warten direkt in initialize durchgeführt, wobei Sie die Wartezeit in Millisekunden angeben können.

Die Python-Bibliothek findet garantiert die letzte aktive Kopie des Terminals, auch wenn es im portablen Modus (/portable key) installiert wurde.


Python-Programme werden bereits direkt im Navigator angezeigt:


Die Version vom Freitag wird es ermöglichen, sie als normale MQL5-Skripte auszuführen und sie werden an Diagramme gebunden sein.


Später werden wir der Python-Bibliothek Zugriff auf alle (auch benutzerdefinierte) Indikatoren im Lesemodus hinzufügen. Dies wird die Arbeit in Python produktiver machen. Aber das hat noch keine Priorität, das werden wir erst viel später tun.

 
Renat Fatkhullin:

Außerdem wurde eine neue Version von MetaTrader 5.0.20 für Python veröffentlicht (pip install --upgrade metatrader5) mit einer neuen Syntax für den Kontowechsel

Es gibt mehr Funktionen als MQL5.

 

Parallel dazu erweitern wir die Möglichkeiten des Editors, und in der nächsten Version (die nicht diesen Freitag erscheint) wird es vollständig möglich sein, Clang/LLVM und Microsoft Visual Studio zum Kompilieren von C++-Programmen zu verwenden:


Vielleicht werden wir auch C# einbeziehen.


Umfangreiche Arbeiten zur vollständigen Nutzung von SQLite-Datenbanken: SQLite: native Arbeit mit SQL-Datenbanken in MQL5

So können Sie problemlos große Datenmengen zwischen verschiedenen Systemen und innerhalb des Terminals bearbeiten und austauschen.

 
fxsaber:

Mehr Funktionen als MQL5.

Sind wir am Ziel?

 
Renat Fatkhullin:

Parallel dazu erweitern wir die Möglichkeiten des Editors, und in der nächsten Version (die nicht am Freitag erscheint) wird
vollständig in der Lage sein, Clang/LLVM und Microsoft Visual Studio zur Kompilierung von C++-Programmen zu nutzen:

Es wird ein Linker für das Linken von .lib-Dateien in
Projekten hinzugefügt?

 
Roman:

Zum Verknüpfen von .lib-Dateien in Projekten
Wird ein Linker hinzugefügt werden?

Innerhalb von Projekten können mehrere Zielvarianten angegeben werden:



DLL/EXE-Dateien enthalten eigene Defines, Bibliotheken und zusätzliche Parameter für den Compiler:

Der Linker wird automatisch von Clang oder Visual Studio verwendet. Sie muss nicht explizit angegeben werden.

 
fxsaber:

Es gibt mehr Funktionen als MQL5.

Daher verfügt die MetaTrader 5-Plattform über mehr Funktionen.

Jede Sprache allein ist nutzlos ohne eine Informations- und Handelsplattform (eine Plattform ist kein Terminal, sondern ein ganzer Komplex von Servern mit einer Infrastruktur und einem Ökosystem), die sie mit Daten füttert und die Ausführung des Handels ermöglicht.

Unser Ziel ist es, eine nahtlose Plattform mit einer breiten Palette von Tools für den Algotrading-Handel anzubieten, die verschiedene Verbrauchersegmente abdeckt.

Python ist ein klarer Gewinner in ML und eine sehr effektive Sprache für die Forschung. Auch wenn Sie es nicht in ein Prüfgerät bekommen können, ist es auch im direkten Integrationsmodus gut.


Übrigens, im Gegensatz zu anderen Python-Bibliotheken (die oft frontal geschrieben und schlecht optimiert sind), haben wir die Ausbeute an massiven Diagrammdaten stark optimiert. Das bedeutet, dass Sie schnell und effizient tief in die Geschichte eindringen können.