Обсуждение статьи "Соединение MetaTrader 5 и Python: получение и отправка данных" - страница 9

 
MrBrooklin:

Здравствуйте, Максим!

Немного продвинулся в своих познаниях языка Python, однако не могу найти подробную информацию о совместном доступе к файлу csv со стороны Python и сторонней программы, например, того же советника написанного на MQL5. Проше говоря, программный код на языке Python периодически записывает информацию в файл csv, а советник на языке MQL5 считывает с него информацию и выполняет нужные мне команды. Такой совместный доступ с двух сторон вообще возможен?

С уважением, Владимир.

совместный нет, но обе программы могут пытаться открыть файл, если он не занят другой программой. И должны закрывать его после чтения\записи.

 
Maxim Dmitrievsky:

совместный нет, но обе программы могут пытаться открыть файл, если он не занят другой программой. И должны закрывать его после чтения\записи.

Спасибо, Максим, за пояснение, особенно про закрытие файла после чтения\записи. Вот этот момент как раз мне и нужен был для понимания.

С уважением, Владимир.

 
Maxim Dmitrievsky:

совместный нет, но обе программы могут пытаться открыть файл, если он не занят другой программой. И должны закрывать его после чтения\записи.

Здравствуйте, Максим! Этот момент учёл. Помогите разобраться с ещё одним моментом, а именно, с кодировкой текста в csv файле, созданного при помощи языка Python и последующим чтением этого текста советником, созданным на языке MQL5. Пересмотрел много информации на сайте MQL5 и других интернет-ресурсах, но толкового объяснения не нашел. В общем, программный код, созданный при помощи языка Python, открывает новый файл csv и записывает в него нужную мне информацию. Для простоты наладки записывается пока одно слово на русском языке, которое было реально спарсено с сайта. Слово в открытом файле csv читаю без проблем, однако советник не понимает кодировки этого слова. Это точно, т.к. при написании советника (кстати, у меня получилось написать первый самостоятельный код!) использовал файл csv с таким же названием и в ячеку А1 писал это же слово, но только уже с клавиатуры. Что только не пробовал менять в обоих кодах (в смысле на Python и MQL5), но пока ничего не получается.

Можете подсказать какую кодировку (encoding=?) прописать у кода Python:

with open(save_file, 'w') as save:

и какую прописать у кода MQL5:

filehandle=FileOpen("EUR_USD.csv",FILE_READ|FILE_SHARE_READ|FILE_ANSI|FILE_CSV|FILE_COMMON)

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

Возможно, что ещё не все кодировки для Python нашел, но самое интересное, что когда у кода MQL5 стоит кодировка FILE_ANSI, которая приведена в строке выше и когда на клавиатуре в csv файл пишу слово, например, "покупать", то после сохранения этого файла советник всё отлично читает и чётко работает.

Иногда подумываю: а может быть тут дело, вообще, не в кодировках?! А в чём тогда?

Помогите, пожалуйста, разобраться и понять - в чем причина!

С уважением, Владимир.


P.S. Нашел наконец-то хоть одно вразумительное объяснение: "В Python 3 кодировка по умолчанию — UTF-8".

 
MrBrooklin:

Добрый, чтобы не было проблем лучше писать в бинарный файл, а на выходе преобразвывать обратно в символы. В этой статье, по моему, так и сделано в примере с сокетами. То есть флаг FILE_BIN

 
Maxim Dmitrievsky:

Добрый, чтобы не было проблем лучше писать в бинарный файл, а на выходе преобразвывать обратно в символы. В этой статье, по моему, так и сделано в примере с сокетами. То есть флаг FILE_BIN

Здравствуйте, Максим! Благодаря Вашей подсказки нашел в интернете вот такую информацию: "Бинарные файлы в отличие от текстовых хранят информацию в виде набора байт. Для работы с ними в Python необходим встроенный модуль pickle".

Иными словами, если в программном коде Pyhon при помощи установленного модуля pickle записываем любое слово в виде набора байт, изменив 'w' на  'wb'

import pickle 
.
.
.
with open(save_file, 'wb') as save:

а затем в советнике, написанном на языке MQL5, устанавливаем вместо флага FILE_ANSI устанавливаем флаг FILE_BIN, то должно всё заработать? Наверное запись нужно делать уже не в csv файл, а в файл dat.

Спасибо Вам огромное, Максим, за подсказку, сегодня вечером обязательно попробую!

С уважением, Владимир.


 
MrBrooklin:

Здравствуйте, Максим! Благодаря Вашей подсказки нашел в интернете вот такую информацию: "Бинарные файлы в отличие от текстовых хранят информацию в виде набора байт. Для работы с ними в Python необходим встроенный модуль pickle".

Иными словами, если в программном коде Pyhon при помощи установленного модуля pickle записываем любое слово в виде набора байт, изменив 'w' на  'wb'

а затем в советнике, написанном на языке MQL5, устанавливаем вместо флага FILE_ANSI устанавливаем флаг FILE_BIN, то должно всё заработать? Наверное запись нужно делать уже не в csv файл, а в файл dat.

Спасибо Вам огромное, Максим, за подсказку, сегодня вечером обязательно попробую!

С уважением, Владимир.


не обязательно, можно просто выбрать кодировку

st = b'hello world'

или 

'hello world '.encode('ascii')

и записать в файл. Потом попробуйте прочитать в мт5

 
Maxim Dmitrievsky:

не обязательно, можно просто выбрать кодировку

st = b'hello world'

или 

'hello world '.encode('ascii')

и записать в файл. Потом попробуйте прочитать в мт5

В очередной раз говорю и не устану говорить  ОГРОМНОЕ СПАСИБО, Максим, и дай Вам бог долгих лет жизни!

Самое главное для меня, что Вы подсказали в чём суть проблемы, а само решение нашёл ещё проще. В советнике оставил всё так, как и было при тестировании файла csv со словом в ячейке А1, занесенным с клавиатуры компьютера. А для программного кода, написанного на языке Python, все-таки нашёл в интернете вот такую подсказку:

with open(save_file, 'w',  encoding='cp1251',  errors='replace', newline='') as save:

Красным цветом выделил, то чего не хватало! Надеюсь, что эта строчка тоже кому-нибудь пригодится при написании кода на языке Python!

С уважением, Владимир.

 

Добрый день.

У меня задача для решения на python в matplotlib/plotly:

1. Есть OHLC для отрисовки в основном окне

2. Есть данные для отрисовки в подокне

Как закодить, чтобы был простенький рисунок? дайте простой код на python

пример

[Удален]  

А у меня проблема с этим кодом:

from MetaTrader5 import *
from datetime import date
import pandas as pd 
import matplotlib.pyplot as plt 

# Initializing MT5 connection 
MT5Initialize()
MT5WaitForTerminal()

print(MT5TerminalInfo())
print(MT5Version())

пишет

Traceback (most recent call last):
  File "C:/Programs/PycharmProjects/nc/main.py", line 8, in <module>
    MT5Initialize()
NameError: name 'MT5Initialize' is not defined

Process finished with exit code 1

Я с питоном ещё на Вы. Подскажите что не так?
 

 
Сергей Таболин:

А у меня проблема с этим кодом:

пишет

Я с питоном ещё на Вы. Подскажите что не так?
 

Посмотрите пример из моей последней статьи. Здесь использовалась старая версия пакета. И его нужно установить сначала через pip install, конечно же