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
.envagar 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
logginguntuk 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.
