researcher: İnsanlar ve Yapay Zeka Ajanları İçin Aranabilir Bir Kuant Araştırma Arşivi
Kuant araştırması her yerde ve hiçbir yerde. İhtiyacınız olan makale arXiv'de. Referans uygulama GitHub'da. Sezgi, birinin 2019'da yazdığı bir blog yazısında gömülü. Asıl giriş/çıkış mantığı ise TradingView'da 400 beğenisi olan ama hiçbir belgesi olmayan bir Pine scriptinde. Dört külliyat, dört arama kutusu, dört farklı kurallar bütünü, sıfır çapraz referans. Bir fikrin bir haftalık backtest'e değip değmeyeceğine karar vermeye çalışırken, asıl maliyet bu parçalanmışlıktır — okumak değil, bulmak.
Bu yüzden kendimizinkini kurduk. researcher.marketmaker.cc, kantitatif ticaret araştırmaları için derlenmiş bir arşiv ve arama motorudur. Normalde arXiv, GitHub, kuant blogları ve TradingView arasında dağınık halde bulunan materyalleri tek bir yerde toplar, hepsini tam metin arama için indeksler ve — en çok önem verdiğimiz kısım bu — tüm külliyatı bir Model Context Protocol (MCP) uç noktası ve herkese açık bir REST API aracılığıyla yapay zeka ajanlarına sunar. Bu, bir insanın klavyeyle gezinebileceği ve bir ajanın bir araç çağrısıyla sorgulayabileceği, tam olarak aynı indekslerle desteklenen bir araştırma altyapısıdır.
Bu yazı, içinde ne olduğunun, nasıl kurulduğunun ve yapay zeka ajan yığınımızdaki yerinin neden burası olduğunun bir turudur.
Külliyatta Ne Var

researcher, her biri kendi tam metin indeksine sahip dört ana veri kümesini birleştirir. Aşağıdaki sayılar 2026-06-12 tarihi itibarıyladır ve değişkenlik gösterir — arXiv işlem hattı günlük çalışır ve indeks kaynaktan yeniden oluşturulur, dolayısıyla sayılar büyür.
| Veri Kümesi | Kaynak | Belgeler | Ne Aradığınız |
|---|---|---|---|
| Makaleler | arXiv q-fin (1997–2026) | ~18.647 | başlık, özet, yazarlar (kategoriye göre filtrele) |
| Kod | GitHub depoları | ~12.957 | isim, açıklama, konular (dile, yıldıza göre filtrele) |
| Makaleler | Kuant blogları | ~4.633 | başlık, açıklama (kaynağa, tarihe göre filtrele) |
| Stratejiler | TradingView Pine scriptleri | ~15.180 | başlık, açıklama, etiketler (kategoriye göre filtrele) |
Bu, dört aranabilir indeks genelinde 51.000'in biraz üzerinde belge eder. Makaleler indeksi en büyük tekil külliyat ve en çok emek verdiğimiz olanıdır: elle seçilmiş bir alt küme değil, 1997'ye kadar uzanan tam arXiv kantitatif finans akışının (q-fin.*) tamamıdır. Daha önce site yalnızca birkaç yüz seçilmiş makale yayınlıyordu; mevcut indeks, eksiksiz q-fin külliyatıdır ve üzerine derlenmiş köken bilgisi eklenmiştir; böylece belirli bir kuant blogu tarafından da referans verilen bir makale o atfı taşır.
Dört arama indeksinin ötesinde, insanlara yönelik site daha fazlasını katmanlar: kendi yazdığımız araştırma notları ve günlük özetler, bir kuant siteleri ve yazarları dizini, ilgili YouTube kanallarını indeksleyen bir videolar bölümü ve bir fonlar dizini. Dört indeks aranabilir omurgadır; geri kalan her şey onun etrafındaki derlemedir.
Tek Doğru Kaynağı

Erkenden bizi sessizce bozan — ve şimdi titizlikle önlem aldığımız — şey sayı uyumsuzluğuydu. Ana sayfa bir sayı söylüyor, arama başka bir sayı döndürüyor, API ise bir üçüncüsünü. Bir noktada ön sayfa 719 makale duyururken arama 18.000'in üzerinde sonuç döndürüyordu. Bir araştırma aracına olan güveni, kendi büyüklüğü konusunda kendisiyle anlaşamayan bir külliyattan daha fazla aşındıran hiçbir şey yoktur.
Çözüm, her yüzeyin tek bir yerden okumasını sağlamaktı. Makaleler külliyatı için doğru kaynağı Meilisearch'tür. Uygulama paketinde makalelerin ikinci bir kopyası yaşamaz; ana sayfadaki sayı, /papers üzerindeki sayı, API'nin döndürdüğü sayı ve gerçekte aradığınız belgelerin hepsi aynı indekstir. Külliyatın kendisi, seçilmiş makale setini alan, onu arXiv akışıyla (arXiv id ile yinelenenler kaldırılarak, köken dizileri birleştirilerek) birleştiren, en yeniden eskiye sıralayan ve indeksleyicinin tükettiği tek bir ~25 MB'lık dosya yazan bir alım adımıyla çevrimdışı olarak oluşturulur. Bu dosya kabaca 15.000–18.000 kayıttır ve bilinçli olarak istemciye dahil edilmemiştir — o boyutta bir külliyatın bir tarayıcıya gönderilmesinin hiçbir mantığı yoktur.
Diğer üç veri kümesi (kod, makaleler, Pine scriptleri) sunucu tarafında JSON dosyalarından okunur ve aynı dosyalardan indekslenir; Meili'yi-kaynak-yapma geçişi planlanan bir sonraki adımdır. Genel kural şudur: veriyi sunucuda oku, çok megabaytlık bir veri kümesini asla istemci paketine import etme ve indeks ile görüntülenen sayıların aynı kaynaktan gelmesini sağla. Senkronizasyon kaybı yapısal olarak imkânsız hale gelir.
Arama: Tam Metin, Yazım Hatasına Toleranslı, Çok Yönlü

Arama motoru Meilisearch'tür; uygulamayla aynı sunucuda çalışır ve localhost'a bağlıdır — herkese açık olarak ifşa edilmez. Onu bir vektör deposu olarak değil, tam metin arama motoru olarak kullanırız. Embedding yok, anlamsal benzerlik sihri yok. "Bana bu kavramdan bahseden makaleleri ve depoları bul" için, başlıklar, özetler, açıklamalar, yazarlar ve etiketler üzerinde yazım hatasına toleranslı sözlüksel arama, bir embedding indeksinin olamayacağı şekilde hızlı, öngörülebilir ve hata ayıklanabilirdir. Her indeks, eksiksiz orijinal belgeyi artı eklenmiş bir _id saklar; böylece bir arama, uygulamanın doğrudan işleyebileceği tam olarak doldurulmuş kayıtlar döndürür — isabetleri yeniden doldurmak için ikinci bir getirme yapmaya gerek kalmaz.
Pratikte önem taşıyan birkaç ayrıntı:
-
Yazım hatası toleransı ve alaka sıralaması Meilisearch'ten bedava gelir.
momentmaraması yine de momentum makalelerini bulur; sonuçlar yalnızca filtrelenmez, sıralanır. -
Çok yönlü filtreleme. Makaleler arXiv
category(q-fin.PM,q-fin.TR, …) ile, depolarlanguagevestarsile, makalelersourcevedateile, Pine scriptlericategoryile filtrelenir./paperssayfası kategori açılır menüsünü indeksin canlı facet dağılımından oluşturur; böylece filtre seçenekleri her zaman külliyatta gerçekte ne olduğunu yansıtır. -
camelCase ayırma. Meilisearch boşluk ve noktalama işaretlerinde belirteçlere ayırır ama camelCase'de ayırmaz. Bu, tam anlamıyla
TradingAgentsadlı bir deponun tek bir belirteç olacağı ve doğal "trading agents" sorgusuyla erişilemeyeceği anlamına gelir. İndeksleme sırasında birname_splitalanı türetiriz —TradingAgents→TradingAgents Trading Agents,ai-hedge-fund→ai-hedge-fund ai hedge fund— ve bunu aranabilir özniteliklere ekleriz. Orijinal belirteç ilk sırada tutulur, böylece tam isim eşleşmeleri yine en üst sırada yer alır ve türetilen alan asla istemcilere döndürülmez. Bu, amiral gemisi depoyu bulmakla bulamamak arasındaki farkı yaratan küçük bir şeydir. -
Gezinme = en yeniden eskiye. Boş bir sorgu bir hata değildir; gezinme yoludur.
/papersüzerinde boş bir sorgupublishedalanına göre azalan sırada sıralar; böylece sayfa, en güncel q-fin araştırmalarının ters kronolojik bir akışı olarak da işlev görür. -
Toplamlar için bir yan indeks. Bazı sayıları Meilisearch sorgu zamanında ucuza hesaplayamaz — tüm depolardaki toplam yıldız sayısı, toplam Python dosyası, toplam not defteri. Her sayfa yüklemesinde tüm külliyatı taramak yerine, indeksleyici bu toplamları bir kez, indeksleme zamanında, her veri kümesi için bir belge tutan küçük bir
researcher_metaindeksine yazar.statsuç noktası bunları doğrudan geri okur. Yalnızca yeniden indekslemede değişen sayılar yalnızca yeniden indekslemede hesaplanır. -
Gerçekten kullanılabilir bir sayfalama tavanı. Makaleler indeksi Meilisearch'in
maxTotalHitsdeğerini 50.000'e yükseltir vepublishedalanını sıralanabilir olarak işaretler; böylece ~18 bin belgelik bir külliyatın derinliklerine kadar sayfalama yapabilir ve sadece ilk alaka sayfasını değil, tamamını en yeniden eskiye sıralayabilirsiniz.
İndeksleyici bağımsızdır (idempotent): her indeksi yoksa oluşturur, ayarları yeniden uygular ve her belgeyi _id ile anahtarlanmış 2.000'lik partiler halinde upsert eder (makaleler kendilerininkini arXiv id'sinden, depolar ve makaleler URL'nin bir hash'inden türetir). Tüm indeks kaynak dosyadan yeniden oluşturulabildiği için yönetilecek bir yedek yoktur — geri alma yalnızca bir yeniden indekslemedir. Onu yeniden çalıştırmak yapısı gereği güvenlidir.
Ajanlara Erişilebilir: MCP ve Herkese Açık Bir API

İşte researcher'ı yaptığımız geri kalan her şeye bağlayan kısım burası. Külliyat sadece bir arama kutusu olan bir web sitesi değildir — bir yapay zeka ajanının çağırabileceği bir araçtır.
MCP uç noktası
researcher, Streamable HTTP üzerinden /api/mcp adresinde bir Model Context Protocol sunucusu sunar. MCP uyumlu herhangi bir ajan — Claude, kendi yığınımızdaki özel bir ajan, protokolü konuşan herhangi bir şey — bağlanabilir ve canlı külliyat üzerinde salt okunur araçlar çağırabilir. Veri kümesine göre gruplandırılmış, tutarlı bir search / get / list biçimini izleyen 13 araç vardır:
| Grup | Araçlar |
|---|---|
| Makaleler | search_papers, get_paper, list_papers |
| Kod | search_repos, get_repo, list_repos |
| Makaleler | search_articles, get_article, list_articles_by_site |
| Stratejiler | search_pine, get_pine_script, list_pine |
| Bilgi | knowledge_query (zarif bir taslak, gelecekteki bir grafik katmanı için ayrılmış) |
Araç şemaları bir insanın değil, bir ajanın yararına yazılmıştır. Örneğin search_papers, kendisini başlık, özet ve yazarlar üzerinde isteğe bağlı bir category filtresi (ör. q-fin.PM) ve bir sonuç limitiyle yazım hatasına toleranslı, alaka sıralamalı arama olarak tanıtır — ve işleri daralttıktan sonra tam özet için ajana get_paper çağırmasını söyler. search, bir ajanın birçok sonucu ucuza tarayabilmesi için derli toplu, parçacık boyutunda isabetler döndürür; get, bir tanesini seçtikten sonra tam kaydı döndürür. Bu iki adımlı biçim, bir ajanın bağlam penceresinin ihtiyaç duymadığı özetlerde boğulmasını önler.
Somut olarak, diyelim ki optimal yürütmeyi araştıran bir ajan, sıralanmış bir başlık ve parçacık kısa listesi almak için search_papers("optimal execution", category: "q-fin.TR") çalıştırabilir, alaka düzeyine göre sıralanmış ve yıldıza göre filtrelenebilir uygulamaları bulmak için search_repos("optimal execution", language: "Python") ve aynı fikrin yayınlanmış bir TradingView stratejisi olarak nasıl göründüğünü görmek için search_pine("VWAP") çalıştırabilir — bir saat önce üç farklı web sitesi olan üç külliyata karşı üç araç çağrısı. Sonra tek bir get_paper, umut verici görünen makale için tam özeti çeker. Ajan asla protokolden çıkmaz ve her sonuç, yeniden getirmek zorunda olduğu bir arama sonucu taslağı değil, gerçek, doldurulmuş bir kayıttır.
Herkese açık REST API
MCP olmayan tüketiciler için /api/v1/ altında paralel bir REST yüzeyi vardır: papers, repos, articles, pine ve bir stats toplamı. q, category, limit ve offset parametreleriyle düz JSON konuşur, her sayfanın yanında gerçek toplamı ve facet dağılımını döndürür ve CORS etkinleştirilmiştir. GET /api/v1/papers?q=optimal+execution&category=q-fin.TR her yerden tek satırlık bir işlemdir. Aynı uç nokta, sitenin kendi /papers sayfasını da çalıştırır — tarayıcı sadece bir başka API istemcisidir.
Dürüstçe başarısız olmak
Yalan söyleyen bir arama arka ucu, çökmüş olandan daha kötüdür. Meilisearch'e ulaşılamadığında ne olacağı konusunda bilinçli bir duruş benimsedik. Veri katmanı, sessizce boş sonuçlar döndürmek yerine başarısızlık durumunda istisna fırlatır — ve bununla nasıl başa çıkılacağına çağıranlar karar verir. Hâlâ bellek içinde bir kopya tutan veri kümeleri için araçlar, o kopya üzerinde düz bir .filter() ile yedeğe geçer, böylece site ayakta kalır. Meilisearch'in doğru kaynağı olduğu ve ikinci bir kopyanın bulunmadığı makaleler için, araçlar ve API bayat veya kısmi veri sunmak yerine açık bir hata döndürür (API 503 yanıtı verir). Her arama çağrısının kısa bir zaman aşımı vardır, böylece takılan bir indeks bir aracı durdurmaz. İlke şudur: gürültülü bir şekilde bozul, asla sessizce yanlış cevaplar verme.
Veriler İçeri Nasıl Giriyor

Külliyat, hepsi ücretsiz, herkese açık kaynaklara karşı çalışan bir scraper işlem hattıyla beslenir.
- Makaleler arXiv Atom API'sinden gelir. Bir hasatçı tüm
q-finkülliyatını JSONL'e çeker, bir derleme adımı onu seçilmiş setle birleştirir (arXiv id ile yinelenenler kaldırılır, köken birleştirilir) ve sonuç indeksleyiciye teslim edilir. Hasatçının ayrıca, harici okuma listelerinden tohumlama için bir "bu belirli id'leri zenginleştir" modu da vardır. - Kod, kuant ile ilgili GitHub depolarının bir taramasıdır; filtreleme için önemli olan meta verilerle yakalanır — yıldızlar, fork'lar, birincil dil, konular ve Python dosyaları ile not defterlerinin sayıları.
- Makaleler kuant bloglarından ve toplayıcılardan kazınır; daha iyi olanları, bağlantı çürümesine karşı dayanmaları için yerel olarak yansıtılır. Ana sayfa, hangi makalelerin yerel bir kopyasını kaydettiğimizi işaretler.
- Stratejiler, meta verileriyle birlikte TradingView Pine scriptleridir — yazar, kategori, etiketler, beğeniler ve listelemenin kod, grafik veya analiz içerip içermediği.
- Videolar, konuşmaların ve adım adım anlatımların yazılı materyalin yanında keşfedilebilir olması için ilgili YouTube kanallarını indeksler.
Üretimde yeniden indeksleme, localhost'a bağlı Meilisearch'e bir SSH tüneli üzerinden çalışır, çünkü motor asla internete ifşa edilmez. Tüm döngü — hasat, derleme, dağıtım, indeks — bağımsız olarak yeniden çalıştırılabilecek şekilde tasarlanmıştır ki günlük cron'un yaptığı tam olarak budur.
Erişim ve Barındırma

researcher, Server 1'imizde küçük bir Docker Compose yığını olarak çalışır: Traefik arkasında bir Next.js konteyneri ve localhost'a bağlı bir Meilisearch konteyneri. Next.js uygulaması veri kümelerini sunucu tarafında okur ve dahili ağ üzerinden Meilisearch ile konuşur.
Erişim, paylaşılan kimlik hizmetimiz olan auth.marketmaker.cc üzerinden geçişlidir. Token'lar, auth hizmetinin JWKS'sine karşı doğrulanan RS256 JWT'leridir — her yetkilendirme kararı imzayı kontrol eder (katı issuer ve algoritma kontrolleriyle, anahtar uç noktasına ulaşılamıyorsa kapalı olarak başarısız olur) ve doğrulanmamış kod çözme yolu yalnızca gezinme çubuğunda e-postanızı gösterme gibi kozmetik UI için kullanılır. Auth hizmeti hizmet başına roller verir; researcher'da admin rolü dahili yönetici alanını (scraper'ları çalıştırıp izlediğimiz yer) geçişli kılar ve herkese açık ana sayfa hiçbir token gerektirmez. Diğer dahili araçlarımızın önünde duran aynı kimlik doğrulama dokusudur, bu yüzden tek bir oturum açma ekosistem genelinde geçerlidir.
Marketmaker Yığınındaki Yeri

researcher bir varış noktası değil, bir altyapıdır. Mesele web sitesi değil — artık hem insanların hem de ajanların paylaştığı, alanın sorgulanabilir bir görünümüne sahip olmamızdır.
Biz insanlar için, bu bloğun çoğunun geldiği yerdir. VectorBT gibi bir aracı incelediğimizde ya da TradingAgents veya Fincept Terminal gibi bir çerçeveyi mercek altına aldığımızda, başlangıç noktası genellikle researcher genelinde bir aramadır: bu hangi makaleler üzerine inşa ediliyor, hangi diğer depolar aynı problemi çözüyor, kim bunun hakkında yazmış. Arşiv hunidir; blog yazıları ise ondan dökülenlerdir.
Yapay zeka ajanlarımız için ise daha yapısal bir şeydir. MCP üzerinden erişilebilen bir araştırma altyapısı, strateji çalışması yapan bir ajanın arXiv'i canlı kazımak, dört farklı API'yi idare etmek veya orada ne olduğunu tahmin etmek zorunda olmaması demektir — zaten birleştirilmiş, yinelenenleri kaldırılmış ve indekslenmiş bir külliyata karşı search_papers, search_repos, search_pine çağırır. Bu, komut-ve-işlet (cmdop) ve ajan araçlarımızla aynı yöndedir: ajanlara gerçek veriler üzerinde tipli, salt okunur, iyi belgelenmiş araçlar ver, arka uç kullanılamadığında gürültülü bir şekilde başarısız ol ve tek bir paylaşılan arka ucun, insan UI'sine ve makine arayüzüne özdeş indekslerden hizmet vermesini sağla. İnsan gezinir ve ajan sorgular — ama her ikisi de aynı arşive bakmaktadır ve bütün mesele de budur.
Sonuç
researcher, küçük, can sıkıcı bir problemin — kuant araştırmasının birbiriyle konuşmayan dört yere dağılmış olması — çözümü olarak başladı ve günlük olarak dayandığımız bir şeye dönüştü. Makaleler, kod, makaleler ve stratejiler genelinde kabaca 51.000 belge, hepsi tek bir tam metin arama motorunun arkasında, hepsi hem tarayıcısı olan bir insan hem de MCP istemcisi olan bir ajan tarafından erişilebilir. Bilinçli olarak gösterişsizdir: embedding değil, tam metin arama; akıllı bir önbellek değil, tek bir doğru kaynağı; çökmelerin üzerini örten değil, dürüst hatalar fırlatan araçlar.
Ticaret araştırması için ajanlar kuruyorsanız, ders bizim özel külliyatımızın ötesine genelleşir: bir ajana verebileceğiniz en yüksek kaldıraçlı şey daha büyük bir model değil, ihtiyaç duyduğu verilerin temiz, birleşik, sorgulanabilir bir görünümüdür — insanların güvendiği aynı indeksler aracılığıyla sunulan. researcher işte budur.
Yazarlar
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.