⬡ TUTORIAL TEKNIS · TANPA AFILIASI

Deriv API di Python: koneksi WebSocket dari nol.

Tutorial teknis pemrograman. Kita akan konek ke Deriv API, melakukan autentikasi, menarik candle real-time, dan menyusun fondasi sebuah bot. Konten edukatif — halaman ini tidak mengajak kamu trading di Deriv.

Oleh Tim RoboTraderIA· baca 12 menit· level menengah
Jenis kontenTEKNIS
Tutorialpemrograman
Pelajari strukturnya. Terapkan di tempat yang masuk akal.
Bahasa Python 3.11+ Protokol WebSocket Library websockets, asyncio Akun demo (gratis)
Lompat ke kodenya →
100% edukatif · tanpa link afiliasi

Kenapa tutorial ini ada (dan apa yang bukan tujuannya): Deriv punya API publik yang beneran dan WebSocket yang terdokumentasi rapi, sesuatu yang langka di segmen ini. Materinya bagus banget buat belajar memprogram bot — autentikasi, streaming data, pemrosesan asinkron. Halaman ini mengajarkan teknologinya. Bukan menganjurkan kamu trading synthetic indices atau kontrak fixed-odds Deriv — produk semacam itu tidak punya perlindungan regulasi di Indonesia, dan opsi biner sendiri ilegal di sini serta diklasifikasikan Bappebti sebagai judi, bukan trading. Pakai pengetahuan WebSocket dari sini untuk konek ke platform mana pun yang punya API.

01Kenapa Deriv API layak dipelajari

Tiga alasan yang bikin dia jadi studi kasus teknis yang bagus: dokumentasinya publik dan jelas, ada sandbox/demo gratis untuk tes (tanpa perlu setor dana), dan protokolnya WebSocket — persis yang perlu kamu pahami untuk konek ke exchange kripto modern mana pun, ke MT5 lewat bridge, atau ke platform apa pun dengan streaming data real-time. Yang kamu pelajari di sini langsung bisa dipindah ke Binance, Bybit, Deribit.

02Setup lingkungan

Kamu butuh Python 3.11+, sebuah virtualenv, dan dua library. Di terminal:

# Buat proyek dan environment terisolasi
mkdir bot-deriv && cd bot-deriv
python -m venv venv
source venv/bin/activate  # Linux/Mac
# venv\Scripts\activate     # Windows

# Instal dependensi
pip install websockets asyncio python-dotenv

Setelah itu, buat akun demo di Deriv (gratis, tanpa setoran) semata-mata untuk mendapatkan satu API token read-only. Kamu tidak perlu menyetor dana maupun trading.

  1. Buka app.deriv.com dan buat akun demo
  2. Masuk ke Pengaturan → API Tokens
  3. Buat token dengan scope Read (read-only) untuk tutorial ini
  4. Salin token itu dan simpan di file .env di dalam proyek:
# .env
DERIV_TOKEN=seu_token_aqui
DERIV_APP_ID=1089  # app_id publik untuk testing

03Hello World: menyambung ke WebSocket

Server Deriv memakai WebSocket di wss://ws.derivws.com/websockets/v3. Semua komunikasi bersifat asinkron — kamu kirim satu pesan JSON, server membalas juga dalam JSON, bisa jadi berupa streaming. Kontak pertama:

# conectar.py
import asyncio, json, os
import websockets
from dotenv import load_dotenv

load_dotenv()
APP_ID = os.getenv("DERIV_APP_ID")
URL    = f"wss://ws.derivws.com/websockets/v3?app_id={APP_ID}"

async def ping():
    async with websockets.connect(URL) as ws:
        await ws.send(json.dumps({"ping": 1}))
        resposta = await ws.recv()
        print("Servidor respondeu:", resposta)

asyncio.run(ping())

Jalankan dengan python conectar.py. Kamu semestinya melihat {"echo_req": {"ping": 1}, "msg_type": "pong", "ping": "pong"}. Kalau muncul, selamat — kamu sudah terhubung. Kalau tidak, cek firewall atau proxy.

04Autentikasi

Setelah handshake, autentikasi dilakukan dengan token:

# autenticar.py
async def autenticar():
    token = os.getenv("DERIV_TOKEN")
    async with websockets.connect(URL) as ws:
        await ws.send(json.dumps({"authorize": token}))
        resp = json.loads(await ws.recv())
        if "error" in resp:
            print("Falha:", resp["error"]["message"])
        else:
            print("Conta:", resp["authorize"]["loginid"])
            print("Saldo:", resp["authorize"]["balance"])

Praktik keamanan yang baik: jangan pernah commit token ke Git. Selalu pakai .env + .gitignore. Untuk produksi, pakai secret vault (AWS Secrets Manager, HashiCorp Vault).

05Streaming candle real-time

Di sinilah WebSocket bersinar. Alih-alih polling REST tiap detik, kamu berlangganan sebuah stream dan server yang mendorong update-nya sendiri:

# candles.py
async def stream_candles(symbol="frxEURUSD", granularity=60):
    async with websockets.connect(URL) as ws:
        await ws.send(json.dumps({
            "ticks_history": symbol,
            "adjust_start_time": 1,
            "count": 100,
            "end": "latest",
            "style": "candles",
            "granularity": granularity,
            "subscribe": 1
        }))

        while True:
            msg = json.loads(await ws.recv())
            if msg.get("msg_type") == "ohlc":
                c = msg["ohlc"]
                print(f"{c['epoch']} O:{c['open']} H:{c['high']} L:{c['low']} C:{c['close']}")

asyncio.run(stream_candles())

Parameter subscribe: 1 adalah kuncinya — dia menjaga koneksi tetap terbuka dan mendorong setiap candle baru. Kamu tidak perlu memintanya lagi.

06Menyusunnya seperti bot sungguhan

Contoh di atas sifatnya didaktis. Bot sungguhan punya tiga lapisan yang terpisah: koneksi (reconnect otomatis, heartbeat), strategi (aturan murni, bisa diuji), dan eksekusi (mengirim order, mengelola state). Kerangka yang kami sarankan:

# struktur/
# ├── client.py       # WebSocket + reconnect + heartbeat
# ├── strategy.py     # Fungsi murni: diberi DataFrame, mengembalikan sinyal
# ├── executor.py     # Kirim order, kontrol posisi terbuka
# ├── risk.py         # Stop loss, take profit, sizing posisi
# └── main.py         # Merekatkan semuanya

# strategy.py - exemplo: cruzamento de médias
import pandas as pd

def calcular_sinal(df: pd.DataFrame) -> str:
    df["ma_curta"] = df["close"].rolling(9).mean()
    df["ma_longa"] = df["close"].rolling(21).mean()

    ultima = df.iloc[-1]
    anterior = df.iloc[-2]

    # Crossover ke atas
    if anterior["ma_curta"] < anterior["ma_longa"] and ultima["ma_curta"] > ultima["ma_longa"]:
        return "compra"
    # Crossover ke bawah
    if anterior["ma_curta"] > anterior["ma_longa"] and ultima["ma_curta"] < ultima["ma_longa"]:
        return "venda"
    return "hold"

Pemisahan itu penting: strategi dalam bentuk fungsi murni bisa diuji dengan pytest dalam hitungan detik, tanpa perlu konek ke apa pun. Kamu jalankan backtest dengan data 5 tahun, validasi, dan baru setelah itu colok ke executor sungguhan.

07Penanganan error dan reconnect

WebSocket di produksi pasti putus. Server restart, jaringan goyang, timeout lewat. Bot yang tidak bisa reconnect adalah bot yang tidak berguna. Pola yang kami sarankan:

async def conectar_com_retry():
    backoff = 1
    while True:
        try:
            async with websockets.connect(URL, ping_interval=20) as ws:
                print("Conectado")
                backoff = 1  # reset
                await rotina_principal(ws)
        except (websockets.ConnectionClosed, OSError) as e:
            print(f"Conexão caiu: {e}. Reconectando em {backoff}s")
            await asyncio.sleep(backoff)
            backoff = min(backoff * 2, 60)  # exponential, dibatasi di 60s

08Di mana pengetahuan ini bisa dipakai

Pola WebSocket + asyncio yang barusan kamu pelajari jalan di hampir semua platform modern dengan streaming. Ini membawamu ke mana:

Mau kerangka bot yang lengkap?

Unduh proyek contoh kami di GitHub — kode dengan komentar baris per baris, plus tes dan arsitektur yang rapi.

Unduh bot gratis →
MIT License · pakai, adaptasi, bagikan

Baca juga

🎁 Dapatkan bot trading gratis (dengan API Quotex, Deriv, dan IQ Option)

Bot open source + kode API siap pakai. Kamu tinggal edit sambil ngobrol dengan ChatGPT/Claude — tanpa coding. Gratis, tanpa spam.

👉 Sudah mau bot yang siap pakai? Kunjungi botbinaryoptions.com →