Table of Contents
A Python-based language for trading indicators
Indie runs natively on the TakeProfit charting platform. It reuses familiar Python syntax and adds decorators, series types, and a drawing API built specifically for financial charts — so every built-in indicator on the platform is, in fact, written in Indie.
Python syntax, built for markets
Everything you'd expect from a modern scripting language, plus the primitives financial analysis actually needs.
Familiar syntax
If you've written basic Python, the structure — functions, decorators, type hints — will feel immediately familiar. No new language to learn from scratch.
Series-first data model
Series[T] and MutSeries[T] model time series data directly, with built-in handling for lookback, NaN values, and streaming updates.
Drawing API
Place labels and lines at exact price/time coordinates, or anchor persistent overlays to a corner of the chart — without touching a rendering engine.
Parameter decorators
@param.int, @param.float, @param.bool turn function arguments into user-configurable indicator settings automatically.
Multi-instrument context
@sec_context lets an indicator request data from another symbol or timeframe alongside the chart's own series.
Built-in algorithms
A standard library of moving averages, crossovers, and other reusable @algorithm building blocks — no need to reimplement the basics.
A full indicator in a few lines
A parameterized indicator is a decorated function, not a class hierarchy.
The @indicator and @param.* decorators handle
registration and UI controls; you write the logic.
@indicator('Price Above MA')
@param.int('length', default=20)
def Main(self, length):
ma = Sma.new(self.close, length)
return self.close[0] > ma[0]
@indicator('Trend Break Marker', overlay_main_pane=True)
def Main(self):
if breakout_detected(self):
self.chart.draw(LabelAbs(
f"Breakout: {self.close[0]:.2f}",
AbsolutePosition(self.time[0], self.high[0]),
))
self.chart.draw(LineSegment(
AbsolutePosition(self.time[10], self.low[10]),
AbsolutePosition(self.time[0], self.high[0]),
extend_type=extend_type.RIGHT,
))
Draw directly on the chart
AbsolutePosition pins a label or line to an exact
price/time coordinate; extend_type projects a line
segment forward so trend markers stay visible as new bars arrive.
Start reading
Community-written guides that go deeper into specific parts of the language and platform.
Language reference
The complete Indie syntax reference: data types, decorators, built-in algorithms, and the platform's alert system.
Coming from TradingView / Pine Script
What's different about Indie and TakeProfit if you're used to Pine Script, and how to write your first custom indicator.
Linear regression projections
A quantitative comparison of OLS regression projections against a simple moving average — lag, noise, and where each one breaks down.
Build your first indicator
TakeProfit is free to start — indicators run in the browser, no local setup required.