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

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

Тестил, все зависит от железа, на котором запущено. 

Один экземпляр ест где-то 45-50Мб RAM + 2,5-4% CPU. (Да, % CPU зависит от типа CPU, в моем случае - Intel Xeon  L5640 @ 2.27GHz)

Столько же, один экземпляр python. 

Есди python работает с историей, то + 200-300Mb RAM. CPU почти не тратится.

Ну а зачем, это уже от ТЗ или идеи  зависит. 

Понятно. Спасибо за инфу.

 
Разработчики, сделайте пож-ста API-функцию copy_buffer(). Получение индикаторных данных по аналогу.
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Отсчет элементов копируемых данных (индикаторный буфер с индексом buffer_num) от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар (значение индикатора для текущего бара). При копировании заранее неизвестного количества данных в качестве массива-приемника buffer[] желательно...
 
Denis Kirichenko:
Разработчики, сделайте пож-ста API-функцию copy_buffer(). Получение индикаторных данных по аналогу.

А в Питоне нет пакета с индикаторами? Или это какой то особый индикатор. Этот вроде рабочий 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:

А в Питоне нет пакета с индикаторами? Или это какой то особый индикатор. Этот вроде рабочий https://github.com/twopirllc/pandas-ta

copy_buffer() подразумевает получение массива данных, для своих расчётов.
При чём copy_buffer() должен работать в обе стороны.
Очень не хватает двунаправленной передачи массива.

 
Roman:

Не хватает функций symbols_total и symbol_name
Чтобы получать список символов, на подобие этого:

В 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:

copy_buffer() подразумевает получение массива данных, для своих расчётов.
При чём copy_buffer() должен работать в обе стороны.
Очень не хватает двунаправленной передачи массива.

Да их масса на github, есть как б\п либы, так платные пакеты ... 

Не переносите на python модель работы с MQL5. Они разные и цели у них разные.

 
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.

А list of _todict() еще не умеют возвращать?

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

А list of _todict() еще не умеют возвращать?

Могут, посмотрите пример

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

Результат

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:

Могут, посмотрите пример

Результат

Спасибо, этот пример я видел, это работает.

Я чуть о другом.

    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 - мне вернет list of TradePosition. В принцпе норм, можно закинуть в pandas и отлично работать.

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

Но одной pandas все не ограничивается, и если надо получить что-то типа:

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

приходится как-то приобразовывать, pandas или for ... как-то много лишних телодвижений. 

С _asdict() стало на порядок удобне, если тот кто пишет, не прогер на MQL5, а скажем питонист ... или датасайнетист, то list/dict это

сновные элементы питона, на list/dict многие либы строют трансфер данных.

Tuples используются, тоже часто и много, но только если надо жестко контролировать типы данных, которые движутся в нем.

и навесить еще и обработчик ошибок, при не правильном использовании или присвоении. Ну где-то ... :) Могу ошибаться.

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

Да их масса на github, есть как б\п либы, так платные пакеты ... 

Не переносите на python модель работы с MQL5. Они разные и цели у них разные.

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

Причина обращения: