Отправка сигналов из TradingView в Telegram: полное руководство с готовым PHP‑скриптом (обновлённая версия)

,

На чтение потребуется

6 минут
Интеграция TradingView с Telegram через PHP-скрипт

Сигналы из TradingView могут приходить в Telegram мгновенно – это позволяет трейдеру не сидеть постоянно перед графиком. В этой статье мы разберём три способа интеграции, а главный упор сделаем на собственный PHP‑скрипт с поддержкой логирования и гибкой обработки любых входящих данных. Вы получите готовый код, который останется только скопировать и настроить.

Подготовительные шаги

1. Создайте Telegram‑бота

  • Напишите @BotFather в Telegram.
  • Отправьте команду /newbot и придумайте имя (например, My Trading Bot) и username (обязательно заканчивается на bot, например my_trading_bot).
  • Скопируйте полученный токен – он выглядит так: 1234567890:ABCdefGHIjklmNOPqrstUVwxyz.

2. Получите ID чата или канала

Для личного чата:
Напишите боту любое сообщение, затем перейдите по ссылке в браузере:
https://api.telegram.org/bot<ВАШ_ТОКЕН>/getUpdates
В ответе найдите "chat":{"id":123456789} – это ваш ID.

Для канала или группы:
Добавьте бота в администраторы, затем используйте тот же метод getUpdates. ID канала обычно отрицательный: -1001234567890. Можно также использовать @username_канала (но числовой ID надёжнее).

3. Убедитесь, что у вас есть хостинг с PHP

Для второго способа (самого гибкого) потребуется веб‑сервер с поддержкой PHP и функцией cURL. Подойдёт любой недорогой хостинг или VPS.


Способ 1. Прямой вебхук в Telegram Bot API (без программирования)

Самый быстрый способ – отправить данные из TradingView напрямую в API Telegram.

  • В настройках алерта TradingView в поле Webhook URL укажите:
  https://api.telegram.org/bot<ВАШ_ТОКЕН>/sendMessage
  • В поле Message вставьте JSON, например:
  {"chat_id": "-1001234567890", "text": "🚨 Сигнал! {{ticker}} по цене {{close}}"}

Плюсы: не нужен свой сервер.
Минусы: нельзя обработать ошибки, нет логирования, ограничение на длину сообщения 4096 символов.


Способ 2. Собственный PHP‑обработчик на хостинге (рекомендуемый)

Этот способ даёт полный контроль: вы можете логировать все входящие сигналы, преобразовывать данные, отправлять в несколько чатов и т.д. Ниже приведён готовый PHP‑скрипт, который принимает любые данные (JSON или обычный текст) и отправляет их в Telegram.

2.1. Создайте файл tradingview-hook.php

Скопируйте следующий код и сохраните его в файл с расширением .php:

 TELEGRAM_CHAT_ID,
        'text' => $text,
        'parse_mode' => 'HTML',      // или 'Markdown' при необходимости
        'disable_web_page_preview' => true
    ];
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $error = curl_error($ch);
    curl_close($ch);
    if ($error) {
        writeLog("Ошибка cURL при отправке в Telegram", $error);
        return false;
    }
    if ($httpCode !== 200) {
        writeLog("Telegram вернул HTTP $httpCode", $response);
        return false;
    }
    $decoded = json_decode($response, true);
    if (isset($decoded['ok']) && $decoded['ok'] === true) {
        writeLog("Сообщение успешно отправлено в Telegram");
        return true;
    } else {
        writeLog("Ошибка Telegram API", $response);
        return false;
    }
}

// ========== ОСНОВНАЯ ЛОГИКА ==========
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    writeLog("Неверный метод запроса", $_SERVER['REQUEST_METHOD']);
    http_response_code(405);
    exit('Method Not Allowed');
}

$rawInput = file_get_contents('php://input');
writeLog("Получены сырые данные", $rawInput);

// Пробуем декодировать JSON
$data = json_decode($rawInput, true);
$isJson = (json_last_error() === JSON_ERROR_NONE);

if (!$isJson) {
    // === НЕ JSON: отправляем исходный текст как есть ===
    writeLog("Входящие данные не являются валидным JSON", json_last_error_msg());
    $telegramText = $rawInput;   // просто текст
    if (trim($rawInput) === '') {
        $telegramText = "⚠️ Получен пустой или невалидный запрос от TradingView";
    }
    $result = sendToTelegram($telegramText);
} else {
    // === JSON: обрабатываем и отправляем красиво ===
    writeLog("Данные успешно декодированы как JSON", $data);
    $telegramText = "📊 *TradingView Webhook*\n```json\n" . json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . "\n```";
    $result = sendToTelegram($telegramText);
}

// Всегда отвечаем 200, чтобы TradingView не повторял отправку
if ($result) {
    echo 'OK';
} else {
    echo 'Message queued but send failed';
}
http_response_code(200);

Нужно индивидуальное решение? Напишите программисту.

2.2. Настройте скрипт под себя

  1. Замените ВАШ_ТОКЕН_БОТА на токен, полученный от BotFather.
  2. Замените @ваш_канал_или_id на числовой ID чата (например, -1001234567890) или на username канала с @.
  3. Выберите режим логирования:
  • define('ENABLE_LOGGING', true); – все входящие сигналы будут записываться в файл tradingview_hook.log (полезно для отладки).
  • После проверки работы можно установить false, чтобы не засорять диск.
  1. Права на файл лога:
    Убедитесь, что скрипт может создавать и записывать файл в той же директории. Если файл не создаётся, вручную создайте tradingview_hook.log и дайте права 666 (или 777 на время отладки).

2.3. Загрузите скрипт на хостинг

  • Назовите файл, например tradingview-hook.php.
  • Загрузите его в корневую папку вашего сайта через FTP или файловый менеджер хостинга.
  • Убедитесь, что скрипт доступен по HTTPS (TradingView требует защищённое соединение). Например:
    https://ваш-сайт.ru/tradingview-hook.php

2.4. Настройте алерт в TradingView

  1. Откройте нужный график и создайте новый алерт (кнопка «Сигнал» или правой кнопкой мыши).
  2. В поле Webhook URL вставьте полный URL вашего скрипта:
    https://ваш-сайт.ru/tradingview-hook.php
  3. В поле Message укажите, какие данные хотите передавать. Это может быть:
  • JSON (рекомендуется для структурированных данных). Пример:
    json { "symbol": "{{ticker}}", "price": "{{close}}", "action": "{{strategy.order.action}}", "time": "{{timenow}}" }
  • Обычный текст (если нужно просто отправить строку). Пример:
    Сработал сигнал по {{ticker}}! Цена: {{close}}
  1. Нажмите Создать.

2.5. Проверка и отладка

После срабатывания алерта:

  • Зайдите в файл tradingview_hook.log на сервере. Вы увидите записи вида:
  [2025-03-20 15:30:01] Получены сырые данные: {"symbol":"BTCUSD","price":"67234","action":"buy"}
  [2025-03-20 15:30:01] Данные успешно декодированы как JSON: ...
  [2025-03-20 15:30:01] Сообщение успешно отправлено в Telegram
  • Если данные не являются JSON, в лог попадёт соответствующее предупреждение, а в Telegram уйдёт исходный текст.
  • Если сообщение не приходит в Telegram, проверьте, добавлен ли бот в канал/чат и есть ли у него права на отправку сообщений.

Способ 3. Готовые сервисы-посредники (Pabbly, Zapier)

Если у вас нет своего сервера, а прямой вебхук кажется слишком простым, можно использовать конструкторы автоматизации:

  • Pabbly Connect – позволяет создать вебхук, который будет принимать данные от TradingView и перенаправлять их в Telegram после небольшой обработки.
  • Make (Integromat) – аналогично.

Алгоритм:

  1. Регистрируетесь в сервисе.
  2. Создаёте сценарий: триггер – Webhook, действие – Send Message (Telegram).
  3. Копируете сгенерированный Webhook URL и вставляете его в TradingView.
  4. В поле Message указываете нужные данные (JSON или обычный текст).

Сервисы платные после исчерпания бесплатного лимита, но подходят для невысокой частоты сигналов.


Часто задаваемые вопросы (FAQ)

Почему сообщения не приходят?

  1. Проверьте логи вашего PHP-скрипта – в файле tradingview_hook.log видно, что именно приходит от TradingView и была ли ошибка при отправке в Telegram.
  2. Убедитесь, что бот имеет права администратора в канале/группе.
  3. Проверьте настройки алерта – правильный ли URL, не заблокирован ли хостингом IP-адрес TradingView.
  4. Включите двухфакторную аутентификацию в TradingView – иногда без неё вебхуки блокируются.
  5. Добавьте IP-адреса TradingView в белый список вашего хостинга (если используется файрвол):
  • 52.89.214.238
  • 34.212.75.30
  • 54.218.53.128
  • 52.32.178.7

Как отключить логирование в готовом скрипте?

Просто измените в начале файла:

define('ENABLE_LOGGING', false);

После этого файл лога создаваться не будет.

Могу ли я отправлять не весь JSON, а отформатированное сообщение?

Да! Внутри скрипта замените формирование $telegramText для JSON на своё сообщение. Например:

$telegramText = "🔔 Новый сигнал!\nСимвол: {$data['symbol']}\nЦена: {$data['price']}";

Главное, чтобы в TradingView в поле Message были переданы соответствующие ключи (symbol, price). Для обычного текста вы можете просто оставить $telegramText = $rawInput; или обработать его как угодно.

Что делать, если TradingView отправляет не JSON, а обычный текст?

Скрипт уже умеет обрабатывать такой случай: он отправит исходную строку в Telegram как есть. Вы также можете доработать блок if (!$isJson) для кастомного форматирования обычного текста.

Безопасно ли оставлять токен бота в коде?

Если ваш скрипт лежит на сервере с открытым доступом, злоумышленник может прочитать его и угнать бота. Рекомендуется:

  • Вынести токен в отдельный файл за пределами public_html.
  • Использовать переменные окружения (например, через .env).

Для учебных целей и небольших проектов допустимо хранить токен прямо в скрипте, но убедитесь, что файл .php не отдаётся как обычный текст (на стандартном хостинге PHP обрабатывается, и исходный код не виден).


Заключение

Вы увидели три способа интеграции TradingView с Telegram. Самый надёжный и гибкий – через собственный PHP-скрипт, полный код которого мы разобрали. Главное улучшение последней версии – скрипт теперь принимает любые данные: JSON (отправляет красиво оформленным блоком) или обычный текст (отправляет как есть). Логирование поможет быстро отладить любые проблемы, а при желании вы легко доработаете скрипт под свои нужды – добавите фильтрацию сигналов, форматирование, отправку картинок и т.д.

Если у вас остались вопросы по настройке – пишите, помогу разобраться. Удачной торговли!

: 8

Поделись или сохрани ссылку

Автор статьи

Комментарии

Добавить комментарий

0

Вы добавили товары в корзину?

Мы хотим вам предложить 3% скидку за сохранение вашей корзины. Прислать вам купон на скидку? Укажите рабочий email для отправки.

Содержание