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

 
Rashid Umarov:

Проверьте, какой тип счета у Вас - неттинг или хеджинг. Для неттинга тикет уже существующей позиции не изменится, и искать позицию после доливки по номеру ордера нет смысла.

Ага, все понятно, посмотрел да, в случае открытия позиции на неттинг тикет, соответствует открываемой позиции. Суть понятна.

 
Almaz:
код ошибки 1, это успех mt5.RES_S_OK, в следующей сборке будет писаться [1, 'Success']. Коды с отрицательными значениями - ошибки mt5.RES_E_xxx.

Да, спасибо - суть понятна, почему пустая строка была.

 
Привет, есть ли какое-либо обновление в посте № 517 о получении обновления от терминала о newbar?
 
fbrand:
Привет, есть ли какое-либо обновление в посте № 517 о получении обновления от терминала о newbar?

Пока приходится циклить с проверкой по времени:

if mt5.symbol_info_tick(symbol).time % (60 * timefr) == 0:
...

Не очень удобно. Но как временный вариант годится.

 
Vladimir Perervenko:

Пока приходится циклить с проверкой по времени:

Не очень удобно. Но как временный вариант годится.

Не планируется. Проверяйте новые бары по таймеру или в цикле.

 
Rashid Umarov :

Not planned. Check for new bars on a timer or in a loop.


If you use according to Vladimir, we will not get the exact volume then, but only volume of that tick at polling?


And if you then use the new bars in EA to call the Python script, and the script points to more than one symbol, are all new bars for all symbols in the terminal executed at the same time, or should I create a Python script and advisor for each symbol?


Thanks

ps: sorry had to go to english as the translator messed up the words
Обработчик события "новый бар"
Обработчик события "новый бар"
  • www.mql5.com
Для создателей индикаторов и экспертов всегда был актуален вопрос написания экономичного кода с точки зрения времени выполнения. Можно подойти к решению этой задачи с разных сторон. Из этой обширной темы в данной статье будет затронут, казалось бы уже решенный вопрос: проверка появления нового бара. Это достаточно популярный способ ограничения...
 

Использование history_orders_get().

В документации, явно копи-паст :) (https://www.mql5.com/ru/docs/integration/python_metatrader5/mt5historyordersget_py)

И есть странность по использованию:

    from_date = datetime(2020,1,1)
    to_date = datetime.now()
    if mt5.initialize(acc['path'], login=login, server=acc['server'], password=acc['pass']):
        orders = mt5.history_orders_get(from_date, to_date)    
        if len(orders) > 0:
            orders_frame = pd.DataFrame(orders)
            print(orders_frame.head())

Результат:

 python.exe .\history-deal-mt-1.py
         0           1              2           3              4  5  6  7  8  9      10       11  12  13    14   15       16      17      18       19   20      21             22 23
0  4308935  1583603265  1583603265527  1583603267  1583603267535  0  0  0  0  4  234000  4308935   0   3  0.01  0.0     0.00     0.0     0.0  9128.00  0.0  BTCUSD  python script
1  4308936  1583603511  1583603511561  1583603511  1583603511561  0  1  0  1  4  234000  4308935   0   5  0.01  0.0  9128.01     0.0     0.0  9128.01  0.0  BTCUSD  [tp 9128.010]
2  4308937  1583603550  1583603550455  1583603552  1583603552460  0  1  0  0  4       0  4308937   0   0  0.01  0.0     0.00     0.0     0.0  9127.50  0.0  BTCUSD
3  4308938  1583603969  1583603969250  1583603971  1583603971253  0  0  0  0  4  234000  4308938   0   3  0.01  0.0     0.00  9135.5  9142.5  9139.00  0.0  BTCUSD  python script
4  4308939  1583603974  1583603974183  1583603974  1583603974188  0  1  0  1  4  234000  4308938   0   4  0.01  0.0  9135.50     0.0     0.0  9135.50  0.0  BTCUSD  [sl 9135.500]

итого, данные выводятся, но где, что - остается только гадать.

Народ, плс - добавьте в TradeOrder (и подобные) что-то типа _fields или as_dict() или __dict__.

    Point = collections.namedtuple('Point', ['x', 'y', 'val'])    
    print(Point._fields)
python.exe .\history-deal-mt-1.py
('x', 'y', 'val')

Ну реально, сейчас не удобно. 

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

Использование history_orders_get().

В документации, явно копи-паст :) (https://www.mql5.com/ru/docs/integration/python_metatrader5/mt5historyordersget_py)

Обновите справку или сходите по ссылке

 
Rashid Umarov:

Не планируется. Проверяйте новые бары по таймеру или в цикле.

По поводу таймера можно поподробней? 

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

Народ, плс - добавьте в TradeOrder (и подобные) что-то типа _fields или as_dict() или __dict__.

Ну реально, сейчас не удобно. 

В 5.0.27 уже есть, у всех structure sequence (аналог named tuple для C API) добавлен метод _asdict()

sym = mt5.symbol_info("EURUSD")._asdict()
for i in sym:
   print(i, '=', sym[i])
Причина обращения: