Every script runs through three phases:

1

Initialization (runs once)

  • define(...) — required (exactly one call)
  • User inputs via input(...)
  • Data subscriptions via source(...) / or dedicated type functions like ohlcv(...)
  • Declare timeseries in global scope only
2

Calculation (runs once per bar)

  • Indicator math (rsi(...), ema(...), etc.)
  • Expressions and control-flow using var variables
  • No timeseries declarations here
3

Plotting (runs once per bar, after calculation)

  • Render via plotLine(...), plotCandle(...), plotBar(...), plotShape(...), …
kScript Execution Model Diagram

Key Characteristics

Deterministic Results

Given the same input data, a script will always produce identical output. This property is essential for reliable backtesting and strategy validation.

Immutable Historical Data

timeseries objects provide read-only access to historical values. Past data cannot be modified, ensuring data integrity throughout execution.

Efficient Memory Usage

Only current bar calculations are held in memory. Historical data is managed by the runtime with optimized caching strategies.

Real-time Compatibility

The same script logic handles both historical analysis and live data processing without requiring different code paths or special handling.

Limitations and Constraints

⚠️

No Future Data Access

Scripts cannot access data from future bars (e.g., ts[-1] is invalid). This prevents look-ahead bias in analysis.

🚫

Global Scope Timeseries Only

timeseries declarations must be in global scope. They cannot be declared inside functions, loops, or conditional blocks.

⏱️

Execution Time Limits

Scripts must complete execution within 500ms (excluding data fetch). This ensures responsive chart rendering and prevents infinite loops.

🔒

No Cross-Bar Variable Persistence

var variables cannot maintain state between bars. Use timeseries for values that need historical access.

📖
Introduction
Overview of kScript language
🔍
Overview
Complete technical documentation
🚀
Quick Start
Get started with kScript basics
📋
Function Reference
Complete API reference guide
📚
Type System
Understanding kScript data types
General FAQ
Frequently asked questions about kScript
Best Practices
Guidelines for writing efficient kScript code
⚠️
Limitations
Known constraints and workarounds
🆕
Updates
v1 vs v2 differences and improvements
🔧
Core Concepts
Variables, data types & data sources
⚙️
Execution Model
Per-bar execution lifecycle and phases
🏷️
Keyword Arguments
Named parameters for clear function calls
🔗
Field Accessors
Dot notation for timeseries field access
🛠️
User-Defined Functions
Create custom reusable functions
🔗
Script Definition
Defining inputs and metadata
TimeSeries Management
Working with time-aligned data
🎯
Utility Functions
Helper functions and calculations
📈
Moving Averages
SMA, EMA and trend-following indicators
📊
Oscillators
RSI, Stochastic and momentum indicators
📈
Trend Indicators
Trend direction and strength analysis
📉
Volume Indicators
Volume-based analysis tools
📦
Orderbook Functions
Market depth analysis tools
🎨
Plotting & Visualization
Chart rendering and styling
🌈
Color Functions
Color manipulation and styling
📊
Data Subscriptions
Subscribe to OHLCV, trades, and orderbook data
🔄
Loops
For loops and while loops for iteration
🧮
Math Functions
Mathematical functions and constants
🏠
Go Home
Return to main landing page