Grupo de usuarios de MetaTrader 5 Python - cómo utilizar Python en Metatrader - página 54

 

Actualización a 5.0.27

  pip install --upgrade MetaTrader5

Copia de seguridad de la secuencia de comandos

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="ваш_пароль",server="MetaQuotes-Demo")
if(authorized):
    #  выведем данные о торговом счете
    #print(mt5.account_info())
    account_info=mt5.account_info()._asdict()
    print(account_info)
    print("Вывод каждого свойства отдельно:")
    for property in account_info:
        print("   ",property,"=",account_info[property])
else:
    print("failed to connect to trade account 25115284 with password=gqz0lbdm")

mt5.shutdown()

Resultado

MetaTrader5 package author:  MetaQuotes Software Corp.
MetaTrader5 package version:  5.0.27
{'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': 97639.46, 'credit': 0.0, 'profit': -178.77, 'equity': 97460.69, 'margin': 704.8, 'margin_free': 96755.89, 'margin_level': 13828.134222474464, '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 = 97639.46
    credit = 0.0
    profit = -178.77
    equity = 97460.69
    margin = 704.8
    margin_free = 96755.89
    margin_level = 13828.134222474464
    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.

 
Vladimir Perervenko:

¿Puede decirme algo más sobre el temporizador?

No he investigado por mi cuenta, sólo una búsqueda

 
Almaz:

5.0.27 ya tiene, toda la secuencia de la estructura (análoga a la tupla con nombre para la API de C) añadió el método _asdict()

mt5.symbol_info()._asdict() -grande thnx, lo que necesitamos.

history_deals_get no parece estar en la secuencia de la estructura ... je.

    deal = mt5.history_deals_get(position=order.position_id)._asdict()
AttributeError: 'tuple' object has no attribute '_asdict'

Sólo falta una construcción que dé los nombres de los atributos, en el orden correcto. Si parahistory_deals_get_asdict() no es realizable o contradice el concepto - al menos un análogo de _fields fromcollections.namedtuple (python), entonces podemos sacar el orden correcto de los atributos, no manualmente en bucle, sino manualmente. Hasta ahora funciona algo así:

       orders_deal = mt5.history_deals_get(from_date, to_date)
        orders_deal_frame = pd.DataFrame(orders_deal)
        print(orders_deal_frame.head())

y la salida:

          0          1           2              3   4   5   6   ...   11   12      13   14      15         16  17
0  519632807          0  1583873757  1583873757976   2   0   0  ...  0.0  0.0  1000.0  0.0
1  519653875  541985093  1583875090  1583875090615   1   0   0  ...  0.0  0.0     0.0  0.0  EURUSD  541984991
2  519654046  541985264  1583875102  1583875102086   0   0   0  ...  0.0  0.0     0.0  0.0  USDCHF  541984999
3  519654270  541985482  1583875116  1583875116676   0   0   0  ...  0.0  0.0     0.0  0.0  USDJPY  541985006
4  519654761  541985971  1583875151  1583875151725   1   0   0  ...  0.0  0.0     0.0  0.0  EURUSD  541985807

[5 rows x 18 columns]

Bueno, o el código de fideos con bucles.

 
Rashid Umarov:

Actualización a 5.0.27

Copia de seguridad de la secuencia de comandos

Resultados

¡Sens!

Realmente cómodo en esta parte.

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

mt5.symbol_info()._asdict() -big thnx, eso es todo.

history_deals_get no parece entrar en la secuencia de la estructura ... je.

Sólo falta una construcción que dé los nombres de los atributos, en el orden correcto. Si parahistory_deals_get_asdict() no es realizable o contradice el concepto - al menos un análogo de _fields fromcollections.namedtuple (python), entonces podemos sacar el orden correcto de los atributos, no manualmente en bucle, sino manualmente. Hasta ahora funciona algo así:

y la salida:

O código de fideos con bucles.

history_deals_get siempre devuelve una tupla normal de Python con una colección de TradeDeal con nombre dentro de ella. Para que funcione, hay que acceder a algún índice:

r = mt5.history_deals_get(position=544536443)
print(r[0]._asdict())
 
Дмитрий Прокопьев:

mt5.symbol_info()._asdict() -grande thnx, lo que necesitamos.

history_deals_get no parece entrar en la secuencia de la estructura ... je.


Inténtalo de esta manera:

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")
    quit()

#  проверим наличие открытых позиций
positions=mt5.positions_total()
if(positions>0):
    print("Total positions=",positions)
    #  выведем все открытые позиции
    positions=mt5.positions_get()
    count=0
    for position in positions:
        count+=1
        print(count,":",position)
        position_info=position._asdict()
        for property in position_info:
            print("   ",property,"=",position_info[property])
        if count>=5:
            break
else:
    print("Positions not found")

#  завершим подключение к терминалу MetaTrader 5
mt5.shutdown()

Resultado

MetaTrader5 package author:  MetaQuotes Software Corp.
MetaTrader5 package version:  5.0.27
Total positions= 80
1 : TradePosition(ticket=543426097, time=1584009003, time_msc=1584009003243, time_update=1584009003, time_update_msc=1584009003243, type=1, magic=0, identifier=543426097, reason=3, volume=0.01, price_open=1.12686, sl=1.14372, tp=1.10328, price_current=1.10665, swap=-0.01, profit=20.21, symbol='EURUSD', comment='', external_id='')
    ticket = 543426097
    time = 1584009003
    time_msc = 1584009003243
    time_update = 1584009003
    time_update_msc = 1584009003243
    type = 1
    magic = 0
    identifier = 543426097
    reason = 3
    volume = 0.01
    price_open = 1.12686
    sl = 1.14372
    tp = 1.10328
    price_current = 1.10665
    swap = -0.01
    profit = 20.21
    symbol = EURUSD
    comment = 
    external_id = 
2 : TradePosition(ticket=543438758, time=1584009602, time_msc=1584009602982, time_update=1584009602, time_update_msc=1584009602982, type=1, magic=0, identifier=543438758, reason=3, volume=0.01, price_open=1.1261700000000001, sl=1.14566, tp=1.09924, price_current=1.10665, swap=-0.01, profit=19.52, symbol='EURUSD', comment='', external_id='')
    ticket = 543438758
    time = 1584009602
    time_msc = 1584009602982
    time_update = 1584009602
    time_update_msc = 1584009602982
    type = 1
    magic = 0
    identifier = 543438758
    reason = 3
    volume = 0.01
    price_open = 1.1261700000000001
    sl = 1.14566
    tp = 1.09924
    price_current = 1.10665
    swap = -0.01
    profit = 19.52
    symbol = EURUSD
    comment = 
    external_id = 
3 : TradePosition(ticket=543438858, time=1584009610, time_msc=1584009610242, time_update=1584009610, time_update_msc=1584009610242, type=1, magic=0, identifier=543438858, reason=3, volume=0.02, price_open=1.12622, sl=1.14531, tp=1.09973, price_current=1.10665, swap=-0.02, profit=39.14, symbol='EURUSD', comment='', external_id='')
    ticket = 543438858
    time = 1584009610
    time_msc = 1584009610242
    time_update = 1584009610
    time_update_msc = 1584009610242
    type = 1
    magic = 0
    identifier = 543438858
    reason = 3
    volume = 0.02
    price_open = 1.12622
    sl = 1.14531
    tp = 1.09973
    price_current = 1.10665
    swap = -0.02
    profit = 39.14
    symbol = EURUSD
    comment = 
    external_id = 
4 : TradePosition(ticket=543521116, time=1584014410, time_msc=1584014410921, time_update=1584014410, time_update_msc=1584014410921, type=1, magic=0, identifier=543521116, reason=3, volume=0.02, price_open=1.1245, sl=1.14334, tp=1.09808, price_current=1.10665, swap=-0.02, profit=35.7, symbol='EURUSD', comment='', external_id='')
    ticket = 543521116
    time = 1584014410
    time_msc = 1584014410921
    time_update = 1584014410
    time_update_msc = 1584014410921
    type = 1
    magic = 0
    identifier = 543521116
    reason = 3
    volume = 0.02
    price_open = 1.1245
    sl = 1.14334
    tp = 1.09808
    price_current = 1.10665
    swap = -0.02
    profit = 35.7
    symbol = EURUSD
    comment = 
    external_id = 
5 : TradePosition(ticket=543686473, time=1584024008, time_msc=1584024008400, time_update=1584024008, time_update_msc=1584024008400, type=1, magic=0, identifier=543686473, reason=3, volume=0.01, price_open=1.12238, sl=1.13967, tp=1.09793, price_current=1.10665, swap=-0.01, profit=15.73, symbol='EURUSD', comment='', external_id='')
    ticket = 543686473
    time = 1584024008
    time_msc = 1584024008400
    time_update = 1584024008
    time_update_msc = 1584024008400
    type = 1
    magic = 0
    identifier = 543686473
    reason = 3
    volume = 0.01
    price_open = 1.12238
    sl = 1.13967
    tp = 1.09793
    price_current = 1.10665
    swap = -0.01
    profit = 15.73
    symbol = EURUSD
    comment = 
    external_id = 
 
Almaz:

history_deals_get siempre devuelve una tupla normal de Python con una colección de TradeDeal con nombre dentro de ella. Para que funcione, necesitamos acceder a algún índice:

Aha, muchas gracias, ya lo he encontrado por analogía. Sens.

¿Qué pasa si, en futuras versiones, será posible no sólo seleccionar la tupla con nombre con history_deals_get(y análogos), sino también decir que list[_asdict()] será sólo

fantástico. ;) Gracias.

 
Rashid Umarov:

Inténtalo de esta manera:

Resultado

Gracias. Está funcionando.

Ah, y gracias por responder a :) las sugerencias para mejorar la lib.

 
Rashid Umarov:

Actualización a 5.0.27

Copia de seguridad de la secuencia de comandos

Resultados

Por la tarde.

Rashid, ¿hay algún tipo de anuncio de actualizacióndel producto en alguna parte del sitio web de MetaTrader5?

Me gustaría saber cuándo y qué cambios se han aplicado.

Es un poco difícil planificar la refactorización.


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

Buenas tardes.

Rashid, ¿hay un anuncio de actualización deproductos en alguna parte del sitio web?

Para que pueda llevar un control de los cambios que se han realizado y cuándo.

Es un poco difícil planificar la refactorización.


Estoy observando a Pypi. Los desarrolladores están esperando nuestros comentarios para continuar/mejorar. Pero hasta ahora no vemos ninguna actividad de los usuarios en esta área.

Creo que, tenemos que discutir en una rama separada las cuestiones de infraestructura general para los sistemas de comercio complejos (terminal (MT4/МТ5) <-> TS (en diferentes IPs) <_> diferentes bases de datos. Diferentes configuraciones, problemas, dificultades, ventajas.

Buena suerte