Skip to main content
Reference5 min read
Complete reference for script definition functions in kScript. These functions set up your indicator’s properties and create customizable user inputs.

define()

Sets up your indicator’s properties including title, position, and display options. Every kScript must have exactly one define() call.

Signature

define(title: string, position: string, axis?: boolean, customTitle?: string): void

Parameters

ParameterTypeDescription
titlestringDisplay name for your indicator
positionstringWhere to display: "onchart" or "offchart"
axisbooleanCreate independent Y-axis (default: false)
customTitlestringDynamic title suffix using input values

Example

//@version=2

// Basic definition
define(title="My RSI Indicator", position="offchart", axis=true);

// With custom title showing input values
define(title="EMA Crossover", position="onchart", axis=false, customTitle="($fastPeriod, $slowPeriod)");

Position Options

ValueDescription
"onchart"Display on the main price chart (overlays, moving averages)
"offchart"Display in a separate panel below the chart (oscillators, volume)

input()

Creates customizable user inputs that appear in the indicator settings panel.

Signature

input(name: string, type: string, defaultValue: any, label?: string, options?: string[]): any

Parameters

ParameterTypeDescription
namestringInternal identifier for the input
typestringInput type: "number", "boolean", "string", "select"
defaultValueanyDefault value for the input
labelstringDisplay label in settings panel
optionsstring[]Options array for "select" type inputs

Input Types

TypeDescriptionExample
"number"Numeric input fieldPeriod length, threshold values
"boolean"Checkbox toggleShow/hide features
"string"Text inputLabels, symbols
"select"Dropdown menuPlot type, color scheme

Examples

//@version=2

define(title="Configurable RSI", position="offchart", axis=true);

// Number input for period
var period = input(name="period", type="number", defaultValue=14, label="RSI Period");

// Boolean toggle
var showSignals = input(name="showSignals", type="boolean", defaultValue=true, label="Show Signals");

// Select dropdown
var plotType = input(name="plotType", type="select", defaultValue="Line", label="Plot Type", options=["Line", "Bar", "Area"]);

// String input
var customLabel = input(name="customLabel", type="string", defaultValue="RSI", label="Custom Label");

timeseries ohlcvData = ohlcv(symbol=currentSymbol, exchange=currentExchange);
var rsiValue = rsi(source=ohlcvData.close, period=period);

plotLine(value=rsiValue, width=2, colors=["purple"], label=[customLabel], desc=["RSI Indicator"]);
Input select dropdown

Complete Example

//@version=2

// Define indicator with dynamic title
define(title="Multi-MA Strategy", position="onchart", axis=false, customTitle="($fastPeriod, $slowPeriod)");

// User inputs
var fastPeriod = input(name="fastPeriod", type="number", defaultValue=10, label="Fast MA Period");
var slowPeriod = input(name="slowPeriod", type="number", defaultValue=20, label="Slow MA Period");
var maType = input(name="maType", type="select", defaultValue="EMA", label="MA Type", options=["SMA", "EMA"]);
var showCrossovers = input(name="showCrossovers", type="boolean", defaultValue=true, label="Show Crossovers");

// Data source
timeseries ohlcvData = ohlcv(symbol=currentSymbol, exchange=currentExchange);

// Calculate MAs based on selected type
var fastMA = maType == "SMA" ? sma(source=ohlcvData.close, period=fastPeriod) : ema(source=ohlcvData.close, period=fastPeriod);
var slowMA = maType == "SMA" ? sma(source=ohlcvData.close, period=slowPeriod) : ema(source=ohlcvData.close, period=slowPeriod);

// Plot
plotLine(value=fastMA, width=2, colors=["green"], label=["Fast MA"], desc=["Fast Moving Average"]);
plotLine(value=slowMA, width=2, colors=["red"], label=["Slow MA"], desc=["Slow Moving Average"]);

Best Practices

Use Descriptive Names

Choose clear, descriptive names for inputs that indicate their purpose:
// Good
var rsiPeriod = input(name="rsiPeriod", type="number", defaultValue=14, label="RSI Period");

// Avoid
var p = input(name="p", type="number", defaultValue=14, label="P");
Place related inputs together for better user experience:
// MA Settings
var maPeriod = input(name="maPeriod", type="number", defaultValue=20, label="MA Period");
var maType = input(name="maType", type="select", defaultValue="EMA", label="MA Type", options=["SMA", "EMA"]);

// Signal Settings
var showSignals = input(name="showSignals", type="boolean", defaultValue=true, label="Show Signals");
var signalThreshold = input(name="signalThreshold", type="number", defaultValue=70, label="Signal Threshold");

Provide Sensible Defaults

Choose default values that work well for most use cases:
// Common default periods
var rsiPeriod = input(name="rsiPeriod", type="number", defaultValue=14, label="RSI Period");  // Standard RSI
var smaPeriod = input(name="smaPeriod", type="number", defaultValue=20, label="SMA Period");  // Common short-term
var emaPeriod = input(name="emaPeriod", type="number", defaultValue=50, label="EMA Period");  // Medium-term trend