При импорте данных в python задержка в отображении свечей в два часа

 

Здравствуйте!

У меня такой код (начало):

import datetime
import pandas as pd
import numpy as np
import tensorflow as tf
import MetaTrader5 as mt5
from scipy.signal import argrelextrema
from datetime import datetime, timedelta
import pandas_ta as ta
import os

# Connect to MetaTrader 5
if not mt5.initialize(login=..., server="MetaQuotes-Demo", password="..."):
    print("\n====== Не могу подключиться к MetaTrader 5 =====")
    mt5.shutdown()

symbol = "AUDUSD"
    
symbol_info = mt5.symbol_info(symbol)
timeframe = mt5.TIMEFRAME_M15

# Текущая дата и время
current_date = datetime.now()

# Set the start and end dates for the historical data
start_time = datetime(2023, 1, 9)
end_time = current_date

# Request historical data

ratesM15 = mt5.copy_rates_range(symbol, timeframe, start_time, end_time)
print("ratesM15[-2:]")
print(ratesM15[-2:])
print("\ncurrent_date: ", current_date, "\n")
# Convert the received data into a DataFrame
data = pd.DataFrame(ratesM15)
data['time'] = pd.to_datetime(data['time'], unit='s')
data.set_index('time', inplace=True)
print(data[-2:])

Он выводит следующее:

ratesM15[-2:]

[(1706669100, 0.65832, 0.65867, 0.65817, 0.65854, 499, 6, 0)

 (1706670000, 0.65853, 0.65862, 0.65792, 0.65804, 836, 6, 0)]


current_date:  2024-01-31 05:05:05.069120


                        open     high      low    close  tick_volume  spread  real_volume

time

2024-01-31 02:45:00  0.65832  0.65867  0.65817  0.65854          499       6            0

2024-01-31 03:00:00  0.65853  0.65862  0.65792  0.65804          836       6            0

Как видно, текущее время 5 часов, а время последней свечи - 3 часа.
В чем может быть причина?
Интернет хороший и стабильный. Компьютер перезагружал. pip install -upgrade MetaTrader5 делал. Даже время на компьютере менял. Ничего не помогает.

Документация по MQL5: Дата и время / TimeCurrent
Документация по MQL5: Дата и время / TimeCurrent
  • www.mql5.com
TimeCurrent - Дата и время - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Таймзона своя и сервера совпадают?

Вообще, тут по python'у едва ли подскажут, народ на MQL пишет, я тоже.

 
Сравните какое текущее время в терминале и какое возвращает питон скрипт, ну. Потом скорректируйте время в питон скрипте, приведите к терминальному. 

Вы можете изменить часовой пояс в datetime.now() с помощью библиотеки pytz. Вот пример:


import pytz

from datetime import datetime


# Получаем текущую дату и время в UTC

now_utc = datetime.now(pytz.utc)


# Изменяем часовой пояс на нужный

desired_timezone = pytz.timezone('Europe/Moscow')

now_moscow_time = now_utc.astimezone(desired_timezone)


print(now_moscow_time)



В этом примере мы сначала получаем текущую дату и время в UTC, затем используем метод astimezone() для изменения часового пояса на нужный.


Подсказка: ChatGPT очень хорошо знает питон, может ответить на любые простые вопросы :)


* можно просто прибавить к текущей дате несколько часов или день, или год; запрос тогда точно вернет последние данные

 

Эта ошибка вылезла только вчера под вечер. До этого всё работало правильно. Не может быть из-за таймзоны. 

Но я обязательно попробую, потому что всё остальное я перепробовал.

ChatGPT я тоже использую, но ничего толком в этом случае не подсказал.

Спасибо.

 
А может вчера тайм-зона где-нибудь и изменилась
 
Вчера вечером (около 19 msk) были проблемы с резолвом в зоне ru из-за косяка с DNSSEC, возможно, отголоски до сих пор какие-то остались в кэшах DNS-серверов.
 

@Maxim Dmitrievsky

Я изменил код и он выдает

current_date:  2024-01-31 08:34:17.915199+00:00


                        open     high      low    close  tick_volume  spread  real_volume

time

2024-01-31 08:15:00  0.65626  0.65651  0.65620  0.65642          380       6            0

2024-01-31 08:30:00  0.65643  0.65667  0.65635  0.65651          432       4            0


Вроде всё правильно, но я захожу в МетаТрейдер и вижу, что свеча  0.65643  0.65667  0.65635  0.65651 - восьмая по счету от последней.

Я ставлю для разнообразия время мск:

current_date:  2024-01-31 11:39:54.136286+03:00


                        open     high      low    close  tick_volume  spread  real_volume

time

2024-01-31 08:15:00  0.65626  0.65651  0.65620  0.65642          380       6            0

2024-01-31 08:30:00  0.65643  0.65667  0.65635  0.65651          432       4            0 

Выдает то же самое.


На картинке крайняя справа - это текущая свеча. А та, которую мне выдает программа ( 2024-01-31 08:30:00  0.65643  0.65667  0.65635  0.65651) - крайняя левая.

Maxim Dmitrievsky
Maxim Dmitrievsky
  • 2024.01.30
  • www.mql5.com
Профиль трейдера
 
JRandomTrader #:
Вчера вечером (около 19 msk) были проблемы с резолвом в зоне ru из-за косяка с DNSSEC, возможно, отголоски до сих пор какие-то остались в кэшах DNS-серверов.
Я вот тоже про это думаю, но не понимаю, я питон на локальном компе в консоли запускаю, не с сервера, где какие кэши могут быть? Если есть мысль, как почистить - подскажите.
 
Дмитрий Ковалевский #:
Я вот тоже про это думаю, но не понимаю, я питон на локальном компе в консоли запускаю, не с сервера, где какие кэши могут быть? Если есть мысль, как почистить - подскажите.

Я у себя на своём локальном рекурсивном DNS-сервере временно отключил DNSSEC. Но у большинства стоят простые роутеры, которые сами рекурсию не раскручивают, а просто форвардят DNS-запросы на сервер провайдера или 8.8.8.8, тут ничего не сделать.

 
Дмитрий Ковалевский #:

@Maxim Dmitrievsky

Я изменил код и он выдает

current_date:  2024-01-31 08:34:17.915199+00:00


                        open     high      low    close  tick_volume  spread  real_volume

time

2024-01-31 08:15:00  0.65626  0.65651  0.65620  0.65642          380       6            0

2024-01-31 08:30:00  0.65643  0.65667  0.65635  0.65651          432       4            0


Вроде всё правильно, но я захожу в МетаТрейдер и вижу, что свеча  0.65643  0.65667  0.65635  0.65651 - восьмая по счету от последней.

Я ставлю для разнообразия время мск:

current_date:  2024-01-31 11:39:54.136286+03:00


                        open     high      low    close  tick_volume  spread  real_volume

time

2024-01-31 08:15:00  0.65626  0.65651  0.65620  0.65642          380       6            0

2024-01-31 08:30:00  0.65643  0.65667  0.65635  0.65651          432       4            0 

Выдает то же самое.


На картинке крайняя справа - это текущая свеча. А та, которую мне выдает программа ( 2024-01-31 08:30:00  0.65643  0.65667  0.65635  0.65651) - крайняя левая.

А там же можно получать котир не по времени, а позиционно, начиная с нулевого бара. Через апи. Сейчас не могу проверить (апи на маке не работает)
 
JRandomTrader #:

Таймзона своя и сервера совпадают?

Вообще, тут по python'у едва ли подскажут, народ на MQL пишет, я тоже.

Я же тоже MQL использую, по большому счету. Вот эта штука не работает: 
copy_rates_range(symbol, timeframe, start_time, end_time)

Возвращает свечи, но не с последней, а на два часа раньше. Если брать 15-минутки, то 8 периодов. Если часовые - то 2.