- Работа с Python - Разработка программ
- Установка Python и пакета MetaTrader5
- ONNX модели - Cоздание модели
Почитал справку и статьи, везде описывается как запустить МТ5 из Python и выполнять из Python команды MQL5. Мы с ИИ сделали на Python прототип стратегии и задача обратная - как запустить этот скрипт или его отдельные функции из MQL5 и получить ответные данные? Это вообще возможно? Пока я нашел только предложение из 20 века обмениваться данными через файлы!!!
две статьи видел: это первая - нет данных? или из этой подобное изобразить ....
- 2025.02.20
- www.mql5.com
Почитал справку и статьи, везде описывается как запустить МТ5 из Python и выполнять из Python команды MQL5. Мы с ИИ сделали на Python прототип стратегии и задача обратная - как запустить этот скрипт или его отдельные функции из MQL5 и получить ответные данные? Это вообще возможно? Пока я нашел только предложение из 20 века обмениваться данными через файлы!!!
ты всё правильно понял. Если главный это советник на MQL, то вызов питона через файлы, пайпы, exec или общие базы.
или переписывай всю логику советника в тормоза питона, тогда питон будет главным а терминал просто исполнителем
PS/ можно и сам интерпретатор питона запустить в советнике, но один на весь терминал. Второй интерпретатор уже не запустишь без side-эффектов и ошибок
две статьи видел: это первая - нет данных? или из этой подобное изобразить ....
ты всё правильно понял. Если главный это советник на MQL, то вызов питона через файлы, пайпы, exec или общие базы.
или переписывай всю логику советника в тормоза питона, тогда питон будет главным а терминал просто исполнителем
PS/ можно и сам интерпретатор питона запустить в советнике, но один на весь терминал. Второй интерпретатор уже не запустишь без side-эффектов и ошибок
#import "kernel32.dll" int CreateFileMappingA(int hFile, int lpAttributes, int flProtect, int dwMaximumSizeHigh, int dwMaximumSizeLow, string lpName); int MapViewOfFile(int hFileMappingObject, int dwDesiredAccess, int dwFileOffsetHigh, int dwFileOffsetLow, int dwNumberOfBytesToMap); bool UnmapViewOfFile(int lpBaseAddress); bool CloseHandle(int hObject); #import void WriteToMMF(double &data[], string mapName) { // Создаём MMF (4096 байт = 512 double) int hMap = CreateFileMappingA(-1, 0, 0x04, 0, 4096, mapName); if (hMap == 0) { Print("CreateFileMapping failed"); return; } // Получаем указатель на область памяти int pData = MapViewOfFile(hMap, 0x0004, 0, 0, 4096); if (pData == 0) { CloseHandle(hMap); Print("MapViewOfFile failed"); return; } // Пишем массив double в MMF через FileWriteArray // MQL5 позволяет писать в любой адрес памяти, если он валиден int hMem = FileOpen("memory", FILE_WRITE|FILE_BIN); // "memory" — специальный флаг if (hMem != INVALID_HANDLE) { FileSeek(hMem, pData, SEEK_SET); FileWriteArray(hMem, data, 0, ArraySize(data)); FileClose(hMem); } else { Print("FileOpen for memory failed"); } UnmapViewOfFile(pData); CloseHandle(hMap); }Вот это
#import "kernel32.dll"
сейчас решается через \MQL5\Include\WinAPI\memoryapi.mqh, а вот код на питоне, тоже ее творчество
import mmap import struct with mmap.mmap(-1, 4096, tagname="MySharedMemory") as mm: data = [] for i in range(10): # читаем 10 double mm.seek(i * 8) value = struct.unpack('d', mm.read(8))[0] data.append(value) print("Received:", data)
Ты писал: «можно и сам интерпретатор питона запустить в советнике, но один на весь терминал»/ Ок, запустили, а как обмениваться?
Нет, советник на тормозном питоне это извращение )). Пожалуй, сделаю на MMF, самый быстрый вариант. Типа такого, это ИИ Алиса написала:
Вот это
сейчас решается через \MQL5\Include\WinAPI\memoryapi.mqh, а вот код на питоне, тоже ее творчество
Ты писал: «можно и сам интерпретатор питона запустить в советнике, но один на весь терминал»/ Ок, запустили, а как обмениваться?
если уж запустили, то Python C API https://docs.python.org/3/c-api/index.html простынка длинная, но для минимума нужно всего 3-4 функции. Запихнуть массив double в объект питона, вызвать функцию, провести обратную операцию.
просто сам по себе интерпретатор питона не вполне дружен с тред-моделью терминала. Запуск второго интерпретатора в том-же или отдельном треде (на другом символе, другом чарте, советнике, etc) может привести к непредсказуемым последствиям.
- docs.python.org
Alexey Volchanskiy #:
Нет, советник на тормозном питоне это извращение )). Пожалуй, сделаю на MMF, самый быстрый вариант. Типа такого, это ИИ Алиса написала:
Вот это
сейчас решается через \MQL5\Include\WinAPI\memoryapi.mqh, а вот код на питоне, тоже ее творчество
Ты писал: «можно и сам интерпретатор питона запустить в советнике, но один на весь терминал»/ Ок, запустили, а как обмениваться?
если уж запустили, то Python C API https://docs.python.org/3/c-api/index.html простынка длинная, но для минимума нужно всего 3-4 функции. Запихнуть массив double в объект питона, вызвать функцию, провести обратную операцию.
просто сам по себе интерпретатор питона не вполне дружен с тред-моделью терминала. Запуск второго интерпретатора в том-же или отдельном треде (на другом символе, другом чарте, советнике, etc) может привести к непредсказуемым последствиям.
Питонские скрипты запускаются на графике МТ5 как родные - непосредственно из навигатора. Это дает основание предполагать, что они также могут запускаться и через MQL5. Помнится fxsaber делал автоматический запуск MQL-программ на чартах - подпихнуть туда питон вероятно пока никто не пробовал. Про получение ответных данных - другой вопрос - пайпы, файлы, вебсокеты, бд - всё сойдет.
import yfinance as yf # 2. ЗАГРУЗКА ДАННЫХ (7 дней минуток) print("📥 Качаем минутные данные EUR/USD...") data_1m = yf.download("EURUSD=X", period="7d", interval="1m", progress=False) close_prices = data_1m[('Close', 'EURUSD=X')].values print(f"✅ Скачано: {len(close_prices)} минутных баров") print(f"📊 Диапазон цен: {close_prices.min():.5f} - {close_prices.max():.5f}")
А также фильтровать их фильтрами с нулевой фазовой задержкой, строить HP канал. То есть на питоне только быстрое прототипирование, потом все буду переводить на MQL5. Но сейчас хочется прогнать прототип в тестере МТ5, используя питоновские наработки. Вот и думаю, как лучше это сделать...

... Пока научились вынимать минутки
Можно вынимать котировки по любым символам в терминале, используя функцию из Python-модуля интеграции с терминалом. Пример есть в справке внизу страницы.
- www.mql5.com
Можно вынимать котировки по любым символам в терминале, используя функцию из Python-модуля интеграции с терминалом. Пример есть в справке внизу страницы.
У меня давно скальпер работает на тиковых данных, выборка по таймеру с частотой 1 Гц, потом методы DSP. Для прототипа на питоне самое то!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
