researcher: Arkib Penyelidikan Kuant yang Boleh Dicari untuk Manusia dan Ejen AI
Penyelidikan kuant ada di mana-mana dan tiada di mana-mana. Kertas yang anda perlukan ada di arXiv. Pelaksanaan rujukannya ada di GitHub. Intuisinya tertanam dalam catatan blog yang ditulis seseorang pada 2019. Logik kemasukan/keluar yang sebenar pula ialah skrip Pine di TradingView dengan 400 suka dan tanpa dokumentasi. Empat korpus, empat kotak carian, empat set konvensi, sifar rujukan silang. Apabila anda cuba memutuskan sama ada sesuatu idea itu berbaloi diberi seminggu masa backtesting, fragmentasi itulah kos sebenarnya — bukan bacaannya, tetapi pencariannya.
Jadi kami membina arkib kami sendiri. researcher.marketmaker.cc ialah arkib terkurasi dan enjin carian untuk penyelidikan perdagangan kuantitatif. Ia menghimpunkan bahan yang biasanya bertaburan merentasi arXiv, GitHub, blog kuant, dan TradingView ke dalam satu tempat, mengindeks kesemuanya untuk carian teks penuh, dan — inilah bahagian yang paling kami pentingkan — mendedahkan keseluruhan korpus kepada ejen AI melalui titik akhir Model Context Protocol (MCP) dan API REST awam. Ia ialah substrat penyelidikan yang boleh dilayari manusia dengan papan kekunci dan disoal ejen dengan panggilan alat, disokong oleh indeks yang sama persis.
Catatan ini ialah lawatan tentang apa yang terkandung di dalamnya, bagaimana ia dibina, dan mengapa ia terletak di tempatnya dalam tindanan ejen AI kami.
Apa yang Ada dalam Korpus

researcher menyatukan empat set data utama, masing-masing dengan indeks teks penuhnya sendiri. Kiraan di bawah adalah setakat 2026-06-12, dan ia berubah — saluran arXiv berjalan setiap hari dan indeks dibina semula daripada sumber, jadi angkanya bertambah.
| Set Data | Sumber | Dokumen | Apa yang anda cari |
|---|---|---|---|
| Kertas | arXiv q-fin (1997–2026) | ~18,647 | tajuk, abstrak, pengarang (tapis mengikut kategori) |
| Kod | Repo GitHub | ~12,957 | nama, perihalan, topik (tapis mengikut bahasa, bintang) |
| Artikel | Blog kuant | ~4,633 | tajuk, perihalan (tapis mengikut sumber, tarikh) |
| Strategi | Skrip Pine TradingView | ~15,180 | tajuk, perihalan, tag (tapis mengikut kategori) |
Itu sedikit lebih daripada 51,000 dokumen merentasi empat indeks yang boleh dicari. Indeks kertas ialah korpus tunggal terbesar dan yang paling banyak kami curahkan kerja: ia ialah keseluruhan aliran deras kewangan kuantitatif arXiv (q-fin.*) sejak 1997, bukan subset yang dipilih secara manual. Sebelum ini laman tersebut hanya menyertakan beberapa ratus kertas terkurasi; indeks semasa ialah korpus q-fin yang lengkap, dengan asal usul terkurasi digabungkan di atasnya supaya kertas yang turut dirujuk oleh blog kuant tertentu membawa atribusi itu.
Selain empat indeks carian, laman yang menghadap manusia menambah lebih banyak lapisan: nota penyelidikan dan ringkasan harian yang kami tulis sendiri, direktori laman dan pengarang kuant, bahagian video yang mengindeks saluran YouTube yang berkaitan, dan direktori dana. Empat indeks itu ialah tulang belakang yang boleh dicari; segala yang lain ialah kurasi di sekelilingnya.
Sumber Kebenaran Tunggal

Perkara yang secara senyap rosak bagi kami pada peringkat awal — dan perkara yang kini kami reka bentuk dengan teliti untuk mengelaknya — ialah ketakpadanan kiraan. Laman utama menyebut satu angka, carian memulangkan angka lain, API pula angka ketiga. Pada satu ketika muka hadapan mengiklankan 719 kertas sementara carian memulangkan lebih daripada 18,000. Tiada apa yang lebih menghakis kepercayaan terhadap alat penyelidikan selain korpus yang tidak boleh bersetuju dengan dirinya sendiri tentang sebesar mana saiznya.
Penyelesaiannya ialah membuatkan setiap permukaan membaca daripada satu tempat. Bagi korpus kertas, Meilisearch ialah sumber kebenaran. Tiada salinan kedua kertas yang hidup dalam bundle aplikasi; kiraan di laman utama, kiraan di /papers, kiraan yang dipulangkan oleh API, dan dokumen yang sebenarnya anda cari semuanya ialah indeks yang sama. Korpus itu sendiri dibina secara luar talian oleh langkah penyerapan yang mengambil set kertas terkurasi, menyatukannya dengan aliran deras arXiv (dinyahduplikat mengikut id arXiv, dengan tatasusunan asal usul digabungkan), mengisih terbaharu-dahulu, dan menulis satu fail ~25 MB yang digunakan oleh pengindeks. Fail itu lebih kurang 15,000–18,000 rekod dan dengan sengaja tidak dibundle ke dalam klien — korpus sebesar itu tidak sepatutnya dihantar ke pelayar.
Tiga set data yang lain (kod, artikel, skrip Pine) dibaca di sebelah pelayan daripada fail JSON mereka dan diindeks daripada fail yang sama, dengan migrasi ke Meili-sebagai-sumber sebagai langkah seterusnya yang dirancang. Peraturan menyeluruhnya: baca data di pelayan, jangan sesekali import set data berbilang megabait ke dalam bundle klien, dan biarkan indeks serta kiraan yang dipaparkan datang daripada asal usul yang sama. Penyahsegerakan menjadi mustahil secara struktur.
Carian: Teks Penuh, Bertoleransi Salah Taip, Berfaset

Enjin carian ialah Meilisearch, yang berjalan di pelayan yang sama dengan aplikasi dan diikat kepada localhost — ia tidak didedahkan secara awam. Kami menggunakannya sebagai enjin carian teks penuh, bukan stor vektor. Tiada embeddings, tiada sihir keserupaan semantik. Untuk "cari saya kertas dan repo yang menyebut konsep ini," carian leksikal bertoleransi salah taip ke atas tajuk, abstrak, perihalan, pengarang, dan tag adalah pantas, boleh diramal, dan boleh dinyahpepijat dengan cara yang tidak dimiliki oleh indeks embedding. Setiap indeks menyimpan dokumen asal yang lengkap ditambah _id yang ditambah, jadi carian memulangkan rekod yang dihidrat sepenuhnya yang boleh dirender terus oleh aplikasi — tiada pengambilan kedua untuk menghidrat semula padanan.
Beberapa butiran yang penting dalam amalan:
-
Toleransi salah taip dan pemberian pangkat relevan datang secara percuma daripada Meilisearch. Mencari
momentmmasih menemui kertas momentum; keputusan diberi pangkat, bukan sekadar ditapis. -
Penapisan berfaset. Kertas ditapis mengikut
categoryarXiv (q-fin.PM,q-fin.TR, …), repo mengikutlanguagedanstars, artikel mengikutsourcedandate, skrip Pine mengikutcategory. Halaman/papersmembina menu juntai bawah kategorinya daripada taburan faset langsung bagi indeks, jadi pilihan penapis sentiasa mencerminkan apa yang sebenarnya ada dalam korpus. -
Pemisahan camelCase. Meilisearch mentoken pada ruang putih dan tanda baca tetapi bukan pada camelCase. Itu bermakna repo yang dinamakan secara harfiah
TradingAgentsakan menjadi satu token tunggal, tidak boleh dicapai oleh pertanyaan semula jadi "trading agents." Semasa pengindeksan kami menerbitkan medanname_split—TradingAgents→TradingAgents Trading Agents,ai-hedge-fund→ai-hedge-fund ai hedge fund— dan menambahnya kepada atribut yang boleh dicari. Token asal disimpan dahulu supaya padanan nama tepat masih diberi pangkat tertinggi, dan medan terbitan itu tidak pernah dipulangkan kepada klien. Ia perkara kecil yang membuatkan perbezaan antara menemui repo unggulan dengan tidak. -
Layari = terbaharu-dahulu. Pertanyaan kosong bukanlah ralat; ia ialah laluan layaran. Pada
/paperspertanyaan kosong mengisih mengikutpublishedmenurun, jadi halaman itu turut berfungsi sebagai suapan kronologi terbalik bagi penyelidikan q-fin terkini. -
Indeks sampingan untuk agregat. Sesetengah angka tidak boleh dikira Meilisearch dengan murah pada masa pertanyaan — jumlah bintang merentasi semua repo, jumlah fail Python, jumlah notebook. Daripada mengimbas keseluruhan korpus pada setiap pemuatan halaman, pengindeks menulis jumlah-jumlah itu sekali, pada masa pengindeksan, ke dalam indeks
researcher_metayang kecil yang memegang satu dokumen bagi setiap set data. Titik akhirstatsmembacanya terus kembali. Kiraan yang berubah hanya pada pengindeksan semula dikira hanya pada pengindeksan semula. -
Siling penomboran muka yang benar-benar boleh diguna. Indeks kertas menaikkan
maxTotalHitsMeilisearch kepada 50,000 dan menandapublishedboleh diisih, jadi anda boleh menomborkan muka jauh ke dalam korpus ~18k-dokumen dan mengisih keseluruhannya terbaharu-dahulu — bukan hanya halaman pertama padanan relevan.
Pengindeks adalah idempoten: ia mencipta setiap indeks jika tiada, menerapkan semula tetapan, dan meng-upsert setiap dokumen dalam kelompok 2,000 yang dikunci mengikut _id (kertas menerbitkan miliknya daripada id arXiv, repo dan artikel daripada hash URL). Oleh kerana keseluruhan indeks boleh dibina semula daripada fail sumber, tiada sandaran untuk diurus — pengembalian semula hanyalah pengindeksan semula. Menjalankannya semula adalah selamat secara binaan.
Boleh Diakses Ejen: MCP dan API Awam

Inilah bahagian yang mengikat researcher dengan keseluruhan apa yang kami lakukan. Korpus itu bukan sekadar laman web dengan kotak carian — ia ialah alat yang boleh dipanggil oleh ejen AI.
Titik akhir MCP
researcher mendedahkan pelayan Model Context Protocol di /api/mcp melalui Streamable HTTP. Mana-mana ejen yang serasi MCP — Claude, ejen tersuai dalam tindanan kami sendiri, apa-apa yang bertutur protokol itu — boleh menyambung dan memanggil alat baca-sahaja terhadap korpus langsung. Terdapat 13 alat, dikumpulkan mengikut set data, mengikut bentuk search / get / list yang konsisten:
| Kumpulan | Alat |
|---|---|
| Kertas | search_papers, get_paper, list_papers |
| Kod | search_repos, get_repo, list_repos |
| Artikel | search_articles, get_article, list_articles_by_site |
| Strategi | search_pine, get_pine_script, list_pine |
| Pengetahuan | knowledge_query (stub anggun, dirizab untuk lapisan graf masa depan) |
Skema alat ditulis untuk faedah ejen, bukan manusia. search_papers, contohnya, mengiklankan dirinya sebagai carian relevan yang diberi pangkat dan bertoleransi salah taip ke atas tajuk, abstrak, dan pengarang, dengan penapis category pilihan (cth. q-fin.PM) dan had keputusan — dan memberitahu ejen supaya memanggil get_paper untuk abstrak penuh sebaik sahaja ia mempersempit perkara. search memulangkan padanan saiz petikan yang padat supaya ejen boleh mengimbas banyak keputusan dengan murah; get memulangkan rekod penuh sebaik sahaja ia memilih satu. Bentuk dua langkah itu mengelakkan tetingkap konteks ejen daripada lemas dalam abstrak yang ia tidak perlukan.
Secara konkrit, ejen yang menyiasat, katakan, pelaksanaan optimum boleh menjalankan search_papers("optimal execution", category: "q-fin.TR") untuk mendapatkan senarai pendek tajuk dan petikan yang diberi pangkat, search_repos("optimal execution", language: "Python") untuk menemui pelaksanaan yang diisih mengikut relevan dan boleh ditapis mengikut bintang, dan search_pine("VWAP") untuk melihat bagaimana idea yang sama muncul sebagai strategi TradingView yang diterbitkan — tiga panggilan alat terhadap tiga korpus yang, sejam lalu, ialah tiga laman web yang berbeza. Kemudian satu get_paper menarik abstrak penuh bagi yang kelihatan menjanjikan. Ejen tidak pernah meninggalkan protokol, dan setiap keputusan ialah rekod sebenar yang dihidrat dan bukannya stub keputusan carian yang terpaksa diambil semula.
API REST awam
Untuk pengguna bukan MCP terdapat permukaan REST selari di bawah /api/v1/: papers, repos, articles, pine, dan agregat stats. Ia bertutur JSON biasa dengan parameter q, category, limit, dan offset, memulangkan jumlah sebenar dan taburan faset di sisi setiap halaman, dan didayakan CORS. GET /api/v1/papers?q=optimal+execution&category=q-fin.TR ialah satu baris dari mana-mana. Titik akhir yang sama memacu halaman /papers laman itu sendiri — pelayar hanyalah satu lagi klien API.
Gagal dengan jujur
Backend carian yang berbohong adalah lebih teruk daripada yang terhenti. Kami mengambil pendirian yang disengajakan tentang apa yang berlaku apabila Meilisearch tidak boleh dicapai. Lapisan data melontar pada kegagalan dan bukannya secara senyap memulangkan keputusan kosong — dan pemanggil memutuskan cara mengendalikannya. Bagi set data yang masih menyimpan salinan dalam-memori, alat berundur kepada .filter() biasa ke atas salinan itu, jadi laman tersebut kekal hidup. Bagi kertas, di mana Meilisearch ialah sumber kebenaran dan tiada salinan kedua, alat dan API memulangkan ralat eksplisit (API memberi respons 503) dan bukannya menghidangkan data lapuk atau separa. Setiap panggilan carian mempunyai had masa singkat supaya indeks yang tergantung tidak boleh memberhentikan alat. Prinsipnya: merosot dengan lantang, jangan sesekali secara senyap memulangkan jawapan yang salah.
Bagaimana Data Masuk

Korpus disuap oleh saluran penyaring, kesemuanya berjalan terhadap sumber percuma dan awam.
- Kertas datang daripada API Atom arXiv. Penuai menarik keseluruhan korpus
q-finke dalam JSONL, langkah binaan menyatukannya dengan set terkurasi (nyahduplikat mengikut id arXiv, asal usul digabungkan), dan hasilnya diserahkan kepada pengindeks. Penuai juga mempunyai mod "perkaya id tertentu ini" untuk membenihi daripada senarai bacaan luaran. - Kod ialah perangkak repositori GitHub yang relevan dengan kuant, ditangkap dengan metadata yang penting untuk penapisan — bintang, fork, bahasa utama, topik, dan kiraan fail Python serta notebook.
- Artikel disaring daripada blog dan pengagregat kuant, dengan yang lebih baik dicerminkan secara setempat supaya ia bertahan daripada reput pautan. Laman utama menandakan artikel mana yang telah kami simpan salinan setempatnya.
- Strategi ialah skrip Pine TradingView dengan metadata mereka — pengarang, kategori, tag, suka, dan sama ada penyenaraian termasuk kod, carta, atau analisis.
- Video mengindeks saluran YouTube yang relevan supaya ceramah dan panduan langkah boleh ditemui bersama bahan bertulis.
Pengindeksan semula dalam pengeluaran berjalan melalui terowong SSH ke Meilisearch yang diikat localhost, kerana enjin itu tidak pernah didedahkan kepada internet. Keseluruhan gelung — tuai, bina, lapis kerah, indeks — direka untuk dijalankan semula secara idempoten, yang merupakan apa yang dilakukan oleh cron harian.
Akses dan Pengehosan

researcher berjalan di Server 1 kami sebagai tindanan Docker Compose yang kecil: kontena Next.js di belakang Traefik dan kontena Meilisearch yang diikat kepada localhost. Aplikasi Next.js membaca set datanya di sebelah pelayan dan bertutur dengan Meilisearch melalui rangkaian dalaman.
Akses dikawal melalui auth.marketmaker.cc, perkhidmatan identiti bersama kami. Token ialah JWT RS256 yang disahkan terhadap JWKS perkhidmatan auth — setiap keputusan kebenaran menyemak tandatangan (dengan semakan pengeluar dan algoritma yang ketat, gagal tertutup jika titik akhir kunci tidak boleh dicapai), dan laluan nyahkod yang tidak disahkan digunakan hanya untuk UI kosmetik seperti memaparkan e-mel anda dalam bar navigasi. Perkhidmatan auth mengeluarkan peranan setiap perkhidmatan; pada researcher peranan admin mengawal kawasan pentadbir dalaman (di mana kami menjalankan dan memantau penyaring), dan laman utama awam tidak memerlukan token langsung. Ia ialah fabrik auth yang sama yang menghadap alat dalaman kami yang lain, jadi satu log masuk merentasi keseluruhan ekosistem.
Di Mana Ia Sesuai dalam Tindanan Marketmaker

researcher ialah infrastruktur, bukan destinasi. Tujuannya bukan laman web — tujuannya ialah kini kami mempunyai paparan yang boleh disoal bagi bidang ini yang dikongsi oleh kedua-dua manusia dan ejen.
Bagi kami sebagai manusia, ia ialah tempat dari mana banyak isi blog ini sendiri berasal. Apabila kami menyemak alat seperti VectorBT atau menganalisis rangka kerja seperti TradingAgents atau Fincept Terminal, titik permulaannya selalunya ialah carian merentasi researcher: kertas apa yang menjadi asas binaan ini, repo lain apa yang menyelesaikan masalah yang sama, siapa yang telah menulis tentangnya. Arkib itu ialah corong; catatan blog ialah apa yang gugur daripadanya.
Bagi ejen AI kami, ia ialah sesuatu yang lebih struktur. Substrat penyelidikan yang boleh dicapai melalui MCP bermakna ejen yang melakukan kerja strategi tidak perlu menyaring arXiv secara langsung, menyongket empat API yang berbeza, atau meneka apa yang ada di luar sana — ia memanggil search_papers, search_repos, search_pine terhadap korpus yang sudah bersatu, dinyahduplikat, dan diindeks. Itu ialah arah yang sama dengan alatan perintah-dan-operasi (cmdop) dan ejen kami: berikan ejen alat bertaip, baca-sahaja, berdokumentasi baik ke atas data sebenar, gagal dengan lantang apabila backend tidak tersedia, dan biarkan satu backend bersama menghidangkan UI manusia dan antara muka mesin daripada indeks yang serupa. Manusia melayari dan ejen menyoal — tetapi mereka melihat arkib yang sama, dan itulah keseluruhan ideanya.
Kesimpulan
researcher bermula sebagai penyelesaian untuk masalah kecil yang menjengkelkan — bahawa penyelidikan kuant bertaburan merentasi empat tempat yang tidak bercakap antara satu sama lain — dan bertukar menjadi sesuatu yang kami bergantung padanya setiap hari. Lebih kurang 51,000 dokumen merentasi kertas, kod, artikel, dan strategi, kesemuanya di belakang satu enjin carian teks penuh, kesemuanya boleh dicapai baik oleh manusia dengan pelayar mahupun oleh ejen dengan klien MCP. Ia dengan sengaja tidak menawan: carian teks penuh, bukan embeddings; satu sumber kebenaran tunggal, bukan cache yang pintar; alat yang melontar ralat jujur, bukan yang menutup gangguan.
Jika anda sedang membina ejen untuk penyelidikan perdagangan, pengajarannya merentasi melampaui korpus khusus kami: perkara berdaya ungkit tertinggi yang boleh anda berikan kepada ejen bukanlah model yang lebih besar tetapi paparan data yang bersih, bersatu, dan boleh disoal bagi data yang ia perlukan — didedahkan melalui indeks yang sama yang dipercayai manusia. Itulah researcher.
Pengarang
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.