The Complete Guide to Indie & TakeProfit
Table of Contents
The Complete Guide to Indie & TakeProfit
Revolutionizing Financial Indicator Development
Transform your trading analysis with the power of custom indicators built in minutes, not hours.
What is Indie & TakeProfit?
Indie is a groundbreaking technical analysis-oriented programming language specifically designed for developing financial indicators. Built as an enhanced dialect of Python, Indie combines the familiarity of Python syntax with powerful financial analysis capabilities, running natively on the TakeProfit platform.
TakeProfit is the comprehensive trading platform that hosts Indie, providing an integrated development environment, real-time data processing, and seamless indicator deployment directly to your charts.
Why This Matters for Traders & Developers
In traditional trading platforms, creating custom indicators requires:
- ❌ Complex, proprietary scripting languages
- ❌ Limited functionality and inflexible frameworks
- ❌ Hours of debugging and testing
- ❌ Restricted access to advanced algorithms
Indie & TakeProfit eliminate these barriers, offering:
- ✅ Python-based syntax that’s easy to learn and powerful to use
- ✅ Built-in technical analysis algorithms and financial functions
- ✅ Real-time validation and instant deployment
- ✅ Professional-grade visualization and drawing capabilities
Key Features That Set Indie Apart
1. Familiar Yet Enhanced Syntax
Built on Python, Indie adds financial-specific syntactic sugar through decorators:
@indicator('My Custom RSI', overlay_main_pane=False)
@param.int('period', default=14, min=2, max=100)
def Main(self, period):
# Your indicator logic here
return rsi_value
2. Comprehensive Technical Analysis Library
Access 60+ built-in algorithms including:
Trend Indicators | Momentum Indicators | Volatility Indicators |
---|---|---|
SMA, EMA, WMA | RSI, MACD, Stochastic | Bollinger Bands, ATR |
VWMA, Hull MA | Williams %R, CCI | Keltner Channels |
Ichimoku Cloud | ROC, Momentum | Standard Deviation |
3. Advanced Visualization Engine
Create stunning, interactive charts with:
- Multiple Plot Types: Lines, histograms, columns, markers, steps
- Dynamic Coloring: Change colors based on market conditions
- Drawing Objects: Labels, line segments, fills, and bands
- Flexible Positioning: Absolute and relative positioning systems
4. Real-Time Data Processing
- Series-Based Processing: Efficient handling of time-series data
- Sliding Window Algorithms: Optimized for financial calculations
- Multi-Timeframe Analysis: Access data from different timeframes
- Cross-Instrument Analysis: Compare multiple assets simultaneously
5. Professional Development Environment
- Integrated IDE: Code editor with syntax highlighting and validation
- Real-Time Testing: See results instantly on live charts
- Parameter Configurability: Create user-friendly settings panels
- Error Detection: Comprehensive validation and debugging tools
What You Can Build
Beginner Level: Enhanced Classics
Transform standard indicators with custom logic:
# indie:lang_version = 5
# Dynamic RSI with Color-Coded Signals
from indie import indicator, param
from indie.algorithms import Rsi
from indie import color
from indie.plot import Line
@indicator('Smart RSI', overlay_main_pane=False)
@param.int('rsi_period', default=14)
@param.float('overbought', default=70.0)
@param.float('oversold', default=30.0)
def Main(self, rsi_period, overbought, oversold):
rsi = Rsi.new(self.close, rsi_period)
rsi_value = rsi[0]
# Initialize default color
signal_color = color.GRAY
# Determine color based on RSI levels
if rsi_value >= overbought:
signal_color = color.RED # Overbought - red
elif rsi_value <= oversold:
signal_color = color.GREEN # Oversold - green
return Line(rsi_value, color=signal_color)
Intermediate Level: Multi-Timeframe Analysis
Combine data from different timeframes:
# indie:lang_version = 5
# Multi-Timeframe Trend Analyzer
from indie import indicator, sec_context, MainContext, TimeFrame
from indie.algorithms import Sma
@sec_context
def SecMain15m(self):
# Calculate trend for 15m timeframe
sma_fast = Sma.new(self.close, 20)
sma_slow = Sma.new(self.close, 50)
return 1.0 if sma_fast[0] > sma_slow[0] else -1.0
@sec_context
def SecMain1h(self):
# Calculate trend for 1h timeframe
sma_fast = Sma.new(self.close, 20)
sma_slow = Sma.new(self.close, 50)
return 1.0 if sma_fast[0] > sma_slow[0] else -1.0
@indicator('MTF Trend Radar', overlay_main_pane=False)
class Main(MainContext):
def __init__(self):
# Request additional timeframe data
self.m15_trend = self.calc_on(time_frame=TimeFrame.from_str('15m'), sec_context=SecMain15m)
self.h1_trend = self.calc_on(time_frame=TimeFrame.from_str('1h'), sec_context=SecMain1h)
def calc(self):
# Current timeframe trend
sma_fast = Sma.new(self.close, 20)
sma_slow = Sma.new(self.close, 50)
current_trend = 1.0 if sma_fast[0] > sma_slow[0] else -1.0
# Get higher timeframe confirmations
m15_trend_value = self.m15_trend[0]
h1_trend_value = self.h1_trend[0]
# Confluence scoring
trend_score = current_trend + m15_trend_value + h1_trend_value
return trend_score
Advanced Level: Custom Strategy Indicators
Build sophisticated trading system components:
# indie:lang_version = 5
# Advanced Volatility Breakout System
from indie import indicator, param, MutSeriesF
from indie.algorithms import Atr, Sma
from indie.math import divide
@indicator('Volatility Breakout Scanner', overlay_main_pane=False)
@param.int('lookback', default=20)
@param.float('volatility_threshold', default=1.5)
def Main(self, lookback, volatility_threshold):
# Calculate normalized volatility using proper ATR syntax
atr = Atr.new(lookback) # ATR automatically uses high, low, close from context
atr_ma = Sma.new(atr, lookback)
vol_ratio = divide(atr[0], atr_ma[0], 0.0) # Safe division with default value
# Calculate price range series for average calculation
price_range_series = MutSeriesF.new()
price_range_series[0] = self.high[0] - self.low[0]
# Identify breakout conditions
price_range = self.high[0] - self.low[0]
avg_range = Sma.new(price_range_series, lookback)[0]
# Initialize breakout signal
breakout_signal = 0.0
if vol_ratio > volatility_threshold and price_range > avg_range * 1.2:
if self.close[0] > self.open[0]:
breakout_signal = 1.0 # Bullish breakout
else:
breakout_signal = -1.0 # Bearish breakout
return breakout_signal, vol_ratio
Getting Started: Your First Indicator in 5 Minutes
Step 1: Access the TakeProfit Platform
- Navigate to the TakeProfit platform
- Add the Indicators Code Editor widget to your workspace
- Open a chart for testing your indicators
Step 2: Write Your First Indicator (Simplest Version)
# indie:lang_version = 5
from indie import indicator
from indie.algorithms import Sma
@indicator('My First Indicator', overlay_main_pane=True)
def Main(self):
# Simple 20-period moving average
sma = Sma.new(self.close, 20)
return sma[0]
What this does:
- Creates a simple 20-period moving average
- Overlays it on the main price chart
- No configuration needed - just works!
Step 3: Test and Deploy
- Copy the code above into the code editor
- Click Add to Chart
- Watch your indicator appear on the chart in real-time
Step 4: Add Customizable Parameters
Now let’s enhance the same indicator with user-configurable parameters:
# indie:lang_version = 5
from indie import indicator, param, color
from indie.algorithms import Sma
from indie.plot import Line
@indicator('Configurable SMA', overlay_main_pane=True)
@param.int('period', default=20, min=1, max=200, title='SMA Period')
@param.float('line_width', default=2.0, min=1.0, max=5.0, title='Line Width')
def Main(self, period, line_width):
# Calculate SMA with user-defined period
sma = Sma.new(self.close, period)
# Dynamic color based on trend
sma_color = color.GREEN if self.close[0] > sma[0] else color.RED
return Line(sma[0], color=sma_color)
New features added:
- ✅ Configurable period (1-200 bars)
- ✅ Adjustable line width (1.0-5.0)
- ✅ Dynamic coloring (green when price above SMA, red when below)
- ✅ User-friendly parameter titles in Settings panel
Step 5: Access the Settings Panel
- Right-click on your indicator in the chart
- Select Settings from the context menu
- Adjust the SMA Period and Line Width parameters
- Click Apply to see changes in real-time
What You’ve Learned
- How to create basic indicators with
@indicator
decorator - How to add customizable parameters with
@param.*
decorators - How to use conditional coloring for visual feedback
- How to overlay indicators on the main chart
Next Steps: Try modifying the period values or experiment with different color combinations!
Advanced Visualization Capabilities
Multi-Plot Indicators with Dynamic Styling
# indie:lang_version = 5
from indie import indicator, param, color, level
from indie.algorithms import Macd
from indie.plot import Columns, columns, line
@indicator('Advanced MACD', overlay_main_pane=False)
@level(0, line_color=color.GRAY(0.5))
@columns(title='Histogram')
@line(color=color.BLUE, title='MACD')
@line(color=color.ORANGE, title='Signal')
@param.int('fast', default=12)
@param.int('slow', default=26)
@param.int('signal', default=9)
def Main(self, fast, slow, signal):
# Calculate MACD components - returns tuple of (macd, signal, histogram)
macd_line, signal_line, histogram = Macd.new(self.close, fast, slow, signal)
# Dynamic histogram coloring based on histogram value and direction
hist_color = color.BLACK # default value
if histogram[0] >= 0:
if histogram[1] < histogram[0]:
hist_color = color.GREEN
else:
hist_color = color.LIME
else:
if histogram[1] < histogram[0]:
hist_color = color.RED
else:
hist_color = color.MAROON
return (
Columns(histogram[0], color=hist_color),
macd_line[0],
signal_line[0],
)
Interactive Chart Annotations
# indie:lang_version = 5
from indie import indicator, MainContext, color
from indie.drawings import LabelRel, RelativePosition, vertical_anchor, horizontal_anchor
@indicator('Simple Annotation', overlay_main_pane=True)
class Main(MainContext):
def __init__(self):
self._created = self.new_var(False)
def calc(self):
# Create annotation only once
if not self._created.get() and self.close[0] > 100:
label = LabelRel(
text="Price above 100!",
position=RelativePosition(vertical_anchor.TOP, horizontal_anchor.LEFT, 0.1, 0.80),
text_color=color.RED
)
self.chart.draw(label)
self._created.set(True)
return self.close[0]
Real-World Use Cases
For Professional Traders
- Custom Strategy Indicators: Build indicators that match your exact trading methodology
- Multi-Asset Analysis: Create correlation and relative strength indicators
- Risk Management Tools: Develop position sizing and volatility-based indicators
- Market Structure Analysis: Build tools for identifying market phases and regime changes
For Quantitative Analysts
- Statistical Arbitrage Indicators: Z-score calculations and mean reversion signals
- Alternative Data Integration: Process sentiment, volatility, and macro-economic data
- Machine Learning Preprocessing: Feature engineering for ML trading models
- Backtesting Visualization: Display strategy performance metrics on charts
For Portfolio Managers
- Sector Rotation Indicators: Track relative performance across asset classes
- Risk-Adjusted Returns: Sharpe ratio and other risk metrics visualization
- Correlation Monitoring: Dynamic correlation tracking between assets
- Drawdown Analysis: Visualize portfolio drawdown periods and recovery
For Retail Traders
- Simplified Complex Strategies: User-friendly interfaces for advanced concepts
- Educational Indicators: Learn market mechanics through visual feedback
- Personal Trading Rules: Codify your trading rules into systematic indicators
- Alert Systems: Create custom alerts based on your criteria
Technical Architecture & Performance
Optimized for Financial Data
- Series-First Design: Native handling of time-series data structures
- Memory Efficient: Optimized algorithms for large datasets
- Real-Time Processing: Sub-millisecond indicator updates
- Scalable: Handle multiple indicators simultaneously without performance degradation
Robust Development Framework
# indie:lang_version = 5
# Example of algorithm optimization
from indie import algorithm, SeriesF, MutSeriesF, indicator, param
from indie.plot import Line
from indie import color
@algorithm
def CustomMovingAverage(self, source: SeriesF, period: int) -> SeriesF:
# Use built-in series operations for efficiency
result = MutSeriesF.new(init=0.0)
# Calculate sum of current window
current_sum = 0.0
window_size = min(period, self.ctx.bar_index + 1)
# Sum values in the window
for i in range(window_size):
current_sum += source[i]
# Calculate and store average
result[0] = current_sum / window_size if window_size > 0 else 0.0
return result
@indicator('Custom MA Demo', overlay_main_pane=True)
@param.int('period', default=14, min=1, max=200)
def Main(self, period):
# Use our custom moving average
custom_ma = CustomMovingAverage.new(self.close, period)
# Color based on trend
ma_color = color.GREEN if self.close[0] > custom_ma[0] else color.RED
return Line(custom_ma[0], color=ma_color)
Enterprise-Grade Reliability
- Type Safety: Strong typing prevents runtime errors
- Validation Framework: Comprehensive code validation before deployment
- Version Management: Track and manage indicator versions
- Performance Monitoring: Built-in performance metrics and optimization suggestions
Success Stories & Community
Professional Trading Firms
“We migrated from proprietary platforms to Indie and reduced our indicator development time by 75%. The Python-based syntax allowed our entire quantitative team to contribute immediately.”
— Senior Quantitative Developer at Multi-Billion Dollar Hedge Fund
Independent Traders
“I’ve been trading for 15 years and never found a platform that let me implement my exact strategy requirements. With Indie, I built my complete trading system in just 2 weeks.”
— Professional Day Trader
Growing Community
- 60+ Built-in Indicators: Ready-to-use professional indicators
- Open Source Examples: Learn from community-contributed indicators
- Active Development: Regular updates and new features
- Educational Resources: Comprehensive documentation and tutorials
Pricing & Plans
Free Tier
- Access to all core Indie language features
- Basic technical analysis algorithms
- Standard plotting capabilities
- Community support
Professional Tier
- Advanced algorithms and statistical functions
- Enhanced visualization options
- Priority support and feature requests
- Commercial usage rights
Get Started Today
Immediate Next Steps
- [Access TakeProfit Platform →]
- Sign up for free account
- Add Code Editor widget to workspace
- Start with provided examples
- [Explore Documentation →]
- Complete language reference
- Step-by-step tutorials
- Algorithm library documentation
- [Join Community →]
- Connect with other developers
- Share indicators and strategies
- Get help from experts
30-Day Challenge
We’re so confident in Indie’s capabilities that we challenge you to:
Week 1: Learn the basics and create your first moving average indicator Week 2: Build a multi-timeframe analysis tool Week 3: Develop a custom strategy indicator with visual signals Week 4: Create an advanced indicator with drawing objects and alerts