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

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

Lo he probado, todo depende del hardware en el que se ejecute.

Una instancia consume unos 45-50Mb de RAM + 2,5-4% de CPU. (Sí, el % de CPU depende del tipo de CPU, en mi caso Intel Xeon L5640 a 2,27GHz).

Lo mismo, una instancia de python.

Si python se ejecuta con el historial, + 200-300Mb de RAM. La CPU casi no se agota.

Bueno, por qué, depende de su TdR o idea.

Entendido. Gracias por la información.

 
Desarrolladores, por favor hagan la función API copy_buffer(). Obtención de datos de los indicadores a partir de los analógicos.
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Отсчет элементов копируемых данных (индикаторный буфер с индексом buffer_num) от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар (значение индикатора для текущего бара). При копировании заранее неизвестного количества данных в качестве массива-приемника buffer[] желательно...
 
Denis Kirichenko:
Desarrolladores, por favor hagan la función API copy_buffer(). Obtenga los datos de los indicadores a través de los analógicos.

¿No hay un paquete de indicadores en Python? O es algún tipo de indicador especial. Este parece funcionar 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:

¿No hay un paquete de indicadores en Python? O es algún tipo de indicador especial. Este parece funcionar https://github.com/twopirllc/pandas-ta

copy_buffer() implica obtener un array de datos para sus cálculos.
Ycopy_buffer() debería funcionar en ambos sentidos.
Lo que falta es una transferencia de matriz bidireccional.

 
Roman:

Faltan las funciones symbols_total y symbol_name
Para obtener una lista de símbolos, así:

En la versión 5.0.29 se añadió symbols_total(), symbols_get([group="EURUSD, "USDGBP", *RU*"), requiere la última versión beta del Terminal para funcionar.

Además, en todas las funciones orders_get(),positions_get(), history_orders_get(), history_deals_get() se ha añadido la posibilidad de filtrar por grupo - group="EURUSD, "USDGBP", *RU*".
Los métodos order_check(), order_send() devolverán la solicitud inicial de ejecución en el campo request.

 
Roman:

La funcióncopy_buffer() implica obtener un array de datos para sus propios cálculos.
Ycopy_buffer() debería funcionar en ambas direcciones.
Lo que falta es el paso bidireccional del array.

Hay un montón de ellas en github, hay tanto librerías b/gbin como paquetes de pago...

No trasladar el modelo de trabajo con MQL5 a python. Son diferentes y tienen propósitos distintos.

 
Almaz:

En la versión 5.0.29 se añadió symbols_total(), symbols_get([group="EURUSD, "USDGBP", *RU*"), requiere la última versión beta de Terminal para funcionar.

Además, en todas las funciones orders_get(), positions_get(), history_orders_get(), history_deals_get() hemos añadido la posibilidad de filtrar por grupo - group="EURUSD, "USDGBP", *RU*".
Los métodos order_check(), order_send() devolverán la solicitud inicial de ejecución en el campo request.

¿Y la lista de _todict() aún no puede devolver?

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

¿Aún no pueden devolver una lista de _todict()?

Sí, pueden, vea el ejemplo.

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

Resultado

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:

Pueden, véase el ejemplo

Resultado

Gracias, he visto este ejemplo, funciona.

Mi pregunta es un poco diferente.

    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 - me devuelve una lista de TradePosition. En principio, no pasa nada, podemos meterlo en pandas y funciona bien.

(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=''))

Pero no se limita a los pandas y si quieres conseguir algo así

[{'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': ''}]

tenemos que convertirlo de alguna manera, pandas o para ... Son muchos gestos innecesarios.

_asdict() se ha vuelto mucho más conveniente, si el desarrollador no es un programador de MQL5, sino, digamos, un Pythonista ... o un científico de datos, la lista/dictado es

list/dict son los elementos principales de python. Muchas librerías utilizan list/dict para crear transferencias de datos.

Las tuplas también se utilizan mucho, pero sólo si quieres controlar estrictamente los tipos de datos que contiene.

y tener un manejador de errores para el uso o asignación incorrecta. En algún lugar ... :) Podría estar equivocado.

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

Hay muchas en github, hay tanto librerías b/bp como paquetes de pago...

No trasladar el modelo de trabajo con MQL5 a python. Son diferentes y tienen objetivos distintos.

¿Qué quieres decir con eso? ¿Copiar un array de mql5 a py y viceversa?
Al menos deberías leer con atención lo que estamos hablando.
No tienes que pensar sólo en ti. Si tú no lo necesitas, otros lo hacen.