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

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

Obrigado.

 
Roman:

O que quer dizer exactamente? 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.
E o que é necessário ou não, não se deve pensar apenas por si próprio. Se não precisar, outros precisam.

Só por interesse, que conjuntos de dados pretende transferir da MT?

Os criadores já disseram várias vezes que não vão transferir nada para a MT. Para tal, é necessário utilizar outras características.

 
Vladimir Perervenko:

Só por interesse, que conjuntos de dados pretende transferir da MT?

Os criadores já disseram várias vezes que não vão transferir nada para a MT. Para tal, é necessário utilizar outras características.

Sim qualquer, as suas próprias matrizes calculadas.
Eu construo exclusivamente sintéticos, e a capacidade de transferir matrizes de ambas as maneiras é extremamente deficiente.
É claro que se pode usar PyAPI, mas é novamente vinculativo para dll.
E utilizando PyAPI, então não há qualquer necessidade desta biblioteca de integração.

 
Roman:

Sim qualquer, as suas próprias matrizes calculadas.
Eu construo exclusivamente sintéticos, e a capacidade de transferir matrizes em ambas as direcções é extremamente deficiente.
É claro que se pode usar PyAPI, mas está novamente ligado a um dll.
E utilizando o PyAPI, então não há qualquer necessidade desta biblioteca de integração.

Não pensem que quero dar lições. Calcula-se os sintéticos com base em citações do terminal. Deitar as citações em Python e fazer todos os cálculos em Python.

Mas terá de fazer ginástica com transferência inversa de arrays. A forma mais fácil é através da base de dados.

Ou utilizar isto. Em algum lugar houve um pequeno fio com este projecto. Ou isto.

Em qualquer caso, esta integração não resolverá todos os diferentes desejos dos comerciantes. Mas resolve dois problemas principais e os mais importantes: obter cotações rápidas e gestão comercial.

Todo o resto por si só com as suas próprias infra-estruturas.

Boa sorte

khramkov/MQL5-JSON-API
khramkov/MQL5-JSON-API
  • khramkov
  • github.com
<a href="#metaquotes-mql5
 
Vladimir Perervenko:

Não pensem que quero dar lições. Calcula-se os sintéticos com base em citações do terminal. Deitar as citações em Python e fazer todos os cálculos em Python.

Mas terá de fazer ginástica com transferência inversa de arrays. A forma mais fácil é através da base de dados.

Ou utilizar isto. Em algum lugar houve um pequeno fio com este projecto. Ou isto.

Em qualquer caso, esta integração não resolverá todos os diferentes desejos dos comerciantes. Mas resolve dois problemas básicos e muito importantes: citações rápidas e gestão do comércio.

Todo o resto por si só com as suas próprias infra-estruturas.

Boa sorte

É disto que estou a falar, independentemente da sua implementação, via dll ou base de dados, tomadas ou mesmo ficheiros de texto, etc.
Mas mais uma vez, esta é uma muleta adicional não relacionada com a biblioteca.
A questão é que agora estamos a desenvolver activamente a biblioteca de integração mt5, pelo que é desejável fornecer todas as características necessárias para os utilizadores nela desde o início.

 
Dmitry Prokopyev:

Obrigado, este exemplo que eu vi, funciona.

Estou um pouco mais a pensar noutra coisa.


posições_get - a lista de TradePosition ser-me-á devolvida. Em princípio, é possível introduzir pandas e trabalhar bem.

Mas tudo não está limitado a um pandas, e se precisar de obter algo do género:

tem de compor de alguma forma, pandas ou para... de alguma forma, muitos movimentos extra do corpo.

Tornou-se muito mais conveniente com _asdict (), se aquele que escreve não é um programa MQL5, mas digamos um pythonist ... ou um dataynetist, então a lista / ditado é

Os elementos básicos de python, muitos estão a construir uma transferência de dados em lista / ditado.

Os tuplos são usados com demasiada frequência e muito, mas apenas se for necessário controlar rigorosamente os tipos de dados que se movem nele.

e também pendurar um manipulador de erros, se não for utilizado ou atribuído correctamente. Bem, em algum lugar ... :) Posso estar enganado.

Poderia usar uma simples compreensão de lista ao atribuir a sua variável em vez disso.

positions = [p._asdict() for p in mt5.positions_get()]
 
nicholi shen:

Poderia usar uma simples compreensão de lista ao atribuir a sua variável em vez disso.

isto não muda a essência ... este é um ciclo adicional

 

Cavalheiros, os rapazes do próximo tópico estão a fazer perguntas sobre as libras:

URL:https://www.mql5.com/en/forum/306742/page11#comment_15595095

Pode dar-nos algum apoio?


A função symbols_get deve retornar um gerador de SymbolInfo chamado tuples. Uma chamada a símbolos_get sem args deve devolver todos os símbolos disponíveis no terminal. A função deve levar uma chamada de retorno que seria passada num SymbolInfo nomeadotuple para ser processada usando a função de filtro. Aqui estão alguns exemplos.

import MetaTrader5 as mt5
from contextlib import contextmanager
import re


@contextmanager
def metatrader_connection(**kw):
    try:
        if not mt5.initialize(**kw):
            print("Failed to initialize python MT5")
            raise Exception
        yield
    finally:
        mt5.shutdown()


def symbols_get(function=None):
    """
    No function passed in will result in all symbols returned to the caller.
    If a callable function is passed in then the function is passed a SymbolInfo tuple for filtering
    :param function: callback function to filter the symbols
    """
    all_symbols_in_terminal_info = map(
        mt5.symbol_info,
        ['EURUSD', 'USDJPY', 'GBPJPY', 'EURGBP'] # *example only* this would represent all symbols available to the terminal
    )
    if function is not None:
        return filter(function, all_symbols_in_terminal_info)
    return all_symbols_in_terminal_info


if __name__ == "__main__":
    with metatrader_connection():
        all_terminal_symbols = symbols_get()
        jpy_symbols = symbols_get(lambda s: "JPY" in s.name)
        jpy_symbols_using_re = symbols_get(lambda s: re.match(r'\w*JPY\w*', s.name))
        visible_symbols = symbols_get(lambda s: s.visible)
        selected_symbols = symbols_get(lambda s: s.select)


        def my_criteria(symbol_info):
            return 'USD' in symbol_info.name and symbol_info.session_deals > 0


        usd_symbols_with_session_deals = symbols_get(my_criteria)
 

Boa noite, poderia por favor aconselhar-me, compreendo que este conector não é capaz de obter informações a partir de indicadores conectados?

Exemplo:

int  iMA(
   string              symbol,        // имя символа
   ENUM_TIMEFRAMES      period,        // период
   int                 ma_period,    // период усреднения
   int                 ma_shift,     // смещение индикатора по горизонтали
   ENUM_MA_METHOD       ma_method,    // тип сглаживания
   ENUM_APPLIED_PRICE   applied_price  // тип цены или handle
   );
 
9805244:

Boa noite, poderia por favor aconselhar-me, compreendo que este conector não é capaz de obter informações a partir de indicadores conectados?

Exemplo:

Para que é que precisa dele? Não pode calculá-lo em Python? Surpreende-me.