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

 
Renat Fatkhullin:

Новая версия MetaTrader 5 for Python 5.0.18 и бета версия MetaTrader 5 build 2319:

  • бета МТ5 скачивается через Справка -> Проверить бета версию
  • питон библиотека:

Так как все апи изменилось, то старые примеры больше не работают.

Вот новый набор функций:

Пример:

Планируется ли добавление функций для запуска тестирования/оптимизации и получения их результатов?

 

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

Это решение для тех, кто занимается глубокими исследованиями в питоне и хочет:

  1. доступ к рыночной информации из МТ5
  2. доступ к истории сделок и открытым позициям
  3. торговать

Тестер стратегий только для MQL5 программ.

Позже мы расширим библиотеку и дадим возможность обращаться к встроенным и кастомным индикаторам из терминала.

 

В общем, ситуация на данный момент такова: ставил на 3 машины windows 7. 

Итог: 333

Поставил на windows server 2012 - завелся с пол оборота. И даже на питоне 3.8.1

 
Dmitri Custurov:

В общем, ситуация на данный момент такова: ставил на 3 машины windows 7. 

Итог:

Поставил на windows server 2012 - завелся с пол оборота. И даже на питоне 3.8.1

Десятки нет под рукой, но думаю и там заведется.

 
На всякий случай установил на семерку visual studio и либы с ней. Не заводится. Ушел курить сокеты. Очень классная вещь. На джаву уже завел.
 

На 10 стало нормально.

from MetaTrader5 import *
#import MetaTrader5 as mt5
import time

initialize()
wait()

# mt5.initialize()
# mt5.wait()

dev = 0.00010;
symbol = "EURUSD"
buy_price = 0

symbol_select(symbol)

Acc = account_info()
Term = terminal_info()
vr = version()

Acc.server
Acc.login
Term.build

'MetaQuotes-Demo'
18192632
2319

1.Осталась прошлая проблема. При инициализации терминал запускается с произвольным брокером и счетом. Вроде обещали поправить?

2. Ордера исполняются. Дальше не проверял.

3. Не понятно почему модуль "metatrader5               5.0.18                   pypi_0    pypi" импортируется только как "MetaTrader5"?

Будем пробовать.

Удачи

 
Renat Fatkhullin:

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

Это решение для тех, кто занимается глубокими исследованиями в питоне и хочет:

  1. доступ к рыночной информации из МТ5
  2. доступ к истории сделок и открытым позициям
  3. торговать

Тестер стратегий только для MQL5 программ.

Позже мы расширим библиотеку и дадим возможность обращаться к встроенным и кастомным индикаторам из терминала.

Запуск самих питоновских скриптов на оптимизацию не особо интересен.

Интересна возможность автоматизации оптимизации mql5-советников посредством питоновских скриптов. Что-то навроде того, о чём написано в статье "Управление оптимизацией".

Управление оптимизацией (Часть 2): Создание ключевых объектов и логики приложения
Управление оптимизацией (Часть 2): Создание ключевых объектов и логики приложения
  • www.mql5.com
В текущей статье мы продолжаем процесс создания удобного графического интерфейса для управления оптимизациями в нескольких терминалах одновременно. В прошлой статье мы рассмотрели способ, позволяющий нам запустить терминал из консоли, а также структуру конфигурационного файла. В данной статье мы рассмотрим создание обертки для терминала на...
 
Renat Fatkhullin:

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

Это решение для тех, кто занимается глубокими исследованиями в питоне и хочет:

  1. доступ к рыночной информации из МТ5
  2. доступ к истории сделок и открытым позициям
  3. торговать

Тестер стратегий только для MQL5 программ.

Позже мы расширим библиотеку и дадим возможность обращаться к встроенным и кастомным индикаторам из терминала.

Я правильно понимаю, что для передачи из Py в mt5 рассчитанных значений и массивов, таких функций не будет ?
И остаётся использовать - сетевые решения, или пилить модуль по передаче через память?

Как я заметил, теперь изменилась структура объектов
раньше было

Time  = [x.time for x in ticks]

теперь стало

Time  = [x[0] for x in ticks]

Не могли бы вы описать, структуры для  copy_ticks  и  copy_rates ?
Какие индексы x[], чему соответствуют.

Или та же последовательность? что и в

struct MqlTick 
{ 
   datetime     time;          // Время последнего обновления цен 
   double       bid;           // Текущая цена Bid 
   double       ask;           // Текущая цена Ask 
   double       last;          // Текущая цена последней сделки (Last) 
   ulong        volume;        // Объем для текущей цены Last 
   long         time_msc;      // Время последнего обновления цен в миллисекундах 
   uint         flags;         // Флаги тиков 
   double       volume_real;   // Объем для текущей цены Last c повышенной точностью 
};
 

Roman:

Как я заметил, теперь изменилась структура объектов

раньше было

теперь стало

Не могли бы вы описать, структуры для  copy_ticks  и  copy_rates ?
Какие индексы x[], чему соответствуют.

Или та же последовательность? что и в

Это теперь numpy массив, а не tuple как был раньше (т.е.эффективный прямой маппинг на память самих данных), его формат можно увидеть просто выведя его:

>>> ticks1 = mt5.copy_ticks_from("EURAUD", datetime(2020,2,13,13), 20, mt5.COPY_TICKS_ALL)
>>> ticks1
array([(1581591600, 1.61633, 1.61657, 0., 0, 1581591600170, 134, 0.),
       (1581591600, 1.61633, 1.61658, 0., 0, 1581591600362,   4, 0.),
       (1581591600, 1.61633, 1.61659, 0., 0, 1581591600569,   4, 0.),
       (1581591600, 1.61636, 1.61659, 0., 0, 1581591600759, 130, 0.),
       (1581591601, 1.61633, 1.61659, 0., 0, 1581591601964, 130, 0.),
       (1581591602, 1.61634, 1.61658, 0., 0, 1581591602261, 134, 0.),
       (1581591606, 1.61635, 1.61658, 0., 0, 1581591606276, 130, 0.),
       (1581591607, 1.61637, 1.61661, 0., 0, 1581591607795, 134, 0.),
       (1581591607, 1.61643, 1.61664, 0., 0, 1581591607880, 134, 0.),
       (1581591608, 1.61642, 1.61665, 0., 0, 1581591608184, 134, 0.),
       (1581591608, 1.61643, 1.61667, 0., 0, 1581591608791, 134, 0.),
       (1581591608, 1.61642, 1.61667, 0., 0, 1581591608992, 130, 0.),
       (1581591609, 1.61642, 1.61665, 0., 0, 1581591609192,   4, 0.),
       (1581591609, 1.61642, 1.61667, 0., 0, 1581591609584,   4, 0.),
       (1581591611, 1.61642, 1.61666, 0., 0, 1581591611397,   4, 0.),
       (1581591611, 1.61642, 1.61667, 0., 0, 1581591611694,   4, 0.),
       (1581591612, 1.61643, 1.61667, 0., 0, 1581591612091, 130, 0.),
       (1581591612, 1.61643, 1.61665, 0., 0, 1581591612881,   4, 0.),
       (1581591613, 1.61644, 1.61665, 0., 0, 1581591613300, 130, 0.),
       (1581591613, 1.61648, 1.6167 , 0., 0, 1581591613498, 134, 0.)],
      dtype=[('time', '<i8'), ('bid', '<f8'), ('ask', '<f8'), ('last', '<f8'), ('volume', '<u8'), ('time_msc', '<i8'), ('flags', '<u4'), ('volume_real', '<f8')])

теперь их можно сразу де получать как отдельные вектора(умножать, вычитать) и рисовать графики:

rates2 = mt5.copy_rates_from_pos("EURGBP", mt5.TIMEFRAME_M1, 0, 1000)

import matplotlib.pyplot as plt

plt.plot(rates2['time'], rates2['low'], 'g-')
plt.plot(rates2['time'], rates2['high'], 'r-')

plt.show()
 
Almaz:

Это теперь numpy массив, а не tuple как был раньше (т.е.эффективный прямой маппинг на память самих данных), его формат можно увидеть просто выведя его:

теперь их можно сразу де получать как отдельные вектора(умножать, вычитать) и рисовать графики:

Благодарю Алмаз, теперь понятно.

Остался открытым вопрос:
Я правильно понимаю, что для передачи из Py в mt5 рассчитанных значений и массивов, таких функций не будет ?
И остаётся использовать - сетевые решения, или пилить модуль по передаче через память?

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