MetaTrader 5 Python User Group - как использовать Python в Метатрейдере - страница 76

 
MrBrooklin:

Спасибо, Максим!

Уже пробую. Цикл запустился, но файл пока не открывается. Оставлю цикл в работе и подожду.

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


P.S. Пардон! Сразу не обратил внимание на то, что стоит hour. Поменял на minute файл EUR_USD_QUOTE.csv открылся, но во вкладке Run в среде разработки Pycharm появилось вот такое сообщение:

�訡��: �� 㤠���� ���� ����� "excel.exe".

Затем еще через минуту с небольшим, файл закрылся и снова открылся, но уже в Exsel с левой стороны таблицы появилась вкладка, где предлагалось сохранить ранее открытй текст. Подождал ещё немного, чтобы посмотреть что будет дальше, а дальше цикл остановился и появилось вот такое сообщение:

�ᯥ譮: ����� "EXCEL.EXE", � �����䨪��஬ 4208, �� �����襭.
�ᯥ譮: ����� "EXCEL.EXE", � �����䨪��஬ 3168, �� �����襭.
Traceback (most recent call last):
  File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/9.py", line 37, in <module>
    get_data(save_file='EUR_USD_QUOTE.csv')
  File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/9.py", line 23, in get_data
    with open(save_file, 'w') as save:
PermissionError: [Errno 13] Permission denied: 'EUR_USD_QUOTE.csv'

Пока такой реультат, но прогресс уже есть!

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

Тут еще может не успевать закрыть эксель и уже пытается обратиться к файлу, тогда

while True:
    t = datetime.now().hour
    if(t2 != t):
        os.system("TASKKILL /F /IM excel.exe") 
	time.sleep(10)
        get_data(save_file='EUR_USD_QUOTE.csv')
        t2 = t
    time.sleep(10)

сюда еще воткните задержку секунд 5-10, программа будет ждать пока эксель закроется

что делать с окном слева пока не придумал )

 
MrBrooklin:

I want to learn how to take quotes on the Internet using the language Python to watch them not in the terminal, but in some file, for example, csv. I thought it was the most basic task, but it turned out that it wasn't. Maybe I'm on the wrong track, but the one who is not looking for anything, he finds nothing.

Now I'll move on to the code you've proposed. After the code was launched, a message appeared in the Pycharm development environment:

Traceback (most recent call last):
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/10.py", line 25, in <module>
main()
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/10.py", line 13, in main
eurusd_bid = soup.find('td', 'pid-1-bid').text.replace(',', '.')
AttributeError: 'NoneType' object has no attribute 'text'

Process finished with exit code 1

What do I need to change to see how the code works?

Respectfully, Vladimir.

Причина, по которой он не работает, заключается в том, что этот сайт заблокировал вам отправку запросов. Тот факт, что вам пришлось подделать пользовательский агент, должен был быть намеком на то, что вы делаете что-то, чего они не хотели, чтобы вы делали. Веб-сканирование выходит далеко за рамки этой темы, поэтому мы должны прекратить говорить об этом и вернуться к теме. У вас есть вопросы по использованию пакета MetaTrader5?

 
Maxim Dmitrievsky:

Тут еще может не успевать закрыть эксель и уже пытается обратиться к файлу, тогда

сюда еще воткните задержку секунд 5-10, программа будет ждать пока эксель закроется

что делать с окном слева пока не придумал )

Максим, спасибо Вам большое за тот код, который помогли доработать. Левая панель пока мало беспокоит. Новый Ваш код добавлю попозже, скорее всего на выходных, т.к. сегодня был полный завал на работе, нужно отдохнуть. Как только будет новый результат, то обязательно Вам сообщу.

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

 

По какому офсету библиотека MT5 возвращает время открытых ордеров?

def checkPositions(self):
        return mt5.positions_get(symbol=self.symbol)

pos = trade.checkPositions()
pos[0].time

>>> pos[0].time
1598035196

datetime.datetime.fromtimestamp(pos[0].time).strftime("%A, %B %d, %Y %I:%M:%S")

>>> datetime.datetime.fromtimestamp(pos[0].time).strftime("%A, %B %d, %Y %I:%M:%S")
'Saturday, August 22, 2020 01:39:56'

но в терминале это другое время

Как правильно синхронизировать время в питон программе со временем ордеров (позиций)?

 
Maxim Dmitrievsky:

По какому офсету библиотека MT5 возвращает время открытых ордеров?

но в терминале это другое время

Как правильно синхронизировать время в питон программе со временем ордеров (позиций)?

Сначала вы должны знать точный часовой пояс торгового сервера. Затем создайте объект часового пояса с помощью pytz. Наконец, передайте объект часового пояса методу.

import datetime as dt

import pytz
import pymt5adapter as mta


def main():
    broker_timezone = pytz.timezone('Etc/UTC')
    for position in mta.positions_get():
        time = dt.datetime.fromtimestamp(position.time, tz=broker_timezone)
        print(time)


if __name__ == '__main__':
    with mta.connected():
        main()
https://stackoverflow.com/questions/13866926/is-there-a-list-of-pytz-timezones
Is there a list of Pytz Timezones?
Is there a list of Pytz Timezones?
  • 2012.12.13
  • ipegasus
  • stackoverflow.com
I would like to know what are all the possible values for the timezone argument in the Python library pytz. How to do it?
 
nicholish en:

Сначала вы должны знать точный часовой пояс торгового сервера. Затем создайте объект часового пояса с помощью pytz. Наконец, передайте объект часового пояса методу.

https://stackoverflow.com/questions/13866926/is-there-a-list-of-pytz-timezones

спасибо, попробую так

хотелось бы синхронизировать время автоматически, т.к. торговый сервер может измениться
 
Maxim Dmitrievsky:

thanks, I'll try this

I would like to synchronize the time automatically, because the trade server may change

UNIX timestamps are timezone agnostic so you need to know the broker timezone to give the timestamp timezone aware context. The only way to do that is to know the trade-server's timezone setting. I don't think that there is any way to obtain that information programmatically. What you can do is create a config file to map the different trade servers that you may be using to timezone. Example:


config.json

{
    "servers": {
        "MetaQuotes-Demo": {
            "timezone": "Europe/Moscow"
        },
        "AMPGlobalUSA-Demo": {
            "timezone": "Etc/UTC"
        }
    }
}
 
nicholish en:

UNIX timestamps are timezone agnostic so you need to know the broker timezone to give the timestamp timezone aware context. The only way to do that is to know the trade-server's timezone setting. I don't think that there is any way to obtain that information programmatically. What you can do is create a config file to map the different trade servers that you may be using to timezone. Example:


config.json

well.. yes

easier way without pytz:

pt = datetime.datetime.utcfromtimestamp(pos[0].time) // position open time by mt5 time
tt = datetime.datetime.utcnow() + datetime.timedelta(hours=3)   // current server time (from mt5 clock)

delta = tt-pt
>>> delta
datetime.timedelta(seconds=2139, microseconds=506786) // position lifetime
also we can open one pending order far from the price, before start EA. And compare difference in hours between 'pt' and 
datetime.utcnow()
to automatically offset time
 
Maxim Dmitrievsky :

well .. yes

easier way without pytz:

also we can open one pending order far from the price, before start EA. And compare difference in hours between 'pt' and to automatically offset time

I thought the same thing but then I remembered that the order time is stored in a UNIX timestamp which does not have a timezone. In other words, you cannot extrapolate the broker timezone from the order timestamp because timestamps are the same no matter the timezone. If you want to know the GMT offset you have to know the current terminal (broker) time and there's currently no way to use python to get the current terminal time or GMT offset. 

 
Maxim Dmitrievsky:

Тут еще может не успевать закрыть эксель и уже пытается обратиться к файлу, тогда

сюда еще воткните задержку секунд 5-10, программа будет ждать пока эксель закроется

что делать с окном слева пока не придумал )

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

Ранее Вам обещал, что на выходных проверю вариант с добавлением кода задержки. Проверил, но задержка ни на что не повлияла. С левой вкладкой проблем нет, т.к. на неё просто не обращаю внимания.

Ещё раз Вам огромное спасибо за содействие. Больше в этой ветке вопросов задавать не буду.

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