Скрипт сбора, хранения и сравнения данных с tradingview (php/pyhton, mysql). Предполагаемые языки для скрипта – php или pyhon, или их комбинация. База данных mysql. Требуется создать скрипт для получения данных с wss://data.tradingview.com/socket.io/websocket и их дальнейшей обработки и сохранения, отправки уведомлений на почту. Есть готовые наработки на pyhon с github для работы с данным сокетом, поэтому python указан в предполагаемых языках. Если обойдетесь только php – тем лучше. Весь функционал не предусматривает обращений к серверу вебсокета чаще, чем раз в минуту. Возможно получать данные из какого-то другого источника данных на tradingview, если это проще осуществить технически. Особенности: В локальной базе данных mysql хранятся тикеры, по которым будут запрашиваться данные (таблица tickers). Тикеры вида: BINANCE:BTCUSDT, NASDAQ:AAPL, CRYPTOCAP:TOTAL, MOEX:RTSI, FX_IDC:XAUUSD и т.д. То есть любой тикер с tradingview, не важно акции это или сводные расчетные графики, или что-то еще. При изначальном изучении программистом работы вебсокета пояснить заказчику, какие данные можно оттуда получать, для возможного изменения техзадания с целью упрощения. Хоть данные вебсокета обновляются постоянно, достаточно получать их 1 раз в минуту. Данные предполагается получать единым потоком для всех запрошенных тикеров одновременно, а не множеством одновременно запущенных скриптов по 1 тикеру на каждый (с целью оптимизации нагрузки на локальный сервер и минимизации количества запросов к вебсокету). Планируется дублирование функционала на различных таймфреймах. Таймфреймы: 1h (часовой), 4h (4-часовой), 1d (дневной), 1w (недельный). Функционал описан для таймфрейма 1d. Функционал (1d – дневной) : Формат локальной базы данных (таблица data): id тикера (=id из таблицы tickers),максимальное значение, минимальное значение, значение открытия, значение закрытия (оно же текущее значение)флаг отправки уведомления Получаем текущее значение тикера и дату. Проверяем, есть ли такая дата в нашей базе данных. Если нет – создаем, добавляем данные (текущее значение = максимальное значение = минимальное значение = значение открытия = значение закрытия). Если такая дата уже есть – обновляем данные, если они не равны тем, что указаны в базе. Возможно следует обновлять текущее значение (значение закрытия) только в конце текущего периода, с целью уменьшения нагрузки на базу, а обновлять только максимальное и минимальное значение периода, если они отличаются от тех, что записаны в базе. Необходим функционал сравнения текущего актуального значения тикера со значениями из базы заданное количество периодов (в данном случае дней) назад. Например, текущее значение сравниваем со значением закрытия 3 дня назад. При выполнении условия – например текущее значение больше полученного из базы – отправить уведомление на email и поставить отметку в базе об отправке такого уведомления (чтобы не отправлялись постоянно). Представлен минимальный функционал. Далее доработка по необходимости.