pinescript-to-python-translator
About pinescript-to-python-translator
pinescript-to-python-translator converts TradingView PineScript strategies into Python components for headless backtesting and optimization. It classifies parameters, translates indicator logic, and specifies an output file structure for signals and Optuna search spaces.
Key features
- 01Classify signal, risk, and display inputs
- 02Extract parameter bounds for Optuna
- 03Translate technical indicators to Python
- 04Vectorize entry and exit conditions
- 05Check for repaint and division-by-zero risks
Use cases
- 01Move a TradingView backtest to Python
- 02Prepare strategies for Walk-Forward Analysis
- 03Build an Optuna hyperparameter search space
- 04Audit translated signals for repaint risks
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ mphinance/ alpha-skills --skill pinescript-to-python-translatorAfter installing, type/pinescript-to-python-translatorin Claude Code to confirm it loaded.
Bundled filesREADME.md
Details
From the project README🌲 PineScript to Python Translator
This skill is designed to take raw TradingView PineScript files (.pine) and rigorously deconstruct them into Python-native components so they can be optimized using vectorization and tools like Optuna.
When to use this skill
Use this skill when you want to migrate a backtest from the TradingView ecosystem into a headless Python environment. This is critical for running multi-fold Walk-Forward Analysis (WFA) and Monte Carlo simulations that TradingView cannot handle.
Workflow
-
Deconstruction & Classification (The IR Build)
- Parse the
.pinescript to identifyinput(),input.int(),input.float(), andinput.bool(). - Classify parameters into three buckets:
- Signal: Parameters that dictate entries (e.g.,
length,crossover_threshold). - Risk: Parameters that dictate exits (e.g.,
stop_ticks,trail_offset). - Display: Parameters used only for plotting/UI (discard these).
- Signal: Parameters that dictate entries (e.g.,
- Parse the
-
Boundary Extraction
- For every Signal and Risk parameter, extract the
minval,maxval, andstepif provided. - Format these into Optuna trial suggestions (e.g.,
trial.suggest_int('length', 10, 50)).
- For every Signal and Risk parameter, extract the
-
Logic Translation
- Translate PineScript technical analysis functions (
ta.sma,ta.ema,ta.rsi) into theirpandas-taornumpyequivalents. - Vectorize the entry and exit conditions. Do not use standard
forloops over rows unless path-dependency strictly requires it. Usenp.whereand.shift()wherever possible.
- Translate PineScript technical analysis functions (
-
Hardening & Auditing
- Repaint Risk: Scan the translation for anything relying on the current unclosed bar data. Force the use of
.shift(1)for signal generation. - Division by Zero: Wrap all denominators in a
np.maximum(denominator, 1e-8)guard to prevent NaN explosions during optimization.
- Repaint Risk: Scan the translation for anything relying on the current unclosed bar data. Force the use of
Output Format
The output should be a single Python file containing:
- An
extract_features(df, params)function that builds all the indicators based on a parameter dictionary. - A
generate_signals(df)function that creates asignalcolumn (1 for Long, -1 for Short, 0 for Flat). - A
get_optuna_space(trial)function that returns the hyperparameter search space dictionary.