MetaTrader 5 Python User Group - как использовать Python в Метатрейдере - страница 57

 
Almaz:

В 5.0.29 добавлены symbols_total(), symbols_get([group="EURUSD, "USDGBP", *RU*"]), для работы требуется установить последнюю бета версию Терминала.

Также во все ф-ции orders_get(),positions_get(), history_orders_get(), history_deals_get() добавлена возможность фильтрации по группе - group="EURUSD, "USDGBP", *RU*".
Методы order_check(), order_send() в ответе возвращают изначальный запрос на исполнения в поле request.

Спасибо.

 
Roman:

Что именно вы имеете ввиду? Копирование массива из mql5 в py и обратно?
Вы хоть бы внимательно прочли о чём речь.
А то что надо или нет, не нужно думать только за себя. Если тебе не нужно, то другим это нужно. 

Просто из интереса, какие массивы данных Вы хотите переносить из МТ? 

Передавать в МТ , разработчики несколько раз уже говорили, ничего не будут. Для этого нужно использовать другие возможности.  

 
Vladimir Perervenko:

Просто из интереса, какие массивы данных Вы хотите переносить из МТ? 

Передавать в МТ , разработчики несколько раз уже говорили, ничего не будут. Для этого нужно использовать другие возможности.  

Да любые, свои рассчитанные массивы.
Я строю исключительно синтетики, и крайне не хватает возможности для передачи массивов в обе стороны. 
Это понятно что можно использовать PyAPI, но это снова привязка к dll.
А используя PyAPI, тогда вообще отпадает необходимость в этой библиотеке интеграции.

 
Roman:

Да любые, свои рассчитанные массивы.
Я строю исключительно синтетики, и крайне не хватает возможности для передачи массивов в обе стороны. 
Это понятно что можно использовать PyAPI, но это снова привязка к dll.
А используя PyAPI, тогда вообще отпадает необходимость в этой библиотеке интеграции.

Не подумайте, что хочу поучать. Синтетики Вы считаете на основе котировок из терминала. Сбросьте котировки в Питон и выполните все вычисления в нем же. 

А вот с обратной передачей массивов нужно будет делать гимнастику. Легче всего через БД. 

Или использовать это. Где то была небольшая ветка с этим проектом. Или это

По любому все многообразие хотелок трейдеров эта интеграция не решит. Но она решает две основных и по моему самых важных задачи: быстрое получение котировок и управление торговлей. 

Все остальное самостоятельно со своей инфраструктурой.

Удачи

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

Не подумайте, что хочу поучать. Синтетики Вы считаете на основе котировок из терминала. Сбросьте котировки в Питон и выполните все вычисления в нем же. 

А вот с обратной передачей массивов нужно будет делать гимнастику. Легче всего через БД. 

Или использовать это. Где то была небольшая ветка с этим проектом. Или это

По любому все многообразие хотелок трейдеров эта интеграция не решит. Но она решает две основных и по моему самых важных задачи: быстрое получение котировок и управление торговлей. 

Все остальное самостоятельно со своей инфраструктурой.

Удачи

О чём и речь, не важно какая реализация, через dll или БД, сокеты или хоть текстовые файлы и т.д.
Но это снова дополнительный костыль, не относящийся к библиотеке.
Речь о том, что сейчас идёт активная разработка интеграционной mt5 библиотеки, по этому желательно изначально заложить в неё необходимые возможности для пользователей.

 
Dmitry Prokopyev:

Thanks, this example I saw, it works.

I'm a little about something else.


positions_get - the list of TradePosition will be returned to me. In principle, you can throw in pandas and work fine.

But everything is not limited to one pandas, and if you need to get something like:

you have to somehow compose, pandas or for ... somehow a lot of extra body movements. 

It has become much more convenient with _asdict (), if the one who writes is not a MQL5 prog, but let's say a pythonist ... or a datasynetist, then list / dict is

The basic elements of python, many are building a data transfer on list / dict.

Tuples are used, too often and a lot, but only if you need to tightly control the types of data that move in it.

and also hang an error handler, if not used or assigned properly. Well, somewhere ... :) I could be wrong.

You could use a simple list comprehension when assigning your variable instead. 

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

You could use a simple list comprehension when assigning your variable instead. 

this does not change the essence ... this is an additional cycle

 

Господа, в соседней ветке ребята вопросы задают по либе:

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

Окажете поддержку?


The symbols_get function should return a generator of SymbolInfo named tuples. A call to symbols_get without args should return all symbols available in the terminal. The function should take a callback which would be passed in a SymbolInfo namedtuple to be processed using the filter function. Here are some examples. 

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)
 

Добрый вечер, подскажите пожалуйста, я так понимаю информацию с подключенных индикаторов этот коннектор брать не умеет?

Пример:

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:

Добрый вечер, подскажите пожалуйста, я так понимаю информацию с подключенных индикаторов этот коннектор брать не умеет?

Пример:

Это то Вам зачем? Вы что не можете посчитать это в Питоне? Удивляете.