Tuesday, July 21, 2026
Python Saham Telegram

Membuat Bot Telegram Notifikasi Harga Saham Real-Time dengan Python

Pendahuluan

Banyak investor memiliki target harga tertentu sebelum membeli atau menjual saham.

Sebagai contoh:

  • Membeli BBCA jika turun ke Rp8.500.
  • Menjual BBRI jika naik ke Rp6.200.
  • Mendapatkan pemberitahuan ketika volume perdagangan meningkat tajam.
  • Mengetahui ketika Moving Average menghasilkan sinyal Golden Cross.

Jika harus membuka aplikasi trading setiap beberapa menit, tentu hal tersebut tidak efisien.

Solusinya adalah membuat Bot Telegram yang akan memantau harga secara otomatis dan mengirimkan notifikasi ketika kondisi tertentu terpenuhi.

Pada artikel ini kita akan membangun bot menggunakan Python yang dapat:

  • Mengambil harga saham terbaru.
  • Mengecek target harga.
  • Mengirim notifikasi ke Telegram.
  • Berjalan otomatis setiap beberapa menit.

Pada bagian selanjutnya, bot ini juga akan dikembangkan agar dapat mengirim hasil Stock Screener, Analisis Sentimen AI, dan Backtesting yang telah dibuat pada artikel sebelumnya.


Mengapa Telegram?

Telegram menjadi pilihan yang populer karena memiliki API yang sederhana, gratis, dan mudah diintegrasikan dengan Python.

Beberapa kelebihannya:

  • Gratis digunakan.
  • Mendukung Bot API.
  • Dapat mengirim teks, gambar, dokumen, dan grafik.
  • Bisa digunakan di Windows, Linux, macOS, Android, maupun iPhone.
  • Mendukung grup dan kanal (channel).

Dengan satu bot, Anda dapat menerima notifikasi di berbagai perangkat.


Arsitektur Sistem

Yahoo Finance
       │
       ▼
Python Script
       │
       ▼
Cek Harga Saham
       │
       ▼
Target Harga?
       │
   Ya / Tidak
       │
       ▼
Telegram Bot API
       │
       ▼
Telegram

Bot akan melakukan pengecekan harga secara berkala, kemudian hanya mengirim pesan ketika syarat tertentu terpenuhi.


Teknologi yang Digunakan

Pada artikel ini kita menggunakan:

  • Python
  • yfinance
  • requests
  • python-telegram-bot (opsional)
  • pandas
  • schedule

Install Library

Install seluruh dependensi.

pip install yfinance pandas requests schedule

Atau jika ingin menggunakan library resmi Telegram:

pip install python-telegram-bot

Membuat Telegram Bot

Buka Telegram.

Cari akun

@BotFather

Ketik:

/newbot

Ikuti langkah-langkahnya:

  • Masukkan nama bot.
  • Masukkan username bot (harus diakhiri dengan bot).
  • Simpan Bot Token yang diberikan.

Contoh:

123456789:AAAbbbbbccccddddEEEEE

Catatan Keamanan: Jangan pernah membagikan bot token ke publik atau menyimpannya langsung di dalam kode sumber. Gunakan environment variable atau file .env agar lebih aman.


Mendapatkan Chat ID

Agar bot mengetahui ke mana pesan harus dikirim, kita memerlukan Chat ID.

Kirim pesan ke bot Anda, kemudian gunakan API getUpdates untuk melihat informasi chat.

Contoh hasil:

{
  "message": {
    "chat": {
      "id": 123456789
    }
  }
}

Simpan nilai tersebut karena akan digunakan pada langkah berikutnya.


Menyimpan Konfigurasi

Daripada menuliskan token di kode, gunakan environment variable.

Contoh file .env:

BOT_TOKEN=xxxxxxxxxxxxxxxx
CHAT_ID=123456789

Kemudian baca menggunakan Python.

from dotenv import load_dotenv
import os

load_dotenv()

BOT_TOKEN = os.getenv("BOT_TOKEN")
CHAT_ID = os.getenv("CHAT_ID")

Mengambil Harga Saham

Menggunakan yfinance.

import yfinance as yf

ticker = "BBCA.JK"

df = yf.download(
    ticker,
    period="1d",
    interval="1m",
    progress=False,
    auto_adjust=True
)

print(df.tail())

Harga terakhir:

price = df["Close"].iloc[-1]

print(price)

Membuat Fungsi Kirim Telegram

Sekarang kita buat fungsi sederhana.

import requests

def send_message(message):

    url = (
        f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage"
    )

    requests.post(
        url,
        data={
            "chat_id": CHAT_ID,
            "text": message
        }
    )

Penggunaan:

send_message("Halo dari Python 🚀")

Jika berhasil, Anda akan menerima pesan langsung di Telegram.


Mengecek Target Harga

Misalnya target beli BBCA adalah Rp8.500.

target = 8500

Logika sederhana:

if price <= target:

    send_message(
        f"BBCA sudah mencapai {price}"
    )

Dengan demikian, bot hanya mengirim pesan ketika harga telah memenuhi syarat.


Format Pesan yang Lebih Menarik

Daripada hanya menampilkan angka, buat pesan yang lebih informatif.

message = f"""
📈 Alert Harga Saham

Ticker : BBCA.JK

Harga Saat Ini : Rp {price:,.0f}

Target : Rp 8.500

Status :

Harga telah mencapai target.
"""

Kemudian:

send_message(message)

Pesan yang rapi akan lebih mudah dibaca saat notifikasi diterima.


Menguji Bot

Jalankan script.

python app.py

Jika semua konfigurasi benar, Anda akan menerima notifikasi di Telegram.

Memantau Banyak Saham Sekaligus

Daripada hanya memantau BBCA, kita dapat membuat daftar saham.

stocks = [
    "BBCA.JK",
    "BBRI.JK",
    "BMRI.JK",
    "TLKM.JK",
    "ASII.JK",
    "GOTO.JK"
]

Loop seluruh saham.

for ticker in stocks:

    df = yf.download(
        ticker,
        period="1d",
        interval="5m",
        progress=False,
        auto_adjust=True
    )

    price = df["Close"].iloc[-1]

    print(ticker, price)

Dengan pendekatan ini, satu bot dapat memantau banyak emiten secara bersamaan.


Membuat Target Harga Berbeda

Setiap saham tentu memiliki target harga yang berbeda.

targets = {

    "BBCA.JK":8500,

    "BBRI.JK":6200,

    "BMRI.JK":7400,

    "TLKM.JK":3100

}

Kemudian:

for ticker, target in targets.items():

    df = yf.download(
        ticker,
        period="1d",
        interval="5m",
        progress=False,
        auto_adjust=True
    )

    price = df["Close"].iloc[-1]

    if price <= target:

        send_message(
            f"{ticker} sudah mencapai target."
        )

Menjalankan Otomatis Menggunakan Schedule

Install.

pip install schedule

Import.

import schedule
import time

Misalnya fungsi utama.

def monitor():

    print("Checking...")

Jadwalkan setiap lima menit.

schedule.every(5).minutes.do(
    monitor
)

while True:

    schedule.run_pending()

    time.sleep(1)

Bot sekarang akan berjalan terus tanpa perlu dijalankan ulang secara manual.


Notifikasi Golden Cross

Hitung MA20 dan MA50.

df["MA20"] = (
    df["Close"]
    .rolling(20)
    .mean()
)

df["MA50"] = (
    df["Close"]
    .rolling(50)
    .mean()
)

Deteksi persilangan.

prev = df.iloc[-2]

last = df.iloc[-1]

if (

    prev["MA20"] < prev["MA50"]

    and

    last["MA20"] > last["MA50"]

):

    send_message(
        "Golden Cross BBCA"
    )

Bot akan mengirim pesan hanya ketika Golden Cross benar-benar terjadi.


Notifikasi Death Cross

Logika sebaliknya.

if (

    prev["MA20"] > prev["MA50"]

    and

    last["MA20"] < last["MA50"]

):

    send_message(
        "Death Cross"
    )

Memantau Volume

Hitung rata-rata volume.

avg_volume = (

    df["Volume"]

    .rolling(20)

    .mean()

)

Bandingkan.

last_volume = (
    df["Volume"].iloc[-1]
)

if (

    last_volume

    >

    avg_volume.iloc[-1] * 2

):

    send_message(
        "Lonjakan Volume"
    )

Lonjakan volume sering menjadi sinyal awal meningkatnya aktivitas perdagangan.


Notifikasi Perubahan Harga

Hitung perubahan harian.

change = (

    (

        price

        -

        df["Open"].iloc[0]

    )

    /

    df["Open"].iloc[0]

) * 100

Misalnya lebih dari 5%.

if abs(change) >= 5:

    send_message(

        f"{ticker} berubah {change:.2f}%"

    )

Format Pesan yang Lebih Menarik

Gunakan Markdown.

message = f"""
📈 *Stock Alert*

*Ticker*

{ticker}

*Harga*

Rp {price:,.0f}

*Perubahan*

{change:.2f}%

"""

Kemudian.

requests.post(

    url,

    data={

        "chat_id":CHAT_ID,

        "text":message,

        "parse_mode":"Markdown"

    }

)

Telegram akan menampilkan teks dengan format yang lebih rapi.


Mencegah Notifikasi Ganda

Misalnya harga sudah berada di bawah target selama beberapa jam.

Kita tidak ingin bot mengirim pesan terus-menerus.

Gunakan dictionary.

alerted = {}

Kemudian.

if (

    ticker not in alerted

):

    send_message(

        "Target Tercapai"

    )

    alerted[ticker] = True

Bot hanya mengirim satu notifikasi hingga kondisi di-reset.


Menyimpan Histori Alert

Gunakan SQLite.

import sqlite3

conn = sqlite3.connect(
    "alert.db"
)

Simpan.

cursor = conn.cursor()

cursor.execute(

"""

INSERT INTO alerts

VALUES

(?,?,?)

""",

(

ticker,

price,

datetime.now()

)

)

conn.commit()

Riwayat ini berguna untuk audit dan analisis performa bot.


Mengirim Ringkasan Harian

Daripada mengirim banyak pesan, buat satu ringkasan.

Contoh:

📊 Daily Stock Summary

BBCA

Rp 9.150

(+1.8%)

Golden Cross

-------------------

BMRI

Rp 7.650

(+0.9%)

Bullish

-------------------

TLKM

Rp 3.280

(-1.2%)

Netral

Ringkasan seperti ini lebih nyaman dibaca dibandingkan puluhan notifikasi terpisah.


Menambahkan Analisis Sentimen AI

Artikel sebelumnya telah membahas analisis sentimen.

Sekarang gabungkan hasilnya.

📈 BBCA

Harga

Rp 9.150

Sentimen AI

Positif

Score

91

Kesimpulan

Momentum masih kuat.

Dengan menggabungkan data harga dan sentimen, notifikasi menjadi lebih informatif.


Menambahkan Hasil Screener

Bot juga dapat mengirim hasil stock screener.

Contoh.

⭐ Top Stock Hari Ini

BBCA

Score 94

BMRI

Score 92

BBRI

Score 91

Investor dapat langsung melihat saham dengan skor terbaik.


Integrasi dengan Dashboard

Semua histori alert dapat ditampilkan di Streamlit.

st.dataframe(
    history
)

Tambahkan grafik.

st.line_chart(
    history["Price"]
)

Dashboard memudahkan pemantauan tanpa harus membuka log aplikasi.

Arsitektur Sistem

Bot yang kita bangun dapat memiliki alur seperti berikut:

                    Yahoo Finance
                          │
                          ▼
                  Python Monitoring
                          │
      ┌───────────────────┼───────────────────┐
      ▼                   ▼                   ▼
 Moving Average     Volume Analysis     AI Sentiment
      │                   │                   │
      └───────────────────┼───────────────────┘
                          ▼
                  Alert Decision Engine
                          │
      ┌───────────────────┼───────────────────┐
      ▼                   ▼                   ▼
     SQLite          Streamlit Dashboard   Telegram Bot
                          │
                          ▼
                     Investor

Pendekatan ini memisahkan setiap komponen sehingga lebih mudah dikembangkan dan dipelihara.


Menambahkan Logging

Agar mudah mengetahui apa yang terjadi ketika bot berjalan, gunakan modul logging.

import logging

logging.basicConfig(
    filename="bot.log",
    level=logging.INFO,
    format="%(asctime)s %(levelname)s %(message)s"
)

logging.info("Bot started")

Ketika terjadi kesalahan:

try:

    monitor()

except Exception as e:

    logging.error(e)

Contoh isi log:

2026-07-20 07:00 INFO Bot started

2026-07-20 07:05 INFO BBCA checked

2026-07-20 07:10 INFO Alert sent

Dengan logging, proses debugging akan jauh lebih mudah.


Menjalankan Bot 24/7 Menggunakan systemd

Daripada menjalankan bot secara manual, buat service Linux.

Contoh file:

[Unit]
Description=Stock Telegram Bot

[Service]

User=ubuntu

WorkingDirectory=/home/ubuntu/stockbot

ExecStart=/usr/bin/python3 app.py

Restart=always

[Install]

WantedBy=multi-user.target

Aktifkan:

sudo systemctl daemon-reload

sudo systemctl enable stockbot

sudo systemctl start stockbot

Cek status:

systemctl status stockbot

Keuntungan menggunakan systemd:

  • Restart otomatis jika aplikasi berhenti.
  • Mudah dipantau melalui journalctl.
  • Berjalan saat server dinyalakan ulang.

Menjalankan Menggunakan Docker

Buat Dockerfile.

FROM python:3.12-slim

WORKDIR /app

COPY . .

RUN pip install -r requirements.txt

CMD ["python","app.py"]

Build image:

docker build -t stockbot .

Jalankan:

docker run -d --name stockbot stockbot

Docker memudahkan proses deployment ke VPS, cloud, maupun lingkungan pengembangan.


Docker Compose

Jika proyek menggunakan database atau dashboard, gunakan Docker Compose.

services:

  stockbot:

    build: .

    restart: always

    env_file:

      - .env

Jalankan:

docker compose up -d

Dengan Compose, seluruh layanan dapat dijalankan menggunakan satu perintah.


Menambahkan Grafik Harga

Grafik sering lebih informatif dibandingkan angka.

import matplotlib.pyplot as plt

plt.figure(figsize=(10,4))

plt.plot(df["Close"])

plt.savefig("chart.png")

Kirim ke Telegram:

files = {

    "photo":open(
        "chart.png",
        "rb"
    )

}

requests.post(

    photo_url,

    files=files,

    data={

        "chat_id":CHAT_ID

    }

)

Sekarang notifikasi dapat disertai grafik harga terbaru.


Mengirim File CSV

Misalnya hasil screener.

df.to_csv(

    "result.csv",

    index=False

)

Kirim:

files = {

    "document":open(

        "result.csv",

        "rb"

    )

}

Bot dapat mengirim laporan yang siap dianalisis menggunakan Excel atau LibreOffice.


Laporan Harian

Contoh isi laporan:

📊 Daily Market Summary

Tanggal :

20 Juli 2026

======================

Top Gainers

BBCA

+3.2%

BMRI

+2.8%

======================

Top Losers

TLKM

-1.9%

======================

Golden Cross

BBCA

BBRI

======================

AI Sentiment

Positif

======================

Rekomendasi

Watchlist:

BBCA

BMRI

Laporan ini lebih praktis dibanding menerima banyak notifikasi terpisah.


Integrasi dengan Dashboard Streamlit

Tambahkan menu histori.

st.sidebar.selectbox(

    "Menu",

    [

        "Dashboard",

        "Alerts",

        "Portfolio"

    ]

)

Tampilkan histori alert.

st.dataframe(history)

Grafik.

st.line_chart(

    history["Price"]

)

Dashboard menjadi pusat pemantauan seluruh aktivitas bot.


Menggabungkan AI Sentiment

Pada artikel sebelumnya kita membuat analisis sentimen menggunakan AI.

Tambahkan hasil tersebut ke notifikasi.

Contoh:

📈 BBCA

Harga

Rp 9.250

Golden Cross

AI Sentiment

Positif

Confidence

94%

Ringkasan

Laba meningkat,

dividen stabil,

prospek pertumbuhan masih baik.

Dengan demikian, pengguna memperoleh informasi teknikal dan fundamental secara bersamaan.


Menggabungkan Backtesting

Bot juga dapat memanfaatkan hasil strategi yang telah diuji.

Misalnya:

Backtesting

Moving Average

Win Rate

71%

Maximum Drawdown

8%

Status

BUY

Informasi ini membantu pengguna memahami apakah sinyal yang muncul sesuai dengan performa historis strategi.


Struktur Proyek

stock-assistant/

├── app.py
├── config.py
├── telegram.py
├── monitor.py
├── screener.py
├── sentiment.py
├── dashboard.py
├── backtest.py
├── database.py
├── scheduler.py
├── utils.py
├── requirements.txt
├── Dockerfile
├── docker-compose.yml
├── .env
└── data/

Struktur modular seperti ini memudahkan penambahan fitur di masa depan.


Best Practice

Beberapa praktik yang disarankan:

  • Simpan token Telegram dan API key di environment variable.
  • Gunakan logging untuk mencatat aktivitas.
  • Terapkan mekanisme retry ketika gagal mengambil data.
  • Batasi frekuensi notifikasi agar tidak dianggap spam.
  • Simpan histori alert untuk evaluasi.
  • Pisahkan konfigurasi, logika bisnis, dan antarmuka pengguna ke modul yang berbeda.
  • Uji strategi menggunakan data historis sebelum dijadikan dasar notifikasi otomatis.

Keterbatasan Sistem

Walaupun bot sangat membantu, ada beberapa hal yang perlu diperhatikan:

  • Data dari Yahoo Finance mungkin memiliki jeda (delay) dan tidak selalu cocok untuk kebutuhan perdagangan dengan frekuensi tinggi.
  • Gangguan jaringan atau perubahan API dapat memengaruhi proses pengambilan data.
  • Notifikasi tidak menjamin bahwa order dapat dieksekusi pada harga yang sama karena adanya slippage dan perubahan harga pasar.
  • AI dan indikator teknikal adalah alat bantu analisis, bukan jaminan keuntungan.

FAQ

Apakah bot ini bisa digunakan untuk saham Amerika?

Ya. Cukup gunakan simbol yang sesuai, misalnya AAPL, MSFT, atau NVDA.

Apakah bisa digunakan untuk cryptocurrency?

Bisa. Anda dapat menggunakan sumber data yang mendukung aset kripto, seperti Binance API atau CoinGecko API, lalu menerapkan logika notifikasi yang sama.

Apakah bot dapat memantau portofolio pribadi?

Ya. Dengan menambahkan data jumlah lot dan harga beli, bot dapat menghitung keuntungan, kerugian, dan mengirimkan ringkasan nilai portofolio.

Apakah sistem ini gratis?

Python, Telegram Bot API, dan banyak pustaka yang digunakan bersifat gratis. Namun, jika menggunakan layanan AI berbasis cloud atau menjalankan bot di VPS/cloud, akan ada biaya sesuai layanan yang dipilih.


Kesimpulan

Pada seri artikel ini kita telah membangun sebuah Telegram Stock Assistant menggunakan Python, mulai dari pengambilan data harga hingga pengiriman notifikasi otomatis. Sistem kemudian dikembangkan dengan fitur-fitur yang lebih lengkap, seperti pemantauan banyak saham, deteksi sinyal teknikal, pencatatan histori, dashboard, integrasi AI untuk analisis sentimen, serta dukungan deployment menggunakan Docker dan systemd.

Dengan fondasi ini, Anda dapat mengembangkan aplikasi sesuai kebutuhan, misalnya menambahkan strategi investasi sendiri, menghubungkan ke database yang lebih besar, atau mengintegrasikan sumber data lain.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *