Как запустить скрипт Python из MQL5? - страница 3

 
Alexey Volchanskiy #:
А в какой IDE работаешь с Джулией, VS Code? Я только-только начал и вижу, что язык похож на Матлабовский, что радует. Но пока я выдаю идеи ИИ Дипсику и Алисе, они мгновенно генерят код, так что я на 90% работаю тестером их кода. Вот оно, цифровое рабство ИИ. Алиса от Яндекса приятно удивила. Я помню доковидные времена, когда это был тупой скриптовый бот, даже сам скрипты под нее писал на продажу. А теперь довольно крутой ИИ.  

Спс, за наводку на Colab,  Алексей )  улыбнуло: "так что я на 90% работаю тестером их кода", тож такой ) Алиса:

Ваша схема идеальна:

  • Я генерирую код/объясняю логику.

  • Вы тестируете в Colab → видите реальные результаты.

  • Если что‑то сломалось — вы присылаете ошибку → я помогаю починить.

  • Вы повторяете до получения рабочего решения.

Так вы:

  • экономите время (не ждёте ответов на мелкие вопросы);

  • получаете код, проверенный на реальных данных;

 
Alexey Volchanskiy #:
Привлекает только джит-компиляция и конечная скорость в сравнении с интерпретатором Матлаб.

У Матлаб ведь внутри тоже байт-код и Джит-компил при исполнении ? 

 
Maxim Kuznetsov #:

У Матлаб ведь внутри тоже байт-код и Джит-компил при исполнении ? 

Я пока Матлаб и Жулию по скорости не сравнивал, но разные ИИ говорят, что Матлав интерпретатор, хотя и может создавать .exe. И Ренат еще в середине 2010-е говорил то же самое. Я пока только MS C++, MS C#, MQL5, и Python сравнивалл, на простеньком тесте с вычислением чмсла Пи. Скорость как раз по месту в списке выше. это при однопоточном исполнениее. А если включить в MS автоматическое распараллеливание, то плюсы и шарп выходят вперед. Жаль, я не игрок и карта слабенькая. мечтаю попробовать OpenCL. Но пока критична скорость именно разработки, хорошо, ИИ неплохо помогают. Как говорят грамотные люди: «В пучины пьянства и разврата мне не дает упасть зарплата!» Заработаю, сменю комп и тогда Баффет с Маском будут тренироваться на заднем дворе. Шутка ))
 
Alexey Volchanskiy #:
Я пока Матлаб и Жулию по скорости не сравнивал, но разные ИИ говорят, что Матлав интерпретатор, хотя и может создавать .exe. И Ренат еще в середине 2010-е говорил то же самое. Я пока только MS C++, MS C#, MQL5, и Python сравнивалл, на простеньком тесте с вычислением чмсла Пи. Скорость как раз по месту в списке выше. это при однопоточном исполнениее. А если включить в MS автоматическое распараллеливание, то плюсы и шарп выходят вперед. Жаль, я не игрок и карта слабенькая. мечтаю попробовать OpenCL. Но пока критична скорость именно разработки, хорошо, ИИ неплохо помогают. Как говорят грамотные люди: «В пучины пьянства и разврата мне не дает упасть зарплата!» Заработаю, сменю комп и тогда Баффет с Маском будут тренироваться на заднем дворе. Шутка ))

Зачем спрашивать ИИ когда можно получить объективку ???  

ИИ рассказывает и доходчиво обосновывает исторические высказывания леммингов. Что было в сети  преобладающим на момент обучения то он и выкладывает. Максимально при этом льстя читающему (это вторая часть устройства ИИ и "мы не собираем приватную информацию"). Поэтому его ответы воспринимаются с восторгом

 
Maxim Kuznetsov #:
Зачем спрашивать ИИ когда можно получить объективку ???
Ок, получи и выдай объективку по Матлабу, есть ли в нем хотя бы джит-компилятор, порадуй старика )) А гоблины, которые спрашивают ИИ, когда он поработит Землю, не интересуют
 

Для Романа Ш. Я личку редко смотрю, там все спамом забито. Если будешь адекватен, можно общаться здесь.
У меня сейчас узкая и четкая задача - запустить к НГ совершенно новую версию скальпера с помощью дипсика и других ИИ. Это не значит, что, как выдающиеся местные клоуны я пишу промпты а-ля:
— Ы-ы-ы, ты оно этаво таво, напиши мне грааль. Ы-ы-ы, а я пыва пока напьюсь.

Сначала моделировали в Google Colab на минутках, но там можно достать напрямую только минимум M1 за неделю, а мне нужны тики с частотой дискретизации 1 Гц. Решил для скорости работы фильтры перенести в MQL5, надеюсь сегодня с помощью дипсика сделать. Потом придется продолжать прототипирование в colab, но уже не с сырыми минутками, а отфильтрованными тиковыми данными с выбороркой. данными. Идей море и дипсик отлично помогает, особенно с Питоном, в котором я слаб, а в его либах вообще близок к нулю. 

Работа с MMF очень доходчиво описана у Рихтера в «Windows для профессионалов».

Связь решил делать через MMF, вот каркас класса на Python для обмена данными через Memory Mapped File (MMF), вариант от дипсика:

import mmap
import struct
import numpy as np
from typing import Optional

class MMFExchange:
    """
    Класс для обмена данными между MQL5 и Python через Memory Mapped File
    """
    
    def __init__(self, mmf_name: str = "MT5_PYTHON_DATA", buffer_size: int = 1024):
        """
        Инициализация MMF
        
        Args:
            mmf_name: имя файла отображения памяти
            buffer_size: размер буфера в байтах
        """
        self.mmf_name = mmf_name
        self.buffer_size = buffer_size
        self.mmf = None
        
    def connect(self) -> bool:
        """Открывает MMF для чтения/записи"""
        try:
            # В Windows создаем/открываем MMF
            self.mmf = mmap.mmap(0, self.buffer_size, self.mmf_name, access=mmap.ACCESS_WRITE)
            print(f"✅ Успешно подключено к MMF: {self.mmf_name}")
            return True
        except Exception as e:
            print(f"❌ Ошибка подключения к MMF: {e}")
            return False
    
    def send_data(self, data: np.ndarray) -> bool:
        """Отправляет данные в MMF (Python → MQL5)"""
        if self.mmf is None:
            print("❌ MMF не подключен")
            return False
            
        try:
            # Перемещаемся в начало файла
            self.mmf.seek(0)
            
            # Упаковываем данные: сначала количество, потом значения
            packed_data = struct.pack(f'I{len(data)}d', len(data), *data)
            
            # Записываем в MMF
            self.mmf.write(packed_data)
            self.mmf.flush()
            
            print(f"📤 Отправлено {len(data)} значений в MMF")
            return True
            
        except Exception as e:
            print(f"❌ Ошибка отправки данных: {e}")
            return False
    
    def receive_data(self) -> Optional[np.ndarray]:
        """Принимает данные из MMF (MQL5 → Python)"""
        if self.mmf is None:
            print("❌ MMF не подключен")
            return None
            
        try:
            # Перемещаемся в начало файла
            self.mmf.seek(0)
            
            # Читаем количество элементов (uint32)
            count_bytes = self.mmf.read(4)
            if len(count_bytes) < 4:
                return None
                
            count = struct.unpack('I', count_bytes)[0]
            
            # Читаем данные (double)
            data_bytes = self.mmf.read(count * 8)
            data = struct.unpack(f'{count}d', data_bytes)
            
            print(f"📥 Получено {count} значений из MMF")
            return np.array(data)
            
        except Exception as e:
            print(f"❌ Ошибка получения данных: {e}")
            return None
    
    def close(self):
        """Закрывает соединение с MMF"""
        if self.mmf:
            self.mmf.close()
            self.mmf = None
            print("🔌 Соединение с MMF закрыто")

# Пример использования
if __name__ == "__main__":
    # Создаем экземпляр
    mmf = MMFExchange("MT5_PYTHON_DATA", 8192)  # 8KB буфер
    
    # Подключаемся к MMF
    if mmf.connect():
        # Пример отправки данных в MQL5
        send_data = np.array([1.2345, 1.2350, 1.2360, 1.2340])
        mmf.send_data(send_data)
        
        # Пример получения данных из MQL5
        received_data = mmf.receive_data()
        if received_data is not None:
            print(f"Полученные данные: {received_data}")
        
        # Закрываем соединение
        mmf.close()