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

 
И еще интересен вопрос если python программу со всем его окружением я запущу в доккер-контейнере, а терминал будет снаружи, так будет работать?
 
Dmitri Custurov:
Если питоновская программа внутри себя выполняет логирование, многопоточность, соединение с терминалом по сокету, будет ли все это корректно отрабатывать если ее запустить на чарте?

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

import atexit
import logging
import os
from pathlib import Path

import pymt5adapter as mta


def main(conn):
    try:
        symbol, timeframe = mta.parse_args()
        conn.logger.info(f'Script dropped on {symbol} {mta.TIMEFRAME(timeframe).name}')
        return True
    except TypeError:
        conn.logger.warning(f'Missing... Drop on chart or start script with commandline args...')
        return False


if __name__ == '__main__':
    desktop_log_path = Path.home() / 'Desktop/python_mt5.log'
    atexit.register(lambda: os.startfile(desktop_log_path))
    logger = mta.get_logger(path_to_logfile=desktop_log_path, loglevel=logging.DEBUG)
    with mta.connected(raise_on_errors=True, logger=logger) as conn:
        main(conn)
 
Dmitri Custurov : And another interesting question is if I run a python program with all its environment in a docker container, and the terminal is outside, so will it work?

Я предполагаю, что вы используете контейнеры linux для докера, поэтому он не будет работать с пакетом MetaTrader5. Вы можете использовать python virtualenv. Это не сработает, если вы поместите скрипт на график, но он будет работать, если вы активируете среду и запустите его из командной строки.

 
Как быть с расширенной авторизацией когда требуется не только логин/пароль, но и пароль от ssl сертификата?
 
Dmitri Custurov:
Как быть с расширенной авторизацией когда требуется не только логин/пароль, но и пароль от ssl сертификата?

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

 
Alexey Viktorov:

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

Я на счет вот этого

initialize(
   path,                     // путь к EXE-файлу терминала MetaTrader 5
   login=LOGIN,              // номер счета
   password="PASSWORD",      // пароль
   server="SERVER",          // имя сервера, как оно задано в терминале
   timeout=TIMEOUT,          // таймаут
   portable=False            // режим portable
   )

Здесь нет поля для пароля от сертификата. Как поведет себя подключение из python если в терминале используется расширенная авторизация? 

 
Dmitri Custurov:

Я на счет вот этого

Здесь нет поля для пароля от сертификата. Как поведет себя подключение из python если в терминале используется расширенная авторизация? 

Так и надо было сразу писать полный вопрос. Я этого не знаю и промолчал-бы.

 
Dmitri Custurov:

Я на счет вот этого

Здесь нет поля для пароля от сертификата. Как поведет себя подключение из python если в терминале используется расширенная авторизация? 

Будет использован сертификат, уже активированный и сохраненный в терминале.

Но можете и сами подложить pfx файл в /config/certificates
 
Alexey Viktorov:

Так и надо было сразу писать полный вопрос. Я этого не знаю и промолчал-бы.

Прошу меня извинить. Думал из контекста этой ветки будет понятно, мне нужно было выразиться яснее.

 
Renat Fatkhullin:
Будет использован сертификат, уже активированный и сохраненный в терминале.

Но можете и сами подложить pfx файл в /config/certificates

Спасибо.