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

 
MetaQuotes:

Eine neue Version der Python-Bibliothek 5.0.25 wurde veröffentlicht

Bitte aktualisieren Sie über:

Meine Herren, können wir darum bitten, Objekte wie:

TradePosition(ticket=55970661, time=1583523524, time_msc=1583523524484, time_update=1583523524, time_update_msc=1583523524484, 
type=1, magic=0, identifier=55970661, reason=0, volume=0.04, price_open=1.13022, sl=0.0, tp=0.0, price_current=1.13179, swap=0.0, 
profit=-6.28, symbol='EURUSD', comment='', external_id='55970661')

pls oder __dict__, oder as_dict() hinzufügen

In Python ist es viel bequemer, mit Standardstrukturen zu arbeiten, die gleiche Diktat/Liste.

('__add__', <method-wrapper '__add__' of TradePosition object at 0x085A1808>)
('__class__', <class 'TradePosition'>)
('__contains__', <method-wrapper '__contains__' of TradePosition object at 0x085A1808>)
....
....
....
('symbol', 'EURUSD')
('ticket', 55970661)
('time', 1583523524)
('time_msc', 1583523524484)
('time_update', 1583523524)
('time_update_msc', 1583523524484)
('tp', 0.0)
('type', 1)
('volume', 0.04)

Es wäre schön, Diktat aus dieser Klasse (und anderen ähnlichen Klassen) zu ziehen und damit zu arbeiten.

 

Frage zu initialize(), es gibt

initialize(
   path                      // path to the MetaTrader 5 terminal EXE file
   timeout=TIMEOUT,          // timeout
   login=LOGIN,              // account number
   password="PASSWORD",      // password
   server="SERVER"           // server name as it is specified in the terminal
   )

jeweils in Pfadpfaden zu zwei Terminals, die /portable ausführen

'c:\Works\MT5 - terminals\MetaTrader 5\terminal64.exe'

и 

'c:\Works\MT5 - terminals\Alpari MT5\terminal64.exe'

aber alleInitialisierungsaufrufe gehen an die letzte laufende Instanz des Terminals.

bzw. MT build 2360 und MetaTrader5-5.0.26-cp38-cp38-win32.whl

Was ist los? Pfad mit einer anderen Logik verwendet werden sollte, oder sollte etwas anderes an /portable übergeben werden?

 

Zeigen Sie bitte den aktuellen Code.

Wir akzeptieren noch keine Parameter in den Pfaden.

 
Renat Fatkhullin:

Zeigen Sie bitte den aktuellen Code.

Wir akzeptieren noch keine Parameter in den Pfaden.

Hier ist der Code:

import MetaTrader5 as mt5

def check_order ():
    if mt5.initialize(path='c:\Works\MT5 - terminals\MetaTrader 5\terminal64.exe', 
                            login=25153683, server='MetaQuotes-Demo', password=''):
                print("mt5.version(): ", mt5.version())
                print("mt5.terminal_info()", mt5.terminal_info())
                print("mt5.account_info()", mt5.account_info())
                symbol="GBPUSD"
                if mt5.symbol_select(symbol,True):
                    info = mt5.symbol_info(symbol)
                    point=mt5.symbol_info(symbol).point
                    request = {
                        "action": mt5.TRADE_ACTION_DEAL,
                        "symbol": symbol,
                        "volume": 0.01,
                        "type": mt5.ORDER_TYPE_BUY,
                        "price": mt5.symbol_info_tick(symbol).ask,
                        "sl": mt5.symbol_info_tick(symbol).ask-100*point,
                        "tp": mt5.symbol_info_tick(symbol).ask+100*point,
                        "deviation": 10,
                        "magic": 234000,
                        "comment": "python script",
                    }
 
                    result = mt5.order_check(request)
                    print(result)
		 mt5.shutdown()


    if mt5.initialize(path='c:\Works\MT5 - terminals\Alpari MT5\terminal64.exe', 
                            login=50518455, server='Alpari-MT5-Demo', password=''):
                print("mt5.version(): ", mt5.version())
                print("mt5.terminal_info()", mt5.terminal_info())
                print("mt5.account_info()", mt5.account_info())
                symbol="GBPUSD"
                if mt5.symbol_select(symbol,True):
                    info = mt5.symbol_info(symbol)
                    point=mt5.symbol_info(symbol).point
                    request = {
                        "action": mt5.TRADE_ACTION_DEAL,
                        "symbol": symbol,
                        "volume": 0.01,
                        "type": mt5.ORDER_TYPE_BUY,
                        "price": mt5.symbol_info_tick(symbol).ask,
                        "sl": mt5.symbol_info_tick(symbol).ask-100*point,
                        "tp": mt5.symbol_info_tick(symbol).ask+100*point,
                        "deviation": 10,
                        "magic": 234000,
                        "comment": "python script",
                    }
 
                    result = mt5.order_check(request)
                    print(result)
		 mt5.shutdown()


if __name__ == "__main__":
    check_order()

Letztes laufendes Terminal:

"c:\Works\MT5 - terminals\ForexClub MT5\terminal64.exe" 

Nach dem Screenshot zu urteilen, ging der Anruf an den letzten laufenden Anrufer.

Ich würde gerne die konkreten Fälle nennen, auf die zugegriffen wurde.

 
Renat Fatkhullin:

Wir akzeptieren die Parameter in den Tracks noch nicht.

Mmm ... Ich verstehe diesen Punkt nicht ganz, den Wert, aber nicht den Parameter, das ist, wo ich die Verbindungsparameter aus der Konfiguration herausnehme.

            if mt5.initialize(path=acc['path'], login=acc['login'], server=acc['server'], password=acc['pass']):
                print("mt5.version(): ", mt5.version())
                print("mt5.terminal_info()", mt5.terminal_info())
                print("mt5.account_info()", mt5.account_info())
 
Дмитрий Прокопьев:

Frage zu initialize(), es gibt

jeweils in Pfadpfaden zu zwei Terminals, die /portable ausführen

aber alleInitialisierungsaufrufe gehen an die letzte laufende Instanz des Terminals.

bzw. MT build 2360 und MetaTrader5-5.0.26-cp38-cp38-win32.whl

Was ist los? Pfad mit einer anderen Logik verwendet werden sollte, oder sollte etwas anderes an /portable übergeben werden?

Möchten Sie, dass 2 Terminals in einem Skript gleichzeitig arbeiten? Das ist nicht möglich, der nächste Initialisierungsaufruf wird die Verbindung mit dem ersten Terminal unterbrechen, dafür müssen Sie die Verbindungsentität eingeben, um verschiedene Terminals zu unterscheiden. Es funktioniert nur mit einer aktuellen Verbindung.

initialize hat einen weiteren Parameter (noch nicht dokumentiert)mt5.initialize(blabla, portable=True), umdas Terminal hart im portablen Moduszu starten.

 
Almaz:

Sie wollen 2 Terminals gleichzeitig in einem Skript bedienen? Dies ist nicht möglich, der nächste Initialisierungsaufruf wird die Verbindung zum ersten Terminal unterbrechen, Sie müssen eine Verbindungsentität eingeben, um zwischen verschiedenen Terminals zu unterscheiden. Es funktioniert nur mit einer aktuellen Verbindung.

initialize hat einen weiteren Parameter (noch nicht dokumentiert)mt5.initialize(blabla, portable=True) um das Terminal im portablen Modus zu starten.

Ja, Sie sollten mit mehreren Terminals arbeiten, die importablen Modus laufen. Sie können die Verbindung nicht mit zwei verschiedenen Terminals gleichzeitig initialisieren. Hier gibt es keine Fragen.

Ich habe versucht, die Terminals einzeln anzusprechen:

if mt5.initialize(login=11111, path='/works/MT5-1'...):
        ...   
        mt5.shutdown()
else:
   print('error')

if mt5.initialize(login=2222, path='/works/MT5-2'...):
        ...   
        mt5.shutdown()
else:
   print('error')

In diesem Schema funktioniert es nicht. In allen Fällen kommt es zu einem Absturz bis zum letzten manuell gestarteten Terminal im System. Auch wenn es von

path='/works/MT5-3'
mt5.initialize(blabla, portable=True)- hat nicht viel geholfen, es wird immer noch das zuletzt gestartete Terminal im System angezeigt.
 

Hier stellt sich eine Frage.

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

MetaTrader 5 Python User Group - Zusammenfassung

nikoli shen, 2020.03.07 15:46

Es gibt ein Problem beim Herunterladen des MetaTrader 5-Pakets mit der pip-Version, die mit python geliefert wird. Eine Abhilfemaßnahme ist die Aktualisierung der Pip. Befehl zum Aktualisieren von pip unter Windows:
python -m pip install -U pip

oder in venv, mit

(inside virtualenv):easy_install -U pip

 
Almaz:

Sie wollen 2 Terminals gleichzeitig in einem Skript bedienen? Das ist nicht möglich, der nächste Initialisierungsaufruf wird die Verbindung zum ersten Terminal unterbrechen, Sie müssen eine Verbindungsentität eingeben, um zwischen den verschiedenen Terminals zu unterscheiden. Es funktioniert nur mit einer aktuellen Verbindung.

initialize hat einen weiteren Parameter (noch nicht dokumentiert)mt5.initialize(blabla, portable=True), um das Terminal hart im portablen Modus zu starten.

Beachten Sie, dass mt5.terminal_info() Folgendes anzeigt

mt5.version():  [500, 2360, '06 Mar 2020']
mt5.terminal_info() TerminalInfo(community_account=False, community_connection=False, connected=True, dlls_allowed=False, trade_allowed=True, 
tradeapi_disabled=False, email_enabled=False, ftp_enabled=False, notifications_enabled=False, mqid=False, build=2360, maxbars=100000000, codepage=0, ping_last=42381,
community_balance=0.0, retransmission=7.976601967561818, company='MetaQuotes Software Corp.', name='MetaTrader 5', language='English', 
path='C:\\Works\\MT5 - terminals\\MetaTrader 5', data_path='C:\\Works\\MT5 - terminals\\MetaTrader 5', commondata_path='C:\\Users\\rip\\AppData\\Roaming\\MetaQuotes\\Terminal\\Common')
mt5.version():  [500, 2360, '06 Mar 2020']
mt5.terminal_info() TerminalInfo(community_account=False, community_connection=False, connected=True, dlls_allowed=False, trade_allowed=True, 
tradeapi_disabled=False, email_enabled=False, ftp_enabled=False, notifications_enabled=False, mqid=False, build=2360, maxbars=100000000, codepage=0, ping_last=40849,
community_balance=0.0, retransmission=7.976601967561818, company='MetaQuotes Software Corp.', name='MetaTrader 5', language='English', 
path='C:\\Works\\MT5 - terminals\\MetaTrader 5', data_path='C:\\Works\\MT5 - terminals\\MetaTrader 5', commondata_path='C:\\Users\\rip\\AppData\\Roaming\\MetaQuotes\\Terminal\\Common')

valuepath='C:\\\Works\\\\\MT5 - terminals\\\MetaTrader 5', data_path='C:\Works\\\\MT5 - terminals\\\MetaTrader 5',commondata_path='C:\Users\\rip\AppData\\\Roaming\\MetaQuotes\\Terminal\\\Common'

sind identisch. Ist das so gewollt?

Der Code steht unten:

import MetaTrader5 as mt5

def check_order ():
    if mt5.initialize(path='c:\\Works\\MT5 - terminals\\MetaTrader 5\\terminal64.exe', 
                            login=25153683, server='MetaQuotes-Demo', password='',  portable=True):
        print("mt5.version(): ", mt5.version())
        print("mt5.terminal_info()", mt5.terminal_info())
        mt5.shutdown()

    if mt5.initialize(path='c:\\Works\\MT5 - terminals\\Alpari MT5\\terminal64.exe', 
                            login=50518455, server='Alpari-MT5-Demo', password='',  portable=True):
        print("mt5.version(): ", mt5.version())
        print("mt5.terminal_info()", mt5.terminal_info())
        mt5.shutdown()

if __name__ == "__main__":
    check_order()
 
Almaz:

Sie wollen 2 Terminals gleichzeitig in einem Skript bedienen? Das ist nicht möglich, der nächste Initialisierungsaufruf wird die Verbindung zum ersten Terminal unterbrechen, Sie müssen eine Verbindungsentität eingeben, um zwischen den verschiedenen Terminals zu unterscheiden. Es funktioniert nur mit einer aktuellen Verbindung.


Ist es prinzipiell möglich, eine Einheit (Verbindung) zu schaffen? Ich glaube nicht, dass das so notwendig ist, aber für die Zukunft.

Wenn Sie ein anderes Skript (Py) auf dem Diagramm installieren, wird das erste Skript zurückgesetzt. Ist das der richtige Weg?

Grund der Beschwerde: