MetaTrader 5 Python User Group - como usar o Python no Metatrader - página 56

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

Experimentei-o, tudo depende do hardware com que está a funcionar.

Um exemplo come cerca de 45-50Mb de RAM + 2,5-4% CPU. (Sim, % CPU depende do tipo de CPU, no meu caso Intel Xeon L5640 @ 2.27GHz).

O mesmo, um exemplo de pitão.

Se python funciona com história, + 200-300Mb de RAM. A CPU quase não está esgotada.

Bem, porquê, depende dos seus ToR ou da sua ideia.

Compreendido. Obrigado pela informação.

 
Desenvolvedores, por favor façam a função API copy_buffer(). Receber dados indicadores via analógico.
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Отсчет элементов копируемых данных (индикаторный буфер с индексом buffer_num) от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар (значение индикатора для текущего бара). При копировании заранее неизвестного количества данных в качестве массива-приемника buffer[] желательно...
 
Denis Kirichenko:
Desenvolvedores, por favor façam copy_buffer() da função API. Obter dados indicadores via analógico.

Não há um pacote indicador em Python? Ou é algum 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:

Não há um pacote indicador em Python? Ou é algum tipo de indicador especial. Este parece funcionar https://github.com/twopirllc/pandas-ta

copy_buffer() implica a obtenção de uma série de dados para os seus cálculos.
Ecopy_buffer() deve funcionar nos dois sentidos.
O que falta é uma transferência de matriz bi-direccional.

 
Roman:

As funções symbol_total e symbol_name estão em falta
para obter uma lista de símbolos, como esta:

Em 5.0.29 símbolos adicionados_total(), symbols_get([group="EURUSD, "USDGBP", *RU*"]), requer a última versão beta do Terminal para funcionar.

Também em todas as funções order_get(),positions_get(), history_orders_get(), history_deals_get() adicionada possibilidade de filtragem por grupo - group="EURUSD, "USDGBP", *RU*".
Os métodos order_check(), order_send() devolverão o pedido inicial para execução no campo do pedido.

 
Roman:

Ocopy_buffer() implica a obtenção de um conjunto de dados para os seus próprios cálculos.
Ecopy_buffer() deve funcionar em ambas as direcções.
O que falta é a passagem bidireccional da matriz.

Há muitos no github, há tanto b/gbin libs como pacotes pagos...

Não transferir o modelo de trabalho com MQL5 para python. São diferentes e têm objectivos diferentes.

 
Almaz:

Em 5.0.29 símbolos adicionados_total(), symbols_get([group="EURUSD, "USDGBP", *RU*"]), requer a última versão beta do Terminal para funcionar.

Também, em todas as funções order_get(), posições_get(), history_orders_get(), history_deals_get() adicionámos a capacidade de filtrar por grupo - grupo="EURUSD, "USDGBP", *RU*".
Os métodos order_check(), order_send() devolverão o pedido inicial para execução no campo do pedido.

E a lista de _todict() ainda não pode regressar?

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

Ainda não podem devolver uma lista de _todict()?

Sim, eles podem, veja o exemplo.

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:

Eles podem, ver exemplo

Resultado

Obrigado, já vi este exemplo, funciona.

A minha pergunta é um pouco 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())

posições_get - devolve-me uma lista de posições comerciais. Em princípio, está tudo bem, podemos atirá-lo para pandas e trabalhar bem.

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

Mas não se limita aos pandas e se quiser obter algo como isto:

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

temos de o converter de alguma forma, pandas ou para ... Isso são muitos gestos desnecessários.

_asdict() tornou-se muito mais conveniente, se o programador não for um programador MQL5, mas, digamos, um Pythonista ... ou um cientista de dados, a lista/dicto é

Muitas liberdades utilizam a lista/dicto para criar transferências de dados.

Os tuplos também são muito utilizados, mas apenas se se quiser controlar rigorosamente os tipos de dados neles contidos.

e têm um manipulador de erros para uso ou atribuição incorrecta. Em algum lugar ... :) Posso estar enganado.

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

Há muitos deles no github, há tanto b/bp libs como pacotes pagos...

Não transferir o modelo de trabalho com MQL5 para python. São diferentes e têm objectivos diferentes.

O que quer dizer com isso? Cópia de uma matriz de mql5 a py e vice-versa?
Deve pelo menos ler com atenção aquilo de que estamos a falar.
Não tem de pensar apenas por si próprio. Se não precisar, outros precisam.