PineForge Codegen
resmiYerel 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_pinekullanarak Pine v6 kaynağını bir C++ çeviri birimine dönüştürmesini isteyin. - Tekil geri testleri çalıştırın — Asistanınıza,
backtest_pinearacılığıyla bir Pine v6 stratejisini OHLCV CSV'sine karşı, isteğe bağlıinputs,overridesveruntimeparametreleriyle geri test ettirin. - Strateji parametrelerini tarayın —
backtest_pine_gridkullanarakinputs×overrideskombinasyonları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_paritykullanarak 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_ohlcvaracı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_featurekullanarak 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).

Araçlar
| ad | üzerinde çalışır | amaç |
|---|---|---|
transpile_pine | süreç içinde | Pine v6 → C++ çeviri birimi (yalnızca derleme) |
list_engine_params | yerel (G/Ç yok) | Geri testlerin kabul ettiği her overrides + runtime ayarının kataloğu |
backtest_pine | süreç içinde | Bir Pine kaynağının OHLCV CSV'sine karşı tek geri testi |
backtest_pine_grid | süreç içinde | inputs × overrides Kartezyen taraması: bir derleme, ardından her kombinasyon için bir derleme ve bir geri test |
check_tradingview_parity | sü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_ohlcv | Binance genel API'si | Binance spot veya USDT-perp kline'larından geri teste hazır bir CSV yazar |
binance_symbols | Binance genel API'si | Binance sembollerini listeler / filtreler (5 dakikalık süreç içi önbellek) |
list_coverage_topics | yerel (G/Ç yok) | Tek satırlık durum + özet ile her Pine v6 kapsam konusu |
check_pine_feature | yerel (G/Ç yok) | Bir Pine tanımlayıcısının/ad alanının PineForge'da desteklenip desteklenmediğini kontrol eder |
get_coverage_topic | yerel (G/Ç yok) | Tek bir konu için tam ayrıntı + desteklenen/kısmi/derleyici_aracılığıyla/desteklenmeyen listeler |
engine_info | yerel (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.csvgibi göreli bir yol kapsayıcının içini işaret eder ve kapsayıcı çıktığında kaybolur (--rm). - Linux'ta, sunucunun
/workkonumuna yazdığı dosyaların sizin sahipliğinizi taşıması için--user "$(id -u):$(id -g)"ekleyin. -igereklidir; asla-teklemeyin — 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ınPINEFORGE_OVERRIDESaracılığıyla okuduğu 9strategy(...)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_fullbağı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
}
| girdi | notlar |
|---|---|
pine | Pine 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 |
symbol | TradingView sembolü; XLSX belirtmedikçe veya çubuklar iletmediğiniz sürece gereklidir |
timeframe | TradingView çözünürlüğü; XLSX belirtmedikçe gereklidir |
range_start | Geriye dönük testin ilk çubuğunun ISO 8601 tarihi veya tarih-saati; XLSX belirtmedikçe gereklidir |
range_end | isteğ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, runtime | isteğe bağlı, backtest_pine ile aynı anahtarlar |
max_mismatches | isteğ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_path | isteğ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):
| ne | sınır |
|---|---|
pine | 262.144 bayt (256 KiB) UTF-8 |
tradingview_trades | 33.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 raporu | sı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_csv | 67.108.864 karakter (64 × 1024²) |
ohlcv_csv_path | boyut sınırı yok (bir TradingView grafik dışa aktarımı bellekte dönüştürülür) |
| Binance getirme | 100.000 grafik ve büyüteç çubuğu birlikte |
| çalışma süresi | PINEFORGE_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.
| katman | kural |
|---|---|
| mükemmel | eş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 |
| orta | kapsam ≥ %75 ve TradingView işlemlerinin en az %90'ı eşleşti |
| zayıf | en az bir işlem eşleşti |
| asgari | hiç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 tamsupported/partial/via_transpiler/unsupportedlisteleri (örneğinta,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,boxvelabelnesneleri, 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
| var | varsayılan | amaç |
|---|---|---|
PINEFORGE_IMAGE | ghcr.io/pineforge-4pass/pineforge-release:latest | yalnızca npm/npx: transpile + backtest için kullanılan motor görüntüsü (çalışma zamanı + paketlenmiş kod üretici) |
PINEFORGE_ALLOW_ANYWHERE | 0 (Docker görüntüsünde 1) | OHLCV / çıktı / rapor yollarının cwd dışında olmasına izin ver |
PINEFORGE_DOCKER_TIMEOUT_MS | 120000 | Her motor çalıştırması ve docker pull için sert kapatma |
PINEFORGE_MAX_INLINE_BYTES | 200000 | Satı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_MS | 600000 | Bir check_tradingview_parity çalıştırmasının zaman sınırı (transpile, derleme, backtest, derecelendirme) |
PINEFORGE_HOST_WORKDIR | ayarlanmamış | 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.