> ## Documentation Index
> Fetch the complete documentation index at: https://takeprofit.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Why a language of its own

> Why TakeProfit ships its own indicator language instead of a fixed library: server-side execution, Python-like syntax, open source for every built-in indicator, and a path from an idea to a product you can sell.

Most charting platforms give you a fixed library of indicators and a settings panel. TakeProfit gives you the
library **and** the language it is written in. This page explains why that matters — and when it does not.

## The short version

<CardGroup cols={3}>
  <Card title="Runs on our servers" icon="server">
    Your code is executed and sandboxed on the platform side, not in your browser tab.
  </Card>

  <Card title="It is Python, near enough" icon="code">
    A subset of Python with decorators on top — not a bespoke dialect you have to learn from zero.
  </Card>

  <Card title="Every built-in is open" icon="code-fork">
    Each indicator shipped with the platform is written in Indie, and you can fork any of them.
  </Card>
</CardGroup>

## 1. The calculation is not your laptop's problem

Indie code runs on TakeProfit servers inside a sandbox, which is also why the runtime restricts parts of the
standard library — see [Language differences with Python](/docs/indie/Language-differences-with-Python).

The practical consequence: a heavy indicator over a long history is a server job, not a frozen browser tab. The same
code also runs where you are not — a [cloud alert](/docs/guide/alerts/Alerts-overview) built on your own indicator keeps
watching the market with every tab closed, and a [backtest](/docs/guide/platform/backtesting-widget/backtest-widget)
walks years of history without your machine doing the walking.

## 2. You are not learning a new language, you are learning a few decorators

Indie is a dialect of Python — essentially a subset of its constructs, plus
[syntactic sugar](/docs/indie/How-Indies-syntactic-sugar-works) in the form of decorators such as `@indicator`,
`@param.int` or `@plot.line`. If you have written Python, you can read Indie today and write it tomorrow.

That is a deliberate trade. A purpose-built scripting language is faster to design but slower to learn, and
everything you know about it stays inside one platform. Python knowledge does not expire.

```py theme={null}
# indie:lang_version = 5
from indie import indicator, param, plot, color
from indie.algorithms import Sma


@indicator('My SMA')
@param.int('length', default=20, min=1)
@plot.line(color=color.AQUA)
def Main(self, length):
    return Sma.new(self.close, length)[0]
```

Full syntax, data model and API surface: [Library reference](/docs/indie/Library-reference-overview).

## 3. Nothing is a black box

Every indicator that ships with the platform is implemented in Indie, and its source is open. Click the
**Source Code** icon on any open-source indicator and the [IDE](/docs/guide/platform/ide-widget/IDE-overview) opens with
your own copy of it.

This is the difference between "the platform's RSI does something I cannot see" and "here is the RSI, change the
smoothing and keep the rest". Learning by reading working code is usually faster than learning by reading a
reference — start with [Code examples](/docs/indie/Code-examples/educational-indicators).

## 4. One language covers the whole path

The same script, extended, walks the full distance from an idea to a live position:

| Stage             | What you write                         | Where it runs                                                         |
| ----------------- | -------------------------------------- | --------------------------------------------------------------------- |
| Idea on the chart | `@indicator` with plots and drawings   | [Chart widget](/docs/guide/platform/chart-widget/Chart-widget-overview)    |
| Notification      | the same indicator, as an alert source | [Cloud alerts](/docs/guide/alerts/Alerts-overview)                         |
| Rules with orders | `@strategy` with `trading` calls       | [Strategy tester](/docs/guide/platform/backtesting-widget/backtest-widget) |
| A product         | published script, free or paid         | [Marketplace](https://takeprofit.com/indicators)                      |

You do not re-implement the idea three times in three tools. It is one file that gains capabilities.

## 5. What you build stays yours — and can be sold

A finished indicator can be published to the [Marketplace](https://takeprofit.com/indicators), free to grow an
audience or paid by subscription, with your own price. See
[Sell your indicators](/docs/guide/monetization-tools/Sell-your-indicators) for the publishing flow and the revenue
split.

<Note>
  Scripts that use [external CSV data](/docs/indie/External-data/External-data-overview) cannot be published to the
  Marketplace — they stay private to your account.
</Note>

## 6. You do not have to type any of it

The strongest argument for a language is that you can skip writing in it. The
[MCP server](/docs/guide/platform/ai-assistant/Mcp-server-guide) connects Claude, Cursor, VS Code and other clients to
the Indie compiler, the docs and the indicator library, so an LLM can write the code, check it against the real
runtime, and fix its own errors before handing it over. The
[AI assistant in the IDE](/docs/guide/platform/ai-assistant/AI-assistant-IDE) does the same inside the platform, and it
converts scripts from Pine Script or MQL5 into Indie.

Describe the idea in plain words; what you get back is a compiled indicator you own.

## When you do not need any of this

If the built-in library covers your analysis, use it — a language you never open costs you nothing. Indie starts to
matter at the point where you hear yourself saying "I wish this indicator also…".

<CardGroup cols={2}>
  <Card title="What you can build" icon="lightbulb" href="/docs/indie/What-you-can-build">
    Six things that are only possible because the language is there.
  </Card>

  <Card title="Quick start" icon="play" href="/docs/indie/Quick-start">
    Write and run your first indicator in a few minutes.
  </Card>
</CardGroup>
