К содержимому
Форекс
на автомате

Python считает сигнал, советник читает файл и иногда видит пустую строку

KseniaPSTс 06.2023
Автор разборов
31сообщение
Автор темы#1
Модель у меня на Python. Раз в час, после закрытия бара H1, скрипт берёт котировки, считает сигнал и пишет в CSV одну строку: время бара, символ, направление, лот. Советник в MT5 раз в 10 секунд в OnTimer читает этот файл из общей папки Common\Files и, если время бара новое, открывает сделку. Торговлю я сознательно оставила в MQL, не хочу тащить исполнение в Python.

Третью неделю на демо, и дважды за это время советник прочитал пустую строку и записал в журнал «нет сигнала» на баре, где сигнал был. Оба раза в 10:00 с секундами, то есть ровно когда Python пишет файл. Видимо, советник открыл файл, когда скрипт его ещё не дописал. Как это обычно решают? Блокировку файла со стороны MQL я не нашла.
egorov_mс 09.2024
Системный практик
14сообщений
#2
Пиши не в сам файл, а во временный, signal.tmp, закрывай его и потом переименовывай в signal.csv. В Python это os.replace, переименование в пределах одного диска атомарное: советник увидит либо старый файл целиком, либо новый целиком. И добавь в конец строки контрольное поле, например слово END. Нет его, значит чтение неудачное, пробуешь на следующем таймере.
vadim_spbс 03.2023
Исследователь
7сообщений
#3
А зачем файл? Есть пакет для Python, order_send прямо из скрипта, одна программа. Я так котировки тяну второй год, удобно.
Malinka_K41с 02.2023
Автор разборов
29сообщений
#4
vadim_spb Написал(а):order_send прямо из скрипта, одна программа
Котировки тянуть да. Исполнение из Python я бы не делала. Скрипт упал ночью после обновления библиотеки или терминал перезапустился и связь отвалилась, а позиция открыта и за ней никто не смотрит. Советник живёт, пока живёт терминал. У Ксении схема правильная: Python думает, MQL торгует. Я бы добавила проверку возраста сигнала: старше двух часов не исполнять, а писать в журнал, что Python молчит.
KseniaPSTс 06.2023
Автор разборов
31сообщение
Автор темы#5
Сначала добавила только END в конец строки. За три дня два раза в журнале «строка неполная, повтор», и оба раза следующее чтение было нормальным, так что причина была именно эта. Потом сделала временный файл и os.replace, с тех пор девять дней ни одного неполного чтения. Возраст сигнала тоже проверяю, порог поставила 90 минут. vadim_spb, котировки через пакет я тоже тяну, но торговать из скрипта не готова.
Продолжить обсуждение

Для ответа войдите в свой аккаунт.

Войти
← Предыдущая темаСледующая тема →