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

 
MrBrooklin:

Не совсем понял про перенос расчетов... Иными словами - создать аналог алгоритма вычисления уже имеющейся программы только теперь на языке программирования Python?

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

Ну да, если алгоритм известен
 
Maxim Dmitrievsky:
Ну да, если алгоритм известен

Ну точно, ломлюсь в уже давно открытую дверь! Сказывается возраст. :)

Спасибо и дай Вам бог здоровья! Вы случайно не из мск? А то бы баночкой мёда бы угостил!

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

 
MrBrooklin:

Ну точно, ломлюсь в уже давно открытую дверь! Сказывается возраст. :)

Спасибо и дай Вам бог здоровья! Вы случайно не из мск? А то бы баночкой мёда бы угостил!

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

^)) из других широт

 

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

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

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

Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
  • www.mql5.com
MetaQuotes Language 5 (MQL5) - язык программирования технических индикаторов, торговых роботов и вспомогательных приложений для автоматизации торговли на финансовых рынках. MQL5 является современным языком высокого уровня и разработан MetaQuotes Software Corp. для собственной торгово-информационной платформы. Синтаксис языка максимально близок...
 
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

Причина обращения: