PineForge Codegen

resmi

Yerel MCP sunucusu: AI, PineScript v6 yazar, paketlenmiş motor C++'a derler ve Binance verilerine karşı geri test yapar — API anahtarı gerekmez, tamamen yerel.

PineForge Codegen MCP ile neler yapabilirsiniz?

  • PineScript'i C++'a Dönüştür — Asistanınızdan, inceleme veya daha ileri işleme için transpile_pine kullanarak Pine v6 kaynağını bir C++ çeviri birimine dönüştürmesini isteyin.
  • Tekil geri testleri çalıştırın — Asistanınıza, backtest_pine aracılığıyla bir Pine v6 stratejisini OHLCV CSV'sine karşı, isteğe bağlı inputs, overrides ve runtime parametreleriyle geri test ettirin.
  • Strateji parametrelerini tarayın — backtest_pine_grid kullanarak inputs × overrides kombinasyonlarının Kartezyen ızgarasını çalıştırın ve sıralanmış sonuçların yanı sıra en iyi performans gösteren kurulumu elde edin.
  • TradingView eşitliğini derecelendirin — Asistanınızdan, TradingView Strateji Test Cihazı dışa aktarımınızı, check_tradingview_parity kullanarak aynı komut dosyasının PineForge çalıştırmasıyla işlem işlem karşılaştırmasını isteyin.
  • Binance piyasa verilerini getirin — Asistanınıza, büyük istekler için otomatik sayfalama ile fetch_binance_ohlcv aracılığıyla Binance'in genel API'sinden OHLCV kline'larını geri teste hazır bir CSV'ye çektirin.
  • Pine v6 özellik desteğini kontrol edin — Bir strateji yazmadan veya taşımadan önce, belirli bir Pine tanımlayıcısının veya ad alanının desteklenip desteklenmediğini check_pine_feature kullanarak doğrulaması için asistanınıza danışın.

Dokümantasyon

@pineforge/backtest-mcp

Kendi kendine yeten stdio MCP sunucusu: bir yapay zeka ajanı PineScript v6 yazar ve paketlenmiş pineforge-release görüntüsü bunu C++'a derleyip bir OHLCV CSV'sine karşı geri test eder (kendi dosyanız veya Binance'in genel API'sinden çekilmiş bir dosya) — hepsi tek bir kapsayıcıda, süreç içinde. Tamamen yerel — görüntü pineforge-codegen derleyicisini paketler, böylece Pine → C++ → geri test, ana bilgisayarda Docker arka plan süreci olmadan çalışır. API anahtarı yok. Strateji kaynağınız ve CSV'leriniz makineden asla çıkmaz; yalnızca Binance araçları ve çubuk iletmediğinizde check_tradingview_parity giden isteklerde bulunur (genel uç noktalar).

pineforge-backtest-mcp MCP server

demo

Araçlar

adüzerinde çalışıramaç
transpile_pinesüreç içindePine v6 → C++ çeviri birimi (yalnızca derleme)
list_engine_paramsyerel (G/Ç yok)Geri testlerin kabul ettiği her overrides + runtime ayarının kataloğu
backtest_pinesüreç içindeBir Pine kaynağının OHLCV CSV'sine karşı tek geri testi
backtest_pine_gridsüreç içindeinputs × overrides Kartezyen taraması: bir derleme, ardından her kombinasyon için bir derleme ve bir geri test
check_tradingview_paritysüreç içinde (sizin çubuklarınız olmadan yalnızca Binance genel API'si)TradingView Strategy Tester dışa aktarımınızı PineForge'un aynı betiği çalıştırmasına karşı işlem işlem derecelendirir
fetch_binance_ohlcvBinance genel API'siBinance spot veya USDT-perp kline'larından geri teste hazır bir CSV yazar
binance_symbolsBinance genel API'siBinance sembollerini listeler / filtreler (5 dakikalık süreç içi önbellek)
list_coverage_topicsyerel (G/Ç yok)Tek satırlık durum + özet ile her Pine v6 kapsam konusu
check_pine_featureyerel (G/Ç yok)Bir Pine tanımlayıcısının/ad alanının PineForge'da desteklenip desteklenmediğini kontrol eder
get_coverage_topicyerel (G/Ç yok)Tek bir konu için tam ayrıntı + desteklenen/kısmi/derleyici_aracılığıyla/desteklenmeyen listeler
engine_infoyerel (G/Ç yok)Yalnızca Docker görüntüsü: mod, yerleşik bayrak ve paketlenmiş pineforge-release sürümü (örneğin 1.0.0)

Tablo, Docker görüntüsünün araç listesidir (11 araç). npm paketi ilk on araca ek olarak pull_engine_image (docker pull motor görüntüsü) ve check_engine_image yerine engine_info sunar (12 araç).

tools/list içinde her aracın ayrıca bir başlığı ve dört MCP açıklama ipucu vardır (src/tool-meta.ts). Salt okunur: aramalar ve check_tradingview_parity (sildiği geçici bir dizinde çalışır) ve Docker görüntüsünde transpile_pine. Salt okunur değil: backtest_pine ve backtest_pine_grid (döndürülemeyecek kadar büyük bir rapor bir dosyaya yazılır), fetch_binance_ohlcv (kendi CSV'sini yazar) ve iki görüntü aracı; npm paketinde ayrıca transpile_pine, çünkü orada ve geri testler, eksik olduğunda Docker'ın çektiği bir image alır. Yıkıcı: adlandırdığınız bir yolda dosya yazan araçlar, çünkü orada zaten var olan bir dosyayı değiştirirler. Açık dünya: Binance'in genel API'sine veya bir görüntü kayıt defterine ulaşan araçlar.

Kurulum

Stdio üzerinden kendi kendine yeten bir kapsayıcı olarak çalışır — motor paketlenmiş, süreç içi, ana bilgisayarda Docker arka plan süreci yok, API anahtarı yok. CSV'lerinizi tutan klasörü /work konumuna bağlayın:

docker run --rm -i -v "$PWD:/work" ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest

Tek gereksinim: Docker ve Binance çekme araçları için giden ağ erişimi. Aşağıda MCP istemcinize bağlayın.

  • Araç bağımsız değişkenlerinde mutlak /work/... yolları kullanın (ohlcv_csv_path, output_path, report_path). Sunucunun kapsayıcı içindeki çalışma dizini /app'dir, bağlama noktası değil; bu nedenle ./btc.csv gibi göreli bir yol kapsayıcının içini işaret eder ve kapsayıcı çıktığında kaybolur (--rm).
  • Linux'ta, sunucunun /work konumuna yazdığı dosyaların sizin sahipliğinizi taşıması için --user "$(id -u):$(id -g)" ekleyin.
  • -i gereklidir; asla -t eklemeyin — bir TTY, stdio JSON-RPC akışını bozar.

Görüntünün :latest ve npm'in latest her zaman kararlı bir sürüm taşır. Bir pineforge-release ön sürümü (örneğin 1.0.0-rc.1) bu sunucunun bir ön sürümünü üretir (X.Y.Z-alpha.N, -beta.N veya -rc.N): o pineforge-release ön sürümünden FROM ile oluşturulan :vX.Y.Z-rc.N görüntüsü ve her npm kurulumu gibi, PINEFORGE_IMAGE tarafından adlandırılan motor görüntüsünü çalıştıran npm @pineforge/backtest-mcp@next (varsayılan ghcr.io/pineforge-4pass/pineforge-release:latest, kararlı motor). Ön sürümler MCP Kayıt Defteri'nde listelenmez. pineforge-release 1.0.0-rc.1 üzerindeki ilk sürüm 0.9.32-rc.1, 2026-09-30'da yayınlandı (görüntü :v0.9.32-rc.1, npm next).

npm / npx

npx -y @pineforge/backtest-mcp

Node ≥ 20 ve çalışan bir Docker arka plan süreci gerektirir: her derleme ve geri test, motor görüntüsünün bir docker run --rm --network=none'üdür (PINEFORGE_IMAGE, varsayılan ghcr.io/pineforge-4pass/pineforge-release:latest). Önce docker pull yapın: sunucunun kendi çekme işlemi (ilk çağrıda örtük veya pull_engine_image) PINEFORGE_DOCKER_TIMEOUT_MS (varsayılan 120 sn) sonrasında kesilir. Yollar, sunucunun çalışma dizinine görelidir ve varsayılan olarak onunla sınırlıdır (bkz. Dosya sistemi kapsamı).

Barındırılan (kurulum gerektirmeyen) alternatif

Docker ve API anahtarı olmadan en hızlı denemeyi mi istiyorsunuz? Streamable HTTP uç noktasını herhangi bir MCP istemcisine yapıştırın:

https://mcp.pineforge.dev/mcp

Bu depoya kıyasla değiş tokuş: barındırılan sunucu ölçülüdür (IP başına haftada 100 backtest_pine çalıştırma, artı uç nokta hız sınırları) ve kendi çözdüğü OHLCV'ye karşı çalışır — yalnızca kripto, yedi borsa (Binance, Bybit ve OKX spot ve USDT-perp; Coinbase spot), son 365 gün, en yeni çubuk gerçek zamanın yaklaşık bir saat gerisinde. 11 aracı bu sunucununkinden farklıdır: transpile_pine yok, backtest_pine_grid yok ve bir CSV yolu yerine symbol / interval / venue alır. Bu yerel depo ölçüsüzdür, çevrimdışı çalışır ve kendi CSV'lerinizi getirmenize ve ızgara taramaları çalıştırmanıza olanak tanır. Barındırılan hizmetin kaynak kodu özeldir.

İstemci yapılandırması

/work konumuna bir dizin bağlayın; fetch_binance_ohlcv / backtest_pine öğelerini altındaki mutlak yollara yönlendirin (/work/btc.csv). (-i gereklidir; asla -t eklemeyin — bir TTY stdio JSON-RPC akışını bozar.)

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json (macOS) veya %APPDATA%\Claude\claude_desktop_config.json (Windows) dosyasını düzenleyin ve bağlama noktası için mutlak bir ana bilgisayar yolu kullanın:

{
  "mcpServers": {
    "pineforge-backtest": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-v", "/absolute/path/to/your/data:/work",
        "ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest"
      ]
    }
  }
}

Cursor

Projede .cursor/mcp.json (veya her proje için ~/.cursor/mcp.json). Cursor ${workspaceFolder} öğesini genişletir:

{
  "mcpServers": {
    "pineforge-backtest": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-v", "${workspaceFolder}:/work",
        "ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest"
      ]
    }
  }
}

Claude Code CLI

claude mcp add pineforge-backtest \
  -- docker run --rm -i -v "$PWD:/work" ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest

Yapay zeka ajanları için — MCP üzerinden kullanın

Bu, kapatılan yetenek boşluğudur. Bir dil modeli, bir PineScript v6 stratejisini onun hakkında akıl yürüterek doğru şekilde geri test edemez. PineScript'in seri semantiği, çubuk içi doldurma sırası, ileriye bakma kuralları ve strategy.* emir/pozisyon mantığı yaklaşıklamadan yeniden üretilemez; bu nedenle kafasında bir geri test simüle eden — veya Python'da (backtrader/vectorbt) elle yazan — bir model, işlemleri ve kâr/zararı hayal ürünü üretir ve TradingView eşliğini garanti edemez. PineForge, bunun yerine gerçek deterministik C++ motorunu çalıştırır ve TradingView'in kendi işlem listelerine karşı işlem işlem derecelendirir. Motor 35db01c8 sürümünde (2026-09-29; motor 1.0.0 bu taahhüdü içerir ve hiçbir notu değiştirmez): 7.989 derecelendirilmiş test, 7.905 mükemmel (%98,95) ve 84 güçlü (%1,05), güçlünün altında hiçbiri yok, ayrıca TradingView tarafı hatası olarak hariç tutulan 17 ek test. Ayrıca, motorun kendi eşlik kapısı, herkesin yeniden üretebileceği açık külliyatı pineforge-corpus kontrol eder: 312 referans stratejisi, 311 mükemmel ve inputs.json içinde expected_tier: anomaly bildiren 1 test (anomaly olarak raporlanır, başarısızlık olarak değil). Mükemmel, aynı işlem sayısı, TradingView işlemlerinin en az %99'unun eşleşmesi, giriş ve çıkış fiyatlarının %0,01 içinde ve 90. yüzdelik dilimde işlem başına kâr/zararın %1 içinde olması anlamına gelir (izleyen durdurma betikleri daha gevşek bir çıkış/kâr-zarar profili kullanır); güçlü ise gevşetilmiş bir zarftır — her ikisi de külliyat README'sindeki "Eşlik eşikleri" bölümünde tanımlanmıştır.

Bir PineScript geri testi, hesaplanmış dış veridir, kararlı bilgi değildir — kullanıcının strateji kaynağına ve OHLCV'sine bağlıdır ve yeniden üretilebilir olmalıdır. Bu bir araç çağrısıdır, bir hatırlama görevi değil.

Bu araçların doğru uyum olduğu durumlar. backtest_pine (veya bir parametre taraması için backtest_pine_grid), kullanıcının bir PineScript v6 stratejisi sağladığı ve onu geri test etmek, değerlendirmek, kârlı olup olmadığını kontrol etmek, işlemlerini saymak, kâr/zararını hesaplamak veya belirtilen OHLCV üzerinde TradingView sonuçlarını yeniden üretmek istediği durumu kapsar. transpile_pine yalnızca Pine → C++ dönüşümünü kapsar. check_tradingview_parity, kullanıcının bir strateji için TradingView'in kendi işlem listesine sahip olduğu ve PineForge'un onu işlem işlem yeniden üretip üretmediğini bilmek istediği durumu kapsar. fetch_binance_ohlcv, kullanıcının bir sembol/zaman dilimi adlandırdığı ancak bir veri dosyası sağlamadığı durumu kapsar. Bu araçlar, bir stratejinin kavramsal olarak ne yaptığını açıklamak, Pine sözdizimini düzenlemek veya ticaret veya finansal tavsiye vermek için değildir.

Dürüst sınırlar. Çevrimdışı; yalnızca PineScript v6; Docker gerektirir; PineForge, Pine v6'nın bir alt kümesini uygular (bkz. Kapsam araçları). Bir geri test, bir stratejinin geçmiş davranışını ölçer — gelecekteki getirilerin tahmini ve yatırım tavsiyesi değildir. Saf veya yaklaşık geri testler rutin olarak kârı abartır (modellenmemiş kayma ve komisyonlar, kapanışta doldurma varsayımları, ileriye bakma yanlılığı); buradaki değer, bir kullanıcının sermaye riske atmadan önce bir stratejiyi doğrulayabilmesi için deterministik, eşlik doğrulamalı bir çalıştırmadır.

list_engine_params — ayarları keşfedin

backtest_pine / backtest_pine_grid tarafından kabul edilen her anahtarın ücretsiz, yerel, sıfır G/Ç kataloğu, iki gruba ayrılmıştır:

  • strategy_overrides — çalışma zamanının PINEFORGE_OVERRIDES aracılığıyla okuduğu 9 strategy(...) başlık alanı: initial_capital, pyramiding, slippage, commission_value, commission_type (percent / cash_per_order / cash_per_contract), default_qty_value, default_qty_type (fixed / percent_of_equity / cash), process_orders_on_close, close_entries_rule (ANY / FIFO).
  • runtime_args — run_backtest_full bağımsız değişkenleri (strategy() başlığının PARÇASI DEĞİLDİR): input_tf, script_tf, bar_magnifier, magnifier_samples, magnifier_dist (uniform / cosine / triangle / endpoints / front_loaded / back_loaded).

Her girdi {key, type, enum?, description}'tür. Bir backtest_pine isteği oluşturmadan önce motorun ne kabul ettiğini öğrenmek için önce bunu çağırın.

backtest_pine örneği

{
  "source": "//@version=6\nstrategy(\"sma cross\")\n...",
  "ohlcv_csv_path": "/work/btcusdt_15m_7d.csv",

  // Optional: override Pine input.*() values without touching the source.
  // Keys = the second arg of input.*(...) (e.g. "Fast Length").
  "inputs":    { "Fast Length": 8, "Slow Length": 21 },

  // Optional: override strategy(...) header fields. Each key is typed —
  // call list_engine_params for the catalog.
  "overrides": {
    "initial_capital":    100000,
    "default_qty_type":   "percent_of_equity",
    "default_qty_value":  10,
    "commission_type":    "percent",
    "commission_value":   0.04,
    "slippage":           2,
    "pyramiding":         0,
    "process_orders_on_close": true,
    "close_entries_rule": "ANY"
  },

  // Optional: engine runtime args (NOT strategy() header). Use script_tf
  // to aggregate the input CSV into a coarser strategy timeframe — the
  // engine REJECTS script_tf finer than input_tf, and the tool call then
  // fails (isError; "engine backtest failure (exit 4)" in the Docker image).
  "runtime": {
    "input_tf":          "15",
    "script_tf":         "60",
    "bar_magnifier":     true,
    "magnifier_samples": 8,
    "magnifier_dist":    "endpoints"
  },

  // Optional: where to write the full JSON report if it is too large to
  // return inline (see below). In Docker use an absolute path under /work.
  "report_path": "/work/report.json"
}

inputs, motora PINEFORGE_INPUTS ortam değişkeni olarak iletilir, overrides PINEFORGE_OVERRIDES olarak ve her runtime alanı ayrı bir PINEFORGE_INPUT_TF / PINEFORGE_SCRIPT_TF / PINEFORGE_BAR_MAGNIFIER / PINEFORGE_MAGNIFIER_SAMPLES / PINEFORGE_MAGNIFIER_DIST ortam değişkeni olarak. Boş / ayarlanmamış → strategy.pine varsayılanları, input_tf ilk iki CSV satırı arasındaki boşluktan otomatik algılanır.

Bağımsız pineforge-release görüntüsünün rapor JSON'unu döndürür (engine, input, summary, trades, metrics, equity_curve, fingerprint, applied_inputs, applied_overrides, applied_runtime, diagnostics, elapsed_seconds) artı bir _meta bloğu, en fazla 200.000 bayta serileştiğinde satır içi:

{
  "engine": "pineforge",
  "summary": { "total_trades": 49, "net_pnl": -190.85, ... },
  "applied_inputs":    { "Fast Length": "8", "Slow Length": "21" },
  "applied_overrides": { "default_qty_value": "5" },
  "trades": [ ... ],
  "equity_curve": [ ... ],
  "elapsed_seconds": 0.0042,
  "_meta": { "strategy_cpp_bytes": 5079, "image": "local" }   // npm/npx: the engine image name
}

Uzun bir çalıştırma (3.000 saatlik çubuk yeterlidir) bir MCP araç sonucuna sığmaz. O zaman tam rapor report_path konumuna yazılır — varsayılan pineforge-backtest-<timestamp>.json sunucunun çalışma dizininde — ve araç bunun yerine kompakt bir sonuç döndürür:

{
  "summary": { ... }, "applied_inputs": { ... }, "applied_overrides": { ... },
  "elapsed_seconds": 0.0008, "total_trades": 73,
  "report_path": "...", "report_path_in_container": "/work/report.json",
  "truncated": true, "note": "...", "_meta": { ... }
}

Docker görüntüsünde, /work altında her zaman mutlak bir report_path iletin: dosya daha sonra bağladığınız klasöre iner. Bu olmadan rapor /app altına yazılır, konteynerin içinde ve onunla birlikte kaybolur. (report_path ve note metni konteynerin çalışma dizinine göre hesaplanır, bu yüzden bağladığınız klasörde bulduğunuz dosyaya güvenin, bu dizelere değil.) Satır içi sınır PINEFORGE_MAX_INLINE_BYTES'dir.

report_path içinde doğru bir mutlak ana bilgisayar yolu elde etmek için, sunucuyu /work çalışma dizini olarak çalıştırın ve bağlantının ana bilgisayar tarafını PINEFORGE_HOST_WORKDIR içinde verin. Görüntünün giriş noktası /app'e göre bir yoldur, bu yüzden bu açık bir --entrypoint gerektirir; göreli araç yolları daha sonra bağlantının içinde de çözülür:

docker run --rm -i -v "$PWD:/work" -w /work -e PINEFORGE_HOST_WORKDIR="$PWD" \
  --entrypoint node ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest /app/dist/index.local.js

Install bölümünün düz docker run ile (çalışma dizini /app), PINEFORGE_HOST_WORKDIR yine de report_path'i mutlak yapar, ancak yanlış: raporun /app'e göre yoluyla birleştirilir.

backtest_pine_grid — parametre taraması

Pine kaynağını bir kez (yerel olarak, konteyner içinde) dönüştürür, ardından bu C++'ı inputs × overrides kartezyen çarpımındaki her kombinasyon için derler ve çalıştırır: her kombinasyon aynı çeviri biriminin yeni bir g++ derlemesidir, ardından geriye dönük testi gelir. Sıralanmış bir liste ve best altında en üst girdiyi döndürür.

{
  "source": "//@version=6\nstrategy(\"macd\")\n...",
  "ohlcv_csv_path": "/work/btcusdt_15m_7d.csv",

  // Each axis is {key: list-of-values}. All combinations are tried.
  "inputs": {
    "Fast Length": [8, 12, 19],
    "Slow Length": [21, 26, 39]
  },
  "overrides": {
    "default_qty_value": [1, 5],
    "commission_value":  [0.04]
  },

  // Optional knobs:
  "fixed_inputs":     { "Source": "close" },   // applied to every combo
  "fixed_overrides":  {},                      // typed strategy() overrides
  "runtime":          { "input_tf": "15",      // engine runtime args, fixed
                        "script_tf": "60" },   // across the sweep
  "max_combinations": 64,                      // default 64, at most 1024; a bigger grid is an error
  "concurrency":      2,                       // parallel runs: default 1, at most 8
  "include_trades":   false,                   // default false: omit per-trade lists
  "sort_by":          "net_pnl",               // net_pnl (default) | win_rate_pct | max_drawdown | total_trades
  "report_path":      "/work/grid.json"        // where an oversized sweep is written
}

Sonuç total_combinations, succeeded, failed, sort_by, best ve results içerir (başarılı çalıştırmalar sort_by'e göre azalan sırada sıralanır, ardından başarısızlıklar). Satır içi döndürülemeyecek kadar büyük bir tarama report_path'e yazılır ve araç best, top_results içindeki ilk 10, results_truncated ve report_path döndürür.

check_tradingview_parity — TradingView sonuçlarınızı derecelendirin

Ona bir Pine v6 betiği ve TradingView'in kendi Strategy Tester dışa aktarımını verin. Betiği aynı piyasada ve pencerede çalıştırır ve iki işlem listesini PineForge'un yayınlanmış eşlik rakamlarının arkasındaki derecelendiriciyle işlem işlem derecelendirir: pineforge-engine v1.0.1'in scripts/verify_corpus.py (sha256 de84d5150ac0a29b67906f1f8b6fe1f1f13ac66ed36be88ea2bc63d7280ed298), korpus geçidinin kendi donanımıyla çalıştırılır (scripts/run_strategy.py). Her ikisi de parity/vendor/ altında değiştirilmeden satıcıya verilmiştir. Açık pineforge-corpus ile kontrol edilir: a35c7c4: bu Docker görüntüsünün içinde derecelendirme çekirdeği, korpus geçidinin derecelendirdiği tüm 309 problama için yayınlanmış katmanı döndürür ve aracın kendisi, yalnızca aşağıdaki girdilerle stdio üzerinden çağrıldığında, 30'luk tabakalı bir örneklem için onu döndürür.

{
  "pine": "//@version=6\nstrategy(\"my strategy\")\n...",
  // The "List of trades" CSV as TradingView exports it, or the Strategy Tester
  // XLSX report base64-encoded (it starts with UEsDB).
  "tradingview_trades": "Trade number,Type,Date and time,Signal,Price USDT,...",
  "symbol": "BINANCE:ETHUSDT.P",          // TradingView ticker
  "timeframe": "15",                      // TradingView resolution: 1, 5, 15, 60, 240, 1D, ...
  "range_start": "2025-04-01T00:00:00Z",  // first bar TradingView computed (UTC unless an offset is given)
  "chart_timezone": "Asia/Taipei",        // the timezone TradingView printed the trade times in

  // Optional:
  "range_end": "2025-10-01T00:00:00Z",    // default: the export's last row
  "inputs": { "Fast Length": 8 },         // TradingView's Inputs tab, as in backtest_pine
  "strategy_overrides": { "commission_value": 0.04 },  // TradingView's Properties tab (list_engine_params)
  "runtime": { "bar_magnifier": true },   // list_engine_params runtime args
  "max_mismatches": 10,                   // mismatching trades to list: default 10, at most 50
  "ohlcv_csv_path": "/work/eth_15m.csv"   // or "ohlcv_csv": "<CSV text>": your own bars
}
girdinotlar
pinePine v6 kaynağı, en fazla 256 KiB
tradingview_trades"İşlem listesi" CSV metni (sütunlar Trade number, Type, Date and time, bir Price sütunu) veya base64 olarak XLSX raporu
symbolTradingView sembolü; XLSX belirtmedikçe veya çubuklar iletmediğiniz sürece gereklidir
timeframeTradingView çözünürlüğü; XLSX belirtmedikçe gereklidir
range_startGeriye dönük testin ilk çubuğunun ISO 8601 tarihi veya tarih-saati; XLSX belirtmedikçe gereklidir
range_endisteğe bağlı; varsayılan: dışa aktarımın son satırı (sonuç bunu söyler)
chart_timezoneİşlem sürelerinin yazdırıldığı saat diliminin IANA adı (UTC+8 stili ofsetler kabul edilir); dışa aktarım belirtmedikçe gereklidir; TradingView'in "Borsa" ayarı tahmin edilmez
inputs, strategy_overrides, runtimeisteğe bağlı, backtest_pine ile aynı anahtarlar
max_mismatchesisteğe bağlı, varsayılan 10, en fazla 50
ohlcv_csv / ohlcv_csv_pathçubuklarınız, böylece herhangi bir piyasa çalışır: timestamp,open,high,low,close,volume (epoch ms) veya TradingView'in grafik dışa aktarımı time,open,high,low,close,Volume (epoch saniye veya ISO 8601); yollar backtest_pine kurallarını izler
magnifier_ohlcv_csv / magnifier_ohlcv_csv_pathisteğe bağlı, bildirilen bir çubuk büyüteci için 1 dakikalık çubuklar, ilk grafik çubuğunun açılışından son grafik çubuğunun kapanışına kadar; ohlcv_csv / ohlcv_csv_path ile aynı biçimler, sınırlar ve yol kuralları

Sınırlar (üstlerinde düz bir hatayla reddedilir):

nesınır
pine262.144 bayt (256 KiB) UTF-8
tradingview_trades33.554.432 karakter (32 × 1024²) iletildiği gibi; derecelendiricinin okuduğu işlem listesi (CSV veya XLSX'ten yeniden oluşturulan) en fazla 32 MiB UTF-8 ve 400.000 satır
XLSX raporusıkıştırılmış her parça en fazla 64 MiB, tüm parçalar birlikte en fazla 128 MiB; bir sayfa en fazla 400.000 satır ve 256 sütun; okunan sayfalar (İşlem listesi ve Özellikler) birlikte en fazla 8.000.000 hücre, her satırdaki boş hücreler dahil; en fazla 2.000.000 paylaşılan dize
ohlcv_csv67.108.864 karakter (64 × 1024²)
ohlcv_csv_pathboyut sınırı yok (bir TradingView grafik dışa aktarımı bellekte dönüştürülür)
Binance getirme100.000 grafik ve büyüteç çubuğu birlikte
çalışma süresiPINEFORGE_PARITY_TIMEOUT_MS, dönüştürme, derleme, geriye dönük test ve derecelendirme için birlikte varsayılan 600.000 ms

Burada kota veya geçmiş penceresi yoktur: aralık yalnızca ilettiğiniz çubuklarla veya 100.000 çubukluk Binance getirmesiyle sınırlıdır.

Çubuklar. Verildiğinde ohlcv_csv / ohlcv_csv_path'niz. Aksi takdirde BINANCE:<SYMBOL> Binance spot kline'ları olarak ve BINANCE:<SYMBOL>.P USDT-M sürekli kline'ları olarak genel API'den, en fazla 100.000 çubukla getirilir. Çubuk olmadan başka herhangi bir sembol, onları isteyen bir hatadır. use_bar_magnifier = true bildiren betikler, grafik donanımın büyüttüğü bir grafik olduğunda (1 dakikadan kaba, en fazla 1 gün) ve runtime.bar_magnifier false olmadığında, son grafik çubuğunun kapanışına kadar 1 dakikalık çubukları da aynı sınırda getirir. Kendi çubuklarınızla, isteğe bağlı olarak magnifier_ohlcv_csv / magnifier_ohlcv_csv_path iletin; betik büyüteci bildirir ancak onsuz çalışırsa, sonuç çubukların içindeki dolguların TradingView'den farklı olabileceği konusunda uyarır.

XLSX raporu. "İşlem listesi" sayfası CSV gibi okunur (Excel tarihleri YYYY-MM-DD HH:MM olur). "Özellikler" sayfası sembolü, zaman dilimini, tarih aralığını, başlangıç sermayesini, emir boyutunu, piramitlemeyi, komisyonu, kaymayı ve belirttiği dolgu seçeneklerini sağlar; aynı ayarları açıkça iletebilirsiniz, ancak dışa aktarımla çelişen bir değer her ikisini de adlandıran bir hatadır. Dışa aktarımda listelenen strateji girdileri raporlanır, uygulanmaz: değiştirdiğiniz herhangi biri için inputs iletin. TradingView bu düzeni belgelemez, bu nedenle sayfa ve anahtar adları gevşek eşleştirilir ve bilinmeyen anahtarlar yok sayılır.

Sonuç. Düz metin bloğu ve aynı veriler JSON olarak (structuredContent): katman ve ne anlama geldiği, değeri ve eşikleriyle her kontrol, kaç işlemin eşleştiği ve kaçının yalnızca TradingView'e veya yalnızca PineForge'a ait olduğu, verilerin bir tane gösterdiği yerde ilk uyumsuzluklar yan yana bir ipucuyla (pencere kenarı, aralık sonunda açık bir pozisyon, boyut, komisyon veya kayma, saat dilimi), bir saat dilimi kontrolü, pencere ve motor, kod üretimi ve derecelendirici sürümleri. İşlemler aynı yöne, bir saat içinde bir girişe ve 3 $ içinde bir giriş fiyatına sahip olduklarında eşleşir. Eşleşen işlemlerin çoğu aynı sıfır olmayan ofsette oturuyorsa veya başka bir saat dilimi açıkça daha fazla işlemle eşleşiyorsa, sonuç bunu söyler; katman, verdiğiniz saat dilimi altındaki katman olarak kalır.

Katmanlar, verify_corpus.py v1.0.1'in derecelendirdiği gibi. Sayım Δ'sı |TradingView − PineForge| / max(TradingView, PineForge) işlemdir; p90 değerleri, eşleşen işlemler üzerinden işlem başına göreli farkların 90. yüzdelikleridir; kapsam, tüm kapanmış TradingView işlemleri üzerinden eşleşen işlemlerdir.

katmankural
mükemmeleşit işlem sayıları; kapsam ≥ %99 veya en fazla 1 eşleşmemiş işlem; giriş fiyatı p90 < %0,01; çıkış fiyatı p90 < %0,01 (üretim profili: < %0,05); P&L p90 < %1 (üretim profili: < %100); TradingView bir zamanda ve fiyatta birden çok giriş gösterdiğinde, PineForge'da aynı sayıda vardır
güçlükapsam ≥ %95 veya en fazla 1 eşleşmemiş işlem; sayım Δ < %6; giriş fiyatı p90 < %0,1; çıkış fiyatı p90 < %0,5; P&L p90 < %100
ortakapsam ≥ %75 ve TradingView işlemlerinin en az %90'ı eşleşti
zayıfen az bir işlem eşleşti
asgarihiçbir işlem eşleşmedi

Üretim profili, betik trail_points, trail_offset veya trail_price'yi strategy.exit üzerinde ayarladığında geçerlidir; diğer her betik katı profilde derecelendirilir. Yöntem: https://pineforge.dev/en/methodology/.

Saklama. Her şey makinenizde çalışır; piyasa verileri yalnızca çubukları iletmediğinizde Binance'ten getirilir. Betik ve işlem listesi ile dönüştürülmesi veya getirilmesi gereken çubuklar, kontrol bittiğinde silinen geçici klasörlere gider. npm/npx ile kontrol motor görüntüsünde çalışır (docker run --network=none, derecelendirme çekirdeği ve çubuklarınız salt okunur bağlanır).

fetch_binance_ohlcv — piyasa verilerini çekin

Binance'in genel uç noktalarından geriye dönük teste hazır bir CSV yazar (başlık timestamp,open,high,low,close,volume, zaman damgası = UNIX ms UTC cinsinden açılış zamanı). Kimlik doğrulama gerekmez. 1000 çubuktan büyük istekler otomatik olarak sayfalanır. output_path, ohlcv_csv_path ile aynı kuralları izler: Docker'da /work altında mutlak bir yol kullanın; npx ile PINEFORGE_ALLOW_ANYWHERE=1 olmadıkça çalışma dizininin içinde kalmalıdır.

{
  "symbol":      "BTCUSDT",
  "interval":    "15m",          // 1s (spot only), 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, 1d, 3d, 1w, 1M
  "market":      "spot",         // default; or "usdt_perp" for USDT-margined perpetual futures
  "limit":       672,            // total bars: default 1000, at most 100000; > 1000 paginates
  "output_path": "/work/btcusdt_15m_7d.csv"
  // Optional: "start_time" / "end_time" in UNIX ms UTC.
}

binance_symbols — sembolleri keşfedin / doğrulayın

OHLCV getirme için Binance genel API'sinde bulunan sembollerin listesini döndürür. İşlem içinde 5 dakika önbelleğe alınır. fetch_binance_ohlcv'yi çağırmadan önce bir sembolü doğrulamak için bunu kullanın.

{
  "market":        "usdt_perp",   // required: "spot" or "usdt_perp"
  "query":         "BTC",         // case-insensitive substring match
  "quote_asset":   "USDT",
  "base_asset":    "BTC",
  "status":        "TRADING",
  "contract_type": "PERPETUAL",   // futures-only filter
  "limit":         50             // default 200, at most 2000
}

Kapsam araçları

PineForge, Pine v6'nın bir alt kümesini uygular, bu nedenle bir strateji yazmadan veya taşımadan önce kontrol edin:

  • list_coverage_topics — bir durumla (supported, partial, unsupported, via_transpiler) ve bir özetle her kapsam konusu, artı açıklama.
  • get_coverage_topic { "topic": "ta" } — bir konu kimliği için tam supported / partial / via_transpiler / unsupported listeleri (örneğin ta, strategy_orders, request_security).
  • check_pine_feature { "feature": "ta.supertrend" } — bir tanımlayıcı veya ad alanı: supported / partial / unsupported / via_transpiler / not_found, katalog girdisini alıntılayan bir notla. Grafikler, tablolar ve uyarılar (plot, bgcolor, table, alert) kabul edilir ve hiçbir etkisi yoktur; line, box ve label nesneleri, stratejinin geri okuyabileceği verilerdir.

Her durum, bu sunucu aracılığıyla bir geriye dönük testin neler yapabileceğini açıklar. Sunucu başka hiçbir sembolün çubuklarını, kaydedilmiş istek verilerini ve Pine kitaplığı kaynaklarını yüklemez, bu nedenle motor daha fazlasını desteklediğinde girdi bunu söyler: başka bir sembolde request.security, örneğin, motor tarafından desteklenir, ancak burada değeri bir işleme ulaşabilen bir istek çalıştırmayı durdurur.

Veriler bu pakete gömülüdür ve list_coverage_topics'ün döndürdüğü coverage_version alanıyla damgalanır (bu sürümde engine v1.0.1 + codegen 1.0.1 (2026-10-02)); motorun docs/coverage.md bu etikette, kontrol edildiği referanstır.

Dosya sistemi kapsamı

npx ile, OHLCV, çıktı ve rapor yolları varsayılan olarak MCP sunucu sürecinin geçerli çalışma dizininin içinde olmalıdır. Kontrol çözümlenmiş yolda çalışır: .. bölümleri ve sembolik bağlantılar önce çözümlenir, bu nedenle hiçbiri dışını gösteremez ve hedefi olmayan bir sembolik bağlantı reddedilir. Çalışma dizinine dışarıdan bağlanan bir veri dosyası veya klasörü de bu nedenle reddedilir. Şununla geçersiz kılın:

export PINEFORGE_ALLOW_ANYWHERE=1

Docker görüntüsü PINEFORGE_ALLOW_ANYWHERE=1'i kendisi ayarlar (konteyner sandbox'tır), bu nedenle orada herhangi bir yol kabul edilir — mutlak /work/... yolları kullanın.

Diğer ortam değişkenleri

varvarsayılanamaç
PINEFORGE_IMAGEghcr.io/pineforge-4pass/pineforge-release:latestyalnızca npm/npx: transpile + backtest için kullanılan motor görüntüsü (çalışma zamanı + paketlenmiş kod üretici)
PINEFORGE_ALLOW_ANYWHERE0 (Docker görüntüsünde 1)OHLCV / çıktı / rapor yollarının cwd dışında olmasına izin ver
PINEFORGE_DOCKER_TIMEOUT_MS120000Her motor çalıştırması ve docker pull için sert kapatma
PINEFORGE_MAX_INLINE_BYTES200000Satır içi döndürülen en büyük rapor; daha büyükleri report_path dosyasına yazılır
PINEFORGE_PARITY_TIMEOUT_MS600000Bir check_tradingview_parity çalıştırmasının zaman sınırı (transpile, derleme, backtest, derecelendirme)
PINEFORGE_HOST_WORKDIRayarlanmamışDocker: /work konumuna bağlanan ana bilgisayar dizini; ayarlandığında, report_path mutlak bir ana bilgisayar yolu olur — yalnızca sunucu çalışma dizini olarak /work ile çalıştığında doğrudur (bkz. backtest_pine örneği sonu)

Docker ile bunları -e NAME=value olarak iletin.

Geliştirme

npm ci
npm run build     # tsc; also writes the gitignored src/version.ts
npm test

Görüntüyü oluşturmak için, üzerinde oluşturulacak pineforge-release sürümünü iletin (Releases sayfasındaki bir etiket, v olmadan):

docker build -f docker/Dockerfile --build-arg PINEFORGE_RELEASE_VERSION=<X.Y.Z> -t pineforge-backtest-mcp .

Lisans

Bu sunucu MIT lisanslıdır (LICENSE). Görüntü ayrıca pineforge-engine (Apache-2.0) ve pineforge-codegen transpiler'ını (kaynak erişilebilir: PolyForm Ticari Olmayan 1.0.0, Kişisel Ticaret istisnası ile; ticari veya barındırılan kullanım ticari lisans gerektirir) paketler. Bkz. LEGAL.md.