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

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

Поменялись также константы?

На выходе:

да у констант убран префикс MT5_, вот пример использования:

from datetime import datetime
import MetaTrader5 as mt5

mt5.initialize()
mt5.wait()

print(mt5.terminal_info())
print(mt5.version())

ticks1 = mt5.copy_ticks_from("EURAUD", datetime(2020,1,28,13), 10000, mt5.COPY_TICKS_ALL)
ticks2 = mt5.copy_ticks_range("AUDUSD", datetime(2020,1,27,13), datetime(2020,1,28,13,1), mt5.COPY_TICKS_ALL)

rates1 = mt5.copy_rates_from("EURUSD", mt5.TIMEFRAME_M1, datetime(2020,1,28,13), 1000)
rates2 = mt5.copy_rates_from_pos("EURGBP", mt5.TIMEFRAME_M1, 0, 1000)
rates3 = mt5.copy_rates_range("EURCAD", mt5.TIMEFRAME_M1, datetime(2020,1,27,13), datetime(2020,1,28,13))

mt5.shutdown()

print('ticks1(', len(ticks1), ')')
print('ticks2(', len(ticks2), ')')
print('rates1(', len(rates1), ')')
print('rates2(', len(rates2), ')')
print('rates3(', len(rates3), ')')

import matplotlib.pyplot as plt

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

plt.show()

более сложный пример - эксперт с торговлей по двум скользящим средним без использования истории:

import MetaTrader5 as mt5
import time

mt5.initialize()
mt5.wait()

info = mt5.terminal_info()
if info.trade_allowed == False:
    print("Auto-trading disabled in Terminal, enable it")
    quit()

symbol = "EURUSD" # currency
lot = 0.01;       # buy lot
interval = 5      # price requesting interval in sec
long_len = 11     # long moving average length
short_len = 7     # short moving average length
long_ma = []      # long ma list
short_ma = []     # short ma list
ticket = 0        # ticket for sell

mt5.symbol_select(symbol)

# wait some time
time.sleep(1)

print("\nPreparing...")
for i in range(long_len):
    p = mt5.symbol_info_tick(symbol)
    print(p.bid,'/',p.ask)
    avg = (p.ask + p.bid) / 2

    long_ma.append(avg)
    if i >= long_len - short_len:
        short_ma.append(avg)
    time.sleep(interval)

print("\nWorking...")
while True:
    p = mt5.symbol_info_tick(symbol)
    print(p.bid,'/',p.ask)
    avg = (p.ask + p.bid) / 2
    
    # short values
    prev_short = sum(short_ma) / short_len
    short_ma.pop(0)
    short_ma.append(avg)
    short = sum(short_ma) / short_len
    
    # long values
    prev_long = sum(long_ma) / long_len
    long_ma.pop(0)
    long_ma.append(avg)
    long = sum(long_ma) / long_len

    # buy signal
    if prev_short < prev_long and short > long:
        print("BUY: ([-1]:",prev_short,"/",prev_long,", [0]:",short,"/",long,")")
        r = mt5.Buy(symbol, lot)
        if r.retcode != mt5.TRADE_RETCODE_DONE:
            print("Buy failed: ", r)
        else:
            ticket = r.order
    elif prev_short > prev_long and short < long and ticket>0:
        print("CLOSE: ([-1]:",prev_short,"/",prev_long,", [0]:",short,"/",long,")")
        r = mt5.Sell(symbol, lot, ticket=ticket)
        if r.retcode != mt5.TRADE_RETCODE_DONE:
            print("Sell failed: ", r)
        else:
            ticket = 0
           
    time.sleep(interval)

mt5.shutdown()
Dmytro Prokopiev
336
Almaz:

да у констант убран префикс MT5_, вот пример использования:

более сложный пример - эксперт с торговлей по двум скользящим средним без использования истории:

Спасибо. 

Эволюция либы это хорошо. Вопрос к разрабам - есть где роудмап по пиновской либе?

Каких нововведений можно еще ждать, каких не ждать?

Maxim Dmitrievsky
24883
Хотелось бы обновления документации, ага
MetaQuotes
Админ
26447

В тестовом сервере (сервер MetaQuotes-Beta, адрес 78.140.180.203:443) доступна бета версия терминала 2323 с новыми возможностями. Публичную бету будем выкатывать завтра.

Также выпустили новую версию MetaTrader 5.0.20 для Питона (pip install --upgrade metatrader5) с новым синтаксисом для переключения счетов:

import MetaTrader5 as mt5

mt5.initialize(timeout=10000)
mt5.initialize(login=25035662, password="oxeb7lpb", server="MetaQuotes-Demo")
mt5.login(25035662)
mt5.login(25035662, timeout=10000)
mt5.login(25035662, "oxeb7lpb")
mt5.login(25035662, password="oxeb7lpb")
mt5.login(25035662, password="oxeb7lpb", server="MetaQuotes-Demo")

Теперь можно прямо в инициализации указывать авторизацию, причем как в полном виде, так и в коротком.

Функция wait упразднена и теперь полный цикл инициализации с ожиданием производится прямо в initialize, где можно задать и время ожидания в миллисекундах.

Питоновская библиотека уже гарантированно находит самую последнюю активную копию терминала даже если она была установлена в портативном (ключ /portable) режиме.


Питоновские программы уже показываются прямо в навигаторе:


У релизу в эту пятницу их можно будет уже полноценно запускать как обычные MQL5 скрипты и они будут привязываться к графикам.


В последующем мы добавим в питоновскую библиотеку доступ ко всем(включая кастомные) индикаторам в режиме чтения. Это позволит сделать работу в питоне более продуктивной. Но это пока не приоритет, мы будем это делать сильно позже.

fxsaber
21763
fxsaber  
Renat Fatkhullin:

Также выпустили новую версию MetaTrader 5.0.20 для Питона (pip install --upgrade metatrader5) с новым синтаксисом для переключения счетов

Возможностей больше, чем у MQL5.

MetaQuotes
Админ
26447

Параллельно мы расширяем возможности редактора и в следующем релизе (не в ближайшем в пятницу) будет полная возможность использовать Clang/LLVM  и Microsoft Visual Studio для компиляции C++ программ:


Возможно, и C# включим.


Большую работу провели для полноценного использования SQLite баз данных: SQLite: нативная работа с базами данных на SQL в MQL5

Это позволяет удобно оперировать и обмениваться большими объемами данных между разными системами и внутри терминала.

Алексей Тарабанов
11416
fxsaber:

Возможностей больше, чем у MQL5.

Добиваем? 

Roman
2384
Roman  
Renat Fatkhullin:

Параллельно мы расширяем возможности редактора и в следующем релизе (не в ближайшем в пятницу)
будет полная возможность использовать Clang/LLVM  и Microsoft Visual Studio для компиляции C++ программ:

Для линковки .lib файлов в проекты
будет добавлен компоновщик? 

MetaQuotes
Админ
26447
Roman:

Для линковки .lib файлов в проекты
будет добавлен компоновщик? 

В рамках проектов можно указывать множество целевых вариантов:



У DLL/EXE файлов есть кастомные настройки дефайнов, библиотеки и дополнительные параметры для компилятора:

Линковщик автоматически используется от Clang или Visual Studio. Явным образом его указывать не надо.

MetaQuotes
Админ
26447
fxsaber:

Возможностей больше, чем у MQL5.

Это в результате у платформы MetaTrader 5 больше возможностей.

Сам по себе любой язык бесполезен без информационно-торговой платформы (платформа - это не терминал, а весь комплекс серверов с инфраструктурой и экосистемой), которая кормит его данными и обеспечивает исполнение сделок.

Наша задача представить цельную платформу с широким набором средств для алготрейдинга, покрывая разные сегменты потребителей.

Питон - явный победитель в ML и очень эффективный язык для ведения исследований. Пусть даже его в тестер не загнать, но и в режиме прямой интеграции он хорош.


Кстати, в отличии от других питоновских библиотек(часто написанных в лоб и слабо оптимизированных), мы сильно оптимизировали отдачу массивных чартовых данных. Это означает, что можно эффективно по памяти и быстро получать глубокую историю.