Strasmore Research
Edukasi Matt ConnorOleh Matt Connor

Belajar Trading Kuantitatif dari Buku Open Source

Buku trading kuantitatif open source menguraikan silabus lengkap, pelajaran di tiap tahap, titik pemula paling sering berhenti, dan bagian yang berlaku untuk saham AS.

Buku trading kuantitatif open source merupakan silabus publik gratis: seluruh proses, mulai dari data mentah hingga order yang dieksekusi, ditulis dalam urutan yang biasanya dihadapi pemula. Manuskrip XQuant: Everyone Can Be a Quantitative Trader, yang diterbitkan di GitHub oleh xingwudao, menjadi contoh yang jelas dengan 686 stars per Agustus 2026. Sembilan babnya mengikuti alur yang ditempuh hampir setiap kurikulum kuantitatif. Halaman ini mengikuti alur tersebut tahap demi tahap, menjelaskan kegagalan spesifik yang dapat terjadi pada setiap tahap, serta menandai bagian mana yang tetap berlaku ketika beralih dari saham A Tiongkok ke ekuitas AS.

Apa yang terkandung dalam buku trading kuantitatif open source?

Hilangkan branding dari silabus pemula mana pun, dan tersisa lima tahap dalam urutan ini: memperoleh dan membersihkan data, membangun sinyal dari data tersebut, menguji sinyal terhadap data historis, menentukan besarnya posisi, lalu mengirim order dan membayar biayanya. Daftar isi XQuant, sebagaimana dibaca pada commit 016b66e tanggal 14 Juli 2026, membahas hal yang sama dalam sembilan bab.

  • Persiapan, lalu bab satu: menjalankan satu strategi secara lengkap dari awal hingga akhir.
  • Bab dua, apa yang harus dibeli: mulai dengan tiga ETF.
  • Bab tiga, berapa banyak yang harus dibeli: tiga metode alokasi, yang diukur dan dibandingkan.
  • Bab empat, kapan harus trading: rebalancing, stop loss, take profit.
  • Bab lima, menilai apakah suatu strategi benar-benar baik: empat perspektif.
  • Bab enam, jangan terlalu cepat merayakan hasil: mencegah overfitting.
  • Bab tujuh, dari kondisi ideal ke kondisi nyata: mengeksekusi trade.
  • Bab delapan, kehidupan setelah peluncuran: pemantauan, diagnosis, dan iterasi.
  • Bab sembilan, mencari peluang baru: pengantar riset faktor.

Urutan ini perlu diperhatikan. Position sizing muncul pada bab tiga, sebelum kedua bab tentang backtest, sedangkan riset faktor ditempatkan pada bagian terakhir. Jalur belajar mandiri biasanya berjalan sebaliknya: gagasan faktor terlebih dahulu, backtest kedua, dan aturan sizing tidak pernah dibuat. Repositori latihan pendampingnya (333 bintang, pada tanggal yang sama) disusun berdasarkan spesifikasi tugas tertulis, bukan kode yang sudah selesai, dengan pembaca mengarahkan asisten AI untuk mengimplementasikannya. Membaca kode yang tidak Anda tulis sendiri tetap merupakan keterampilan yang menentukan segala hal di bawah ini, karena setiap kegagalan berikutnya tersembunyi dalam satu detail implementasi.

Tahap satu: dapatkan data, lalu tentukan universe

Pembersihan data adalah bagian yang terlihat dari pekerjaan data: prints yang salah, sesi yang hilang, serta penyesuaian akibat stock split dan dividen. Memilih nama mana yang akan dikaji adalah bagian yang tidak terlihat. Di sinilah survivorship bias masuk, bahkan sebelum satu baris kode strategi dibuat. Ambil setiap ticker AS yang mencatatkan transaksi selama satu minggu pada bulan Juni, untuk setiap tahun secara terpisah. Lalu tanyakan berapa banyak yang masih diperdagangkan pada minggu yang sama di tahun 2026.

QueryTicker AS yang diperdagangkan dalam satu minggu di bulan Juni, dan berapa banyak yang masih diperdagangkan pada Juni 2026
SQL tepat di balik setiap angka
WITH june_week AS (
    SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS year,
           ticker
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE toMonth(toTimeZone(window_start, 'America/New_York')) = 6
      AND toDayOfMonth(toTimeZone(window_start, 'America/New_York')) BETWEEN 10 AND 16
      AND toYear(toTimeZone(window_start, 'America/New_York')) BETWEEN 2016 AND 2026
      AND volume > 0
    GROUP BY year, ticker
),
survivors AS (
    SELECT ticker FROM june_week WHERE year = 2026
)
SELECT year,
       uniqExact(ticker) AS tickers_traded,
       uniqExactIf(ticker, ticker IN (SELECT ticker FROM survivors)) AS still_trading_2026,
       round(100 * uniqExactIf(ticker, ticker IN (SELECT ticker FROM survivors))
             / uniqExact(ticker), 1) AS still_trading_pct
FROM june_week
GROUP BY year
ORDER BY year
Run this yourself

Dari 8224 ticker yang diperdagangkan pada minggu tersebut di 2016, 50% masih diperdagangkan pada minggu yang sama di 2026. Sisanya diakuisisi, digabungkan, berganti nama, atau dihapus dari bursa. Backtest yang dibuat berdasarkan daftar emiten saat ini hanya mengkaji nama-nama yang berhasil bertahan. Backtest itu juga memberi imbalan kepada strategi karena memegang perusahaan yang dipilih setelah fakta diketahui. Feed untuk pemula akan memberikan daftar survivor tersebut tanpa label peringatan: panduan API data pasar saham gratis membahas data yang tersedia dan tidak tersedia dari feed tersebut.

Tahap dua: ubah data menjadi sinyal

Sinyal adalah aturan yang memberi skor pada saham pada suatu titik waktu, sedangkan factor adalah sinyal yang diyakini berlaku secara bersamaan pada banyak saham. Momentum, value, dan volatilitas rendah adalah contoh klasiknya. Kegagalan pada tahap ini adalah menguji aturan sampai menemukan satu yang berhasil. Dua puluh variasi crossover moving average pada satu dekade dari satu indeks akan selalu menghasilkan pemenang. Pemenang itu biasanya adalah aturan yang paling sesuai dengan noise. Pertahanannya memang tidak menarik: tetapkan aturan sebelum mengukurnya, sisihkan sebagian riwayat yang tidak pernah Anda lihat, catat setiap variasi yang telah diuji, dan pilih lebih sedikit angka yang dapat disesuaikan. XQuant menempatkan satu bab penuh mengenai hal ini sebelum riset factor. Itu merupakan urutan yang tepat.

Tahap tiga: backtest, saat sebagian besar pemula berhenti

Tahap ini mengakhiri sebagian besar proyek yang dikerjakan secara autodidak. Proyek-proyek itu biasanya berakhir secara diam-diam, dengan kurva ekuitas yang tampak sangat baik. Survivorship bias yang dijelaskan di atas adalah kesalahan pertama dari dua kesalahan tersebut. Look-ahead bias adalah yang kedua: strategi menggunakan angka yang belum tersedia saat order seharusnya dimasukkan. Bentuk yang paling umum adalah aturan yang dihitung dari harga penutupan hari ini lalu dieksekusi pada harga penutupan yang sama. Ukur jarak yang diabaikan oleh asumsi tersebut.

QueryJarak rata-rata dari penutupan satu sesi ke pembukaan sesi berikutnya, bulanan
SQL tepat di balik setiap angka
WITH sessions AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS session,
           argMin(open, window_start) AS session_open,
           argMax(close, window_start) AS session_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'NVDA')
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2024-08-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, session
),
gaps AS (
    SELECT ticker,
           session,
           toFloat64(session_open) AS open_px,
           toFloat64(lagInFrame(session_close) OVER (PARTITION BY ticker ORDER BY session)) AS prev_close
    FROM sessions
)
SELECT formatDateTime(toStartOfMonth(session), '%Y-%m') AS month,
       formatDateTimeInJodaSyntax(toStartOfMonth(session), 'MMMM yyyy') AS month_label,
       round(avgIf(abs(open_px / prev_close - 1) * 10000, ticker = 'SPY'), 1) AS spy_gap_bps,
       round(avgIf(abs(open_px / prev_close - 1) * 10000, ticker = 'NVDA'), 1) AS nvda_gap_bps
FROM gaps
WHERE prev_close > 0
GROUP BY month, month_label
HAVING countIf(ticker = 'SPY') > 0 AND countIf(ticker = 'NVDA') > 0
ORDER BY month
Run this yourself

Dalam July 2026, jarak rata-rata antara satu harga penutupan dan harga pembukaan berikutnya mencapai 40.8 basis point untuk SPY dan 107.4 untuk NVDA. Satu basis point adalah seperseratus poin persentase. Seluruh 24 bulan pada panel tersebut, mulai dari August 2024, berada di atas nol. Backtest yang mengambil keputusan pada harga penutupan dan mengeksekusi order pada harga penutupan yang sama memperoleh jarak tersebut secara cuma-cuma pada setiap transaksi. Tidak ada order live yang dapat melakukannya. Look-ahead bias dalam backtesting menguraikan mekanismenya, sedangkan mengapa saham mengalami gap overnight menjelaskan gap itu sendiri.

Tahap empat: tentukan jumlah pembelian

Kegagalan di sini adalah tidak adanya aturan. Sebagian besar trader otodidak tidak pernah menulis aturan sizing, sehingga mereka sebenarnya memiliki aturan secara tidak sengaja. Biasanya, mereka mengalokasikan jumlah dolar yang sama untuk setiap nama atau menggunakan seluruh kas yang tersedia. Jumlah dolar yang sama bukan berarti risiko yang sama.

QueryPergerakan harian selama dua belas bulan: volatilitas tahunan dan sesi terburuk, delapan nama
SQL tepat di balik setiap angka
WITH daily AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS session,
           argMax(close, window_start) AS session_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'KO', 'JNJ', 'MSFT', 'AAPL', 'NVDA', 'TSLA', 'COIN')
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2025-08-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, session
),
rets AS (
    SELECT ticker,
           toFloat64(session_close) AS close_px,
           toFloat64(lagInFrame(session_close) OVER (PARTITION BY ticker ORDER BY session)) AS prev_close
    FROM daily
)
SELECT ticker,
       round(stddevSamp(close_px / prev_close - 1) * sqrt(252) * 100, 1) AS annualized_vol_pct,
       round(abs(min(close_px / prev_close - 1)) * 100, 2) AS worst_day_pct
FROM rets
WHERE prev_close > 0
GROUP BY ticker
ORDER BY annualized_vol_pct DESC
Run this yourself

Selama dua belas bulan hingga 31 Juli 2026, COIN mencatat volatilitas tahunan sebesar 68%, dibandingkan dengan 12.7% untuk SPY yang berada di ujung panel dengan volatilitas terendah. Dalam satu sesi terburuknya, harga ditutup 13.34% di bawah penutupan sebelumnya, sementara hari terburuk untuk SPY mencatat 2.69%. Jumlah dolar yang sama pada setiap nama menghasilkan pergerakan harian yang sangat berbeda. Pergerakan itulah, bukan sinyalnya, yang benar-benar dialami oleh pemula. sizing posisi berdasarkan kriteria Kelly menjelaskan satu jawaban formal, sedangkan risiko konsentrasi menunjukkan bentuk jawaban informalnya.

Tahap lima: eksekusi dan biaya yang dilupakan backtest

Dua biaya, tetapi hanya satu yang terlihat. Komisi dan biaya regulasi tercantum dalam laporan transaksi. Slippage tidak tercantum. Slippage adalah selisih antara harga di layar dan harga eksekusi yang Anda dapatkan. Batas minimumnya adalah bid-ask spread, yaitu jarak antara kuotasi beli terbaik dan kuotasi jual terbaik pada saat itu. Pembeli membayar ask, sedangkan penjual mengeksekusi pada bid. Karena itu, transaksi pergi-pulang melintasi spread dua kali. Spread tidak konstan.

QuerySpread kuotasian rata-rata berdasarkan interval setengah jam ET: AAPL dan KO, Jumat 17 Juli 2026
SQL tepat di balik setiap angka
WITH quotes AS (
    SELECT ticker,
           toStartOfInterval(toTimeZone(sip_timestamp, 'America/New_York'), INTERVAL 30 MINUTE) AS bucket,
           toFloat64(ask_price - bid_price) / toFloat64((ask_price + bid_price) / 2) * 10000 AS spread_bps
    FROM global_markets.cache_stocks_quotes
    WHERE ticker IN ('AAPL', 'KO')
      AND sip_timestamp >= toDateTime('2026-07-17 13:00:00')
      AND sip_timestamp < toDateTime('2026-07-17 21:00:00')
      AND bid_price > 0
      AND ask_price > bid_price
)
SELECT formatDateTime(bucket, '%H:%i') AS et_time,
       round(avgIf(spread_bps, ticker = 'AAPL'), 2) AS aapl_spread_bps,
       round(avgIf(spread_bps, ticker = 'KO'), 2) AS ko_spread_bps
FROM quotes
WHERE spread_bps > 0 AND spread_bps < 500
GROUP BY et_time
HAVING countIf(ticker = 'AAPL') > 0 AND countIf(ticker = 'KO') > 0
ORDER BY et_time
Run this yourself

Panel ini mencakup 16 bucket setengah jam pada satu hari Jumat, mulai dari bucket 09:00 sebelum bel pembukaan hingga bucket 16:30 setelah penutupan. AAPL memiliki kuotasi selebar 10.53 basis point pada bucket pertama dan 3.27 pada bucket terakhir, sedangkan KO masing-masing sebesar 28.87 dan 8.04. Kuotasi paling ketat pada hari itu berada di bagian tengah grafik, di antara kedua titik tersebut. Strategi yang bertransaksi saat pembukaan pada dua saham paling likuid di pasar menanggung biaya yang berbeda dari versi strategi yang sama pada tengah hari. Backtest dengan asumsi biaya nol tidak memperhitungkan biaya mana pun. Bid-ask spread menentukan angkanya, alasan spread melebar saat pembukaan menjelaskan kurvanya, dan biaya perdagangan saham menghitung seluruh transaksi pergi-pulang. Di antara backtest yang bersih dan dana riil, masih ada satu tahap: paper trading sebelum menggunakan dana riil.

Bagian mana dari kurikulum saham A yang dapat diterapkan pada saham AS?

XQuant dan metode sejenisnya ditulis untuk saham A dan ETF Tiongkok. Metodenya dapat diterapkan tanpa perubahan: urutan tahap, definisi, disiplin terhadap overfitting, kebiasaan mencatat biaya sebagai pos tersendiri dan bukan sebagai pemikiran belakangan, serta seluruh perhitungan sizing. Bar harga tetaplah bar harga. Yang tidak dapat diterapkan adalah aturan yang mengaturnya.

  • Saham A menerapkan pembatasan T+1 yang nyata: saham yang dibeli hari ini tidak dapat dijual hingga sesi berikutnya. T+1 di AS adalah konvensi penyelesaian transaksi dan tidak menghalangi perdagangan intraday, meskipun aturan pattern day trader membatasi akun margin dengan nilai di bawah $25.000 hingga tiga day trade dalam lima hari kerja.
  • Saham A di papan utama dibatasi pada pergerakan harian sebesar 10%, sedangkan batasnya 20% di papan pertumbuhan. Saham AS tidak memiliki batas harian, dan penghentian perdagangan terjadi karena volatility bands dan news halts.
  • Order saham A diperdagangkan dalam lot berisi 100 saham. Banyak broker AS mengeksekusi fractional shares, sehingga hal ini mengubah apa yang dapat dinyatakan oleh aturan sizing.
  • Tiongkok mengenakan stamp duty pada sisi jual. Penjual di AS membayar regulatory fees yang berbeda dari segi besaran dan strukturnya.
  • Struktur sesi juga berbeda, termasuk jeda tengah hari di Shanghai dan Shenzhen. Jam perdagangan saham AS berlangsung terus-menerus dan berakhir dalam closing auction.

Setiap konstanta biaya atau waktu yang disalin dari suatu kursus ke dalam kode Anda sendiri merupakan bug yang menunggu order live pertama.

Sematkan referensi, bukan README

Repositori ini belum memiliki rilis bertag hingga Agustus 2026, sehingga sitasi yang tahan lama adalah commit: 016b66e, bertanggal 14 Juli 2026. Hal itu penting bagi buku yang masih ditulis. Nomor bab dapat berubah, berkas README dapat ditulis ulang, judul dapat berpindah, dan tautan yang sebelumnya mengarah ke bab tujuh diam-diam dapat mengarah ke hal lain. Cantumkan commit dan tanggalnya, catat judul bab yang Anda baca, bukan nomornya, agar catatan Anda tetap dapat diverifikasi setahun kemudian. Manuskrip ini diterbitkan berdasarkan CC BY-NC-SA 4.0, sedangkan skrip build menggunakan lisensi MIT. Disiplin yang sama merupakan pelajaran terakhir dari silabus ini: strategi yang tidak dapat Anda jalankan ulang dari snapshot data yang dipatok hanyalah sebuah narasi, bukan hasil.

FAQ

Apakah Anda dapat mempelajari quant trading dari buku open source gratis?

Untuk peta pembelajaran, ya. Manuskrip terbuka memungkinkan Anda memeriksa setiap klaim berdasarkan sumbernya. Namun, buku tidak dapat menyediakan data, biaya, dan aturan pasar Anda sendiri. Di sinilah silabus yang ditulis untuk satu bursa tidak lagi sesuai dengan broker Anda.

Tahap mana dalam kurikulum quant yang paling sering menghentikan pemula?

Backtest. Ada dua kesalahan di tahap ini, dan keduanya membuat hasil tampak lebih baik: survivorship bias, yang berasal dari universe yang disusun setelah fakta terjadi, serta look-ahead bias, yang berasal dari pengisian transaksi pada harga yang belum tercatat oleh waktu. Hanya 50% ticker yang diperdagangkan pada pekan Juni tersebut dari 2016 yang masih diperdagangkan satu dekade kemudian.

Apa perbedaan antara survivorship bias dan look-ahead bias?

Survivorship bias adalah masalah universe: saham yang diuji dipilih karena berhasil bertahan. Look-ahead bias adalah masalah waktu: strategi menggunakan angka yang belum tersedia ketika order seharusnya masuk. Yang pertama memperbesar daftar saham, sedangkan yang kedua memperbesar harga eksekusi.

Apakah kursus quant untuk saham A Tiongkok dapat diterapkan pada saham AS?

Metodenya dapat diterapkan. Namun, aturan pasarnya berbeda. Pertahankan urutan tahapan, disiplin terhadap overfitting, dan pencatatan biaya. Setelah itu, ganti infrastruktur data, pembatasan penjualan T+1, batas harga harian, dan ukuran lot dengan padanan AS sebelum dana digunakan.


Setiap panel di atas merupakan stored query dengan SQL di bawahnya. Buka salah satunya, ganti ticker atau tanggalnya, lalu jalankan sendiri di terminal Strasmore.

#quant#learning path#backtesting#open source#beginners