Запустить скрипт pyhon с аргументами и получить его вывод

 

Добрый день.

В рамках создания автоматической торговой системы появилась необходимость запуска Python скрипта с аргументами из советника, а также, читать его вывод. Скрипт консольный.

Собственно, есть python-скрипт, который запускается так: "python Attempt0006-2.py 125800 125800 126120 126190 5615 526770.2174090254 199443.9274603734 30526.7073583357 340085.7909435491 131269.7419648964 28089.70269081854"

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

Его вывод - это всегда число типа float. Одна строка.

Как его запустить из советника и прочитать его вывод?

То, что я встречал на https://www.mql5.com - это либо просто запуск внешнего файла без чтения вывода, либо pipes. С помощью каналов мне пока тоже непонятно, как это реализовать.

Спасибо.

Discover new MetaTrader 5 opportunities with MQL5 community and services
Discover new MetaTrader 5 opportunities with MQL5 community and services
  • www.mql5.com
Ask questions on technical analysis, discuss trading systems and improve your MQL5 programming skills to develop your own trading strategies. Communicate and share your experience with traders from anywhere in the world, answer questions and help beginners — MQL5.community is developing along with you. Indonesian Member I want to know how...
 
MetaTrader 5 (MQL5) + Python 3 DLL для Forex, CFD и Futures
  • roffild.com
Использование MetaTrader с Python 3 на финансовых фондовых биржах, Forex, CFD и Futures. Из MetaTrader можно получать котировки в Python, но нет полноценной связи между ними. Пост одного из разработчиков. Главная идея и отличие этой обертки от остальных: обмен данными между MQL и Python через заранее созданные функции. Это самый быстрый и...
 

Сергей, большое спасибо.

Буду пробовать  делать как в статье.

 
Да, сделайте вы наконец обычную ДЛЛ, и не мучайтесь. Вообще-то ДЛЛ - это стандартное решение. Посмотрите папку любо программы, МТ, хотя бы. Сколько там ДЛЛ? Зачем бы это?
 
Yuriy Asaulenko:
Да, сделайте вы наконец обычную ДЛЛ, и не мучайтесь. Вообще-то ДЛЛ - это стандартное решение. Посмотрите папку любо программы, МТ, хотя бы. Сколько там ДЛЛ? Зачем бы это?

А ведь всего почти год назад просил ДЛЛку для Питона: https://www.mql5.com/ru/forum/245373/page4#comment_8304589

Yuriy Asaulenko:

3. Все (или почти все) библиотеки уже портированы в тот-же Python. Не проще-ли сделать всего один порт к работающему приложению Питон, и, спокойно и неторопясь, сразу пользоваться всеми библиотеками. Тем более, что все порты библиотек к Питону хорошо проверены и документированы. В дополнение: Питон - язык сценариев, и его доля времени в исполнении библиотек минимальна. На быстродействие не повлияет. Учтем еще, что в Питон есть полноценные потоки, а многие порты к MQL просто виснут без этого, и развисают, когда поезд уже ушел..

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

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

Теперь призыв отказаться полностью от Питона в пользу одних ДЛЛок?

 
Roffild:

А ведь всего почти год назад просил ДЛЛку для Питона: https://www.mql5.com/ru/forum/245373/page4#comment_8304589

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

Теперь призыв отказаться полностью от Питона в пользу одних ДЛЛок?

Нет. Призыв - Питон череэ ДЛЛ! Ура, товарищи.
См мой блог о SQLite.
 
Сокеты - эт хорошо, сам их давно применяю, но тоже через ДЛЛ.
К недостаткам сокетов при большом объеме и разнообразии передаваемой/принимаемой инфы можно отнести необходимость изобретения протоколов обмена и кодирование-декодирование инфы на передаче и приеме.
Пытаюсь сейчас от этого уйти передавая инфу через БД, в которой инфа уже изначально структурирована и разложена по полочкам. На данный момент с SQLite удалось сделать скорость обмена ~10МБ/с.
Питон довольно просто стыкуется с SQLite, и здесь проблем нет.
 

Любая межпроцессорная синхронизация (пайпы, сокеты и т.п.) гораздо медленнее прямого вызова функции.

Если устраивает время одного тестового прохода на две недели за 1 час с применением сокетов... 

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

 
Roffild:

Любая межпроцессорная синхронизация (пайпы, сокеты и т.п.) гораздо медленнее прямого вызова функции.

Если устраивает время одного тестового прохода на две недели за 1 час с применением сокетов... 

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

Держите меня семеро.
Тестовый проход за 3 мес - 1.5 минуты. И реал не сильно отличается от теста.
И всего-то, подходы другие к тестированию и настройке системы.
Оптимизация - тьфу 3 раза.
 
Yuriy Asaulenko:
Держите меня семеро.
Тестовый проход за 3 мес - 1.5 минуты. И реал не сильно отличается от теста.
И всего-то, подходы другие к тестированию и настройке системы.
Оптимизация - тьфу 3 раза.

Ну да... Если тестировать только по ценам открытия и почти не торговать, то можно и в 5 секунд уложиться :D

Если тестировать все тики и по 10-20 ордеров в день, то на средней нейронке на сокетах проход будет около часа.

 
Roffild:

Ну да... Если тестировать только по ценам открытия и почти не торговать, то можно и в 5 секунд уложиться :D

Если тестировать все тики и по 10-20 ордеров в день, то на средней нейронке на сокетах проход будет около часа.

Конечно по Опен маловато будет, по ohlc тоже. Но, убей не понимаю, зачем тестировать на всех тиках. Эт садо-мазо какой-то.
Причина обращения: