
Company News
Jerod Santo Joins Socket as Head of Media
Allow myself to introduce... myself.
pinets-cli
Advanced tools
A CLI wrapper for PineTS that lets you run Pine Script indicators directly from the command line.
pinets-cli
Run Pine Script indicators from the command line
Quick Start • Usage • Options • Examples • Full Docs
pinets-cli is a command-line interface for PineTS, the open-source Pine Script transpiler and runtime. It lets you execute TradingView Pine Script indicators directly from your terminal, with live market data or custom JSON datasets.
pinets run rsi.pine --symbol BTCUSDT --timeframe 60
No code to write. No project to set up. Just point it at a .pine file and go.
npm install -g pinets-cli
Or run directly without installing:
npx pinets-cli run sma_cross.pine --symbol BTCUSDT --timeframe 60
Create a file called sma_cross.pine:
//@version=5
indicator("SMA Cross", overlay=true)
fast = ta.sma(close, 9)
slow = ta.sma(close, 21)
plot(fast, "Fast SMA", color=color.blue)
plot(slow, "Slow SMA", color=color.red)
Run it:
pinets run sma_cross.pine --symbol BTCUSDT --timeframe 60
That's it. You'll get JSON output with the calculated SMA values for the last 500 hourly candles.
pinets run [options] [file]
The run command executes a Pine Script indicator and outputs the results as JSON.
Provide the indicator as a file argument or via piped stdin:
# From a file
pinets run my_indicator.pine --symbol BTCUSDT
# Piped from stdin (works on Linux, macOS, and Windows)
cat my_indicator.pine | pinets run --symbol BTCUSDT
Choose between live market data or a local JSON file:
# Live data from Binance
pinets run rsi.pine --symbol BTCUSDT --timeframe 60
# Custom data from a JSON file
pinets run rsi.pine --data ./my_candles.json
| Option | Short | Description | Default |
|---|---|---|---|
--symbol <ticker> | -s | Symbol to query (e.g., BTCUSDT, ETHUSDT.P) | — |
--timeframe <tf> | -t | Timeframe: 1, 5, 15, 60, 240, 1D, 1W, 1M | 60 |
--data <path> | -d | Path to a JSON data file (alternative to --symbol) | — |
| Option | Short | Description | Default |
|---|---|---|---|
--output <path> | -o | Write output to a file instead of stdout | stdout |
--format <type> | -f | Output format: default or full | default |
--pretty | — | Force pretty-printed JSON | auto |
--clean | — | Filter out null, false, and empty values from plots | — |
--plots <names> | — | Comma-separated list of plot names to include | all plots |
| Option | Short | Description | Default |
|---|---|---|---|
--candles <count> | -n | Number of candles in the output | 500 |
--warmup <count> | -w | Extra candles for indicator warmup (not included in output) | 0 |
| Option | Short | Description |
|---|---|---|
--debug | — | Show the transpiled code (for debugging) |
--quiet | -q | Suppress all informational messages |
--version | -v | Show version number |
--help | -h | Show help |
pinets run rsi.pine --symbol BTCUSDT --timeframe 1D --candles 100
Many indicators need historical data to initialize (e.g., a 200-period SMA needs at least 200 bars before producing meaningful output). Use --warmup to fetch extra candles that are processed but excluded from the output:
# Fetch 700 candles (200 warmup + 500 output), return only the last 500
pinets run ema200.pine --symbol ETHUSDT --timeframe 60 --candles 500 --warmup 200
pinets run macd.pine --symbol BTCUSDT --timeframe 15 -o results.json
# Pretty-print with jq
pinets run rsi.pine -s BTCUSDT -t 60 -q | jq '.plots'
# Extract last RSI value
pinets run rsi.pine -s BTCUSDT -t 60 -q | jq '.plots.RSI.data[-1].value'
pinets run my_indicator.pine --data ./historical_btc.json --candles 50 --pretty
cat my_indicator.pine | pinets run --symbol BTCUSDT --timeframe 60
# Or on Windows PowerShell
Get-Content my_indicator.pine | pinets run --symbol BTCUSDT --timeframe 60
pinets run rsi.pine --symbol BTCUSDT --format full --pretty
pinets run my_indicator.pine --symbol BTCUSDT --debug
For indicators that generate signals (like crossovers), most candles will have false values. Use --clean to filter them out:
# Without --clean: 500 entries, mostly false
pinets run ma_cross.pine -s BTCUSDT -t 1D -n 500
# With --clean: Only actual signals
pinets run ma_cross.pine -s BTCUSDT -t 1D -n 500 --clean
When you only need specific plots from an indicator:
# Get only the Fast SMA (ignore Slow SMA)
pinets run sma_cross.pine -s BTCUSDT --plots "Fast SMA"
# Get only Buy and Sell signals
pinets run signals.pine -s BTCUSDT --plots "Buy,Sell" --clean -q | jq '.plots'
default formatContains the indicator metadata and all plot data:
{
"indicator": {
"title": "RSI",
"overlay": false
},
"plots": {
"RSI": {
"title": "RSI",
"options": { "color": "#7E57C2" },
"data": [
{ "time": 1704067200000, "value": 65.42 },
{ "time": 1704070800000, "value": 62.18 }
]
}
}
}
full formatEverything in default, plus the raw execution result and market data:
{
"indicator": { ... },
"plots": { ... },
"result": { ... },
"marketData": [
{ "openTime": 1704067200000, "open": 42000, "high": 42500, "low": 41800, "close": 42300, "volume": 1234.5 },
...
]
}
When using --data, provide a JSON file with an array of candle objects:
[
{
"openTime": 1704067200000,
"open": 42000.5,
"high": 42500.0,
"low": 41800.0,
"close": 42300.0,
"volume": 1234.56,
"closeTime": 1704070799999
}
]
Required fields: open, high, low, close, volume
Recommended fields: openTime, closeTime (millisecond timestamps)
pinets-cli is a self-contained binary that bundles the PineTS library. When you run an indicator:
There are no runtime dependencies. The single bundled file includes everything needed.
| Value | Description |
|---|---|
1 | 1 minute |
3 | 3 minutes |
5 | 5 minutes |
15 | 15 minutes |
30 | 30 minutes |
60 | 1 hour |
120 | 2 hours |
240 | 4 hours |
1D or D | 1 day |
1W or W | 1 week |
1M or M | 1 month |
Contributions are welcome! Please feel free to open issues or submit pull requests.
AGPL-3.0 - See LICENSE for details.
FAQs
A CLI wrapper for PineTS that lets you run Pine Script indicators directly from the command line.
We found that pinets-cli demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.

Company News
Allow myself to introduce... myself.

Research
/Security News
A Twitch browser extension on Chrome and Firefox forwards users’ live OAuth session tokens through proxies controlled by a Russian bot service.

Security News
Anthropic found biased reasoning and recklessness drove Claude Mythos 5 to publish malware on PyPI and compromise a security vendor.