/
ichechet
/
AlorPy
Обзор
Документация
Войти
/
ichechet
/
AlorPy
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Examples/Connect.py
63 строки
5 KB
cia76
Исключение лога asyncio
05 дек 2025, 17:06
05 дек 2025, 17:06
99123d8
Код
Авторство
О чём код?
import logging # Выводим лог на консоль и в файл from datetime import datetime, timedelta, UTC from AlorPy import AlorPy # Работа с АЛОР Брокер API def on_new_bar(response): # Обработчик события прихода нового бара response_data = response['data'] # Данные бара utc_timestamp = response_data['time'] # Время в АЛОР Брокер API передается в секундах, прошедших с 01.01.1970 00:00 UTC dt_msk = datetime.fromtimestamp(utc_timestamp, UTC) if type(alor_tf) is str else ap_provider.timestamp_to_msk_datetime(utc_timestamp) # Дневные бары и выше ставим на начало дня по UTC. Остальные - по МСК str_dt_msk = dt_msk.strftime('%d.%m.%Y %H:%M:%S') if intraday else dt_msk.strftime('%d.%m.%Y') # Для дневных баров и выше показываем только дату. Для остальных - дату и время по МСК logger.info(f'{str_dt_msk} ' f'O:{response_data["open"]} ' f'H:{response_data["high"]} ' f'L:{response_data["low"]} ' f'C:{response_data["close"]} ' f'V:{response_data["volume"]}') if __name__ == '__main__': # Точка входа при запуске этого скрипта logger = logging.getLogger('AlorPy.Connect') # Будем вести лог # ap_provider = AlorPy('<Токен>') # При первом подключении нужно передать токен ap_provider = AlorPy() # Подключаемся ко всем торговым счетам logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', # Формат сообщения datefmt='%d.%m.%Y %H:%M:%S', # Формат даты level=logging.INFO, # Уровень логируемых событий NOTSET/DEBUG/INFO/WARNING/ERROR/CRITICAL handlers=[logging.FileHandler('Connect.log', encoding='utf-8'), logging.StreamHandler()]) # Лог записываем в файл и выводим на консоль logging.Formatter.converter = lambda *args: datetime.now(tz=ap_provider.tz_msk).timetuple() # В логе время указываем по МСК logging.getLogger('urllib3').setLevel(logging.CRITICAL + 1) # Не пропускать в лог logging.getLogger('websockets').setLevel(logging.CRITICAL + 1) # события в этих библиотеках # Проверяем работу запрос/ответ dt_local = datetime.now(ap_provider.tz_msk) # Текущее время seconds_from = float(ap_provider.get_time()) # Время в АЛОР Брокер API передается в секундах, прошедших с 01.01.1970 00:00 UTC dt_server = datetime.fromtimestamp(seconds_from, ap_provider.tz_msk) # Получаем время на сервере td = dt_server - dt_local # Разница во времени в виде timedelta logger.info(f'Локальное время МСК : {dt_local:%d.%m.%Y %H:%M:%S}') logger.info(f'Время на сервере : {dt_server:%d.%m.%Y %H:%M:%S}') logger.info(f'Разница во времени : {td}') # Проверяем работу подписок dataname = 'TQBR.SBER' # Тикер tf = 'M1' # Временной интервал days = 3 # Кол-во дней, за которые получаем бары logger.info(f'Подписка на {tf} бары тикера {dataname}') ap_provider.on_new_bar.subscribe(on_new_bar) # Подписываемся на новые бары alor_board, symbol = ap_provider.dataname_to_alor_board_symbol(dataname) # Код режима торгов Алора и код и тикер exchange = ap_provider.get_exchange(alor_board, symbol) # Код биржи alor_tf, intraday = ap_provider.timeframe_to_alor_timeframe(tf) # Временной интервал Алора seconds_from = ap_provider.msk_datetime_to_timestamp(datetime.now() - timedelta(days=days)) # За последние дни. В секундах, прошедших с 01.01.1970 00:00 UTC guid = ap_provider.bars_get_and_subscribe(exchange, symbol, alor_tf, seconds_from=seconds_from, frequency=1_000_000_000) # Подписываемся на бары, получаем guid подписки subscription = ap_provider.subscriptions[guid] # Получаем данные подписки logger.info(f'Подписка на сервере: {guid} {subscription}') logger.info(f'На бирже {subscription["exchange"]} тикер {subscription["code"]} подписан на новые бары через WebSocket на временнОм интервале {subscription["tf"]}. Код подписки {guid}') # Выход input('\nEnter - выход\n') ap_provider.on_new_bar.unsubscribe(on_new_bar) # Отменяем подписку на новые бары ap_provider.unsubscribe(guid) # Отписываемся от получения новых баров logger.info(f'Отмена подписки {guid}. Закрытие WebSocket по всем правилам займет некоторое время') ap_provider.close_web_socket() # Перед выходом закрываем соединение с WebSocket