Exit Conditions Schema
This document provides the complete schema reference for the exitConditions configuration object. Exit conditions define when and how the algorithm should close open positions.
Overview​
Exit conditions are Step 4 of algorithm configuration. They control:
- Stop loss rules (4 types)
- Take profit rules (5 types)
- Trailing stops
- Break-even stops
- Partial exits
- Time-based exits
- Exit on opposite signal
Schema Structure​
interface ExitConditions {
stopLoss: StopLoss
takeProfit?: TakeProfit
trailingStop?: TrailingStop
breakEvenStop?: BreakEvenStop
partialExits?: PartialExit[]
timeBasedExit?: TimeBasedExit
exitOnOppositeSignal?: ExitOnOppositeSignal
}
Exit Priority Order​
When multiple exit conditions trigger simultaneously, only the first one executes:
- Opposite Signal - Highest priority
- Partial Exits - Second priority
- Break-even Stop - Third priority
- Stop Loss - Fourth priority
- Trailing Stop - Fifth priority
- Take Profit - Sixth priority
- Time Exit - Lowest priority
Stop Loss Configuration​
Stop loss is required and protects against excessive losses.
interface StopLoss {
type: 'fixed' | 'percentage' | 'atr' | 'indicator'
// Type-specific parameters
price?: number // For 'fixed'
percentage?: number // For 'percentage'
atrPeriod?: number // For 'atr'
atrMultiplier?: number // For 'atr'
indicator?: Indicator // For 'indicator'
}
Stop Loss Types​
1. Fixed Stop Loss​
Fixed price level for stop loss.
{
type: 'fixed',
price: number
}
Example:
{
"stopLoss": {
"type": "fixed",
"price": 490
}
}
With entry at ₹500, stop loss at ₹490 (₹10 risk per share).
2. Percentage Stop Loss​
Stop loss as percentage from entry price.
{
type: 'percentage',
percentage: number // 0.1 to 50
}
Calculation:
Long: Stop Price = Entry × (1 - percentage/100)
Short: Stop Price = Entry × (1 + percentage/100)
Example:
{
"stopLoss": {
"type": "percentage",
"percentage": 2.0
}
}
With ₹500 entry:
- Long: Stop at ₹490 (₹500 × 0.98)
- Short: Stop at ₹510 (₹500 × 1.02)
Recommended Values:
- Scalping: 0.5-1%
- Day Trading: 1-2%
- Swing Trading: 2-5%
- Position Trading: 5-10%
3. ATR-Based Stop Loss​
Dynamic stop loss based on Average True Range.
{
type: 'atr',
atrPeriod: number, // 5 to 50
atrMultiplier: number // 0.5 to 5.0
}
Calculation:
ATR = Average True Range over period
Stop Distance = ATR × Multiplier
Long: Stop Price = Entry - Stop Distance
Short: Stop Price = Entry + Stop Distance
Example:
{
"stopLoss": {
"type": "atr",
"atrPeriod": 14,
"atrMultiplier": 2.0
}
}
With ₹500 entry and ATR = ₹5:
- Stop Distance = ₹5 × 2.0 = ₹10
- Long: Stop at ₹490
- Short: Stop at ₹510
Benefits: Adapts to market volatility automatically.
4. Indicator-Based Stop Loss​
Use indicator value as stop loss level.
{
type: 'indicator',
indicator: Indicator
}
Supported Indicators:
- Moving Averages (SMA, EMA, WMA)
- Parabolic SAR
- Keltner Channels (lower/upper band)
Example:
{
"stopLoss": {
"type": "indicator",
"indicator": {
"type": "EMA",
"period": 20
}
}
}
Stop loss follows EMA(20) - exits when price crosses below EMA.
Take Profit Configuration​
Take profit is optional but recommended for profit targets.
interface TakeProfit {
type: 'fixed' | 'percentage' | 'risk_reward' | 'trailing' | 'multiple_targets'
// Type-specific parameters
price?: number // For 'fixed'
percentage?: number // For 'percentage'
ratio?: number // For 'risk_reward'
trailingPercentage?: number // For 'trailing'
targets?: ProfitTarget[] // For 'multiple_targets'
}
Take Profit Types​
1. Fixed Take Profit​
Fixed price level for take profit.
{
type: 'fixed',
price: number
}
Example:
{
"takeProfit": {
"type": "fixed",
"price": 520
}
}
With entry at ₹500, take profit at ₹520 (₹20 profit per share).
2. Percentage Take Profit​
Take profit as percentage from entry price.
{
type: 'percentage',
percentage: number // 0.1 to 100
}
Calculation:
Long: TP Price = Entry × (1 + percentage/100)
Short: TP Price = Entry × (1 - percentage/100)
Example:
{
"takeProfit": {
"type": "percentage",
"percentage": 4.0
}
}
With ₹500 entry:
- Long: TP at ₹520 (₹500 × 1.04)
- Short: TP at ₹480 (₹500 × 0.96)
Recommended Values:
- Scalping: 0.5-2%
- Day Trading: 2-5%
- Swing Trading: 5-15%
- Position Trading: 15-50%
3. Risk-Reward Take Profit​
Calculate take profit based on risk-reward ratio.
{
type: 'risk_reward',
ratio: number // 1.0 to 10.0
}
Calculation:
Risk = Entry - Stop Loss
Reward = Risk × Ratio
Long: TP Price = Entry + Reward
Short: TP Price = Entry - Reward
Example:
{
"takeProfit": {
"type": "risk_reward",
"ratio": 2.0
}
}
With ₹500 entry, ₹490 stop (₹10 risk):
- Reward = ₹10 × 2.0 = ₹20
- Long: TP at ₹520
- Short: TP at ₹480
Recommended Ratios:
- Minimum: 1:1 (break-even after costs)
- Good: 2:1 or 3:1
- Aggressive: 5:1 or higher
4. Trailing Take Profit​
Take profit that moves with price.
{
type: 'trailing',
trailingPercentage: number // 0.1 to 10
}
Behavior:
- Profit target moves up as price increases (long)
- Profit target moves down as price decreases (short)
- Never moves against favorable direction
Example:
{
"takeProfit": {
"type": "trailing",
"trailingPercentage": 2.0
}
}
Long position with ₹500 entry:
- Price reaches ₹520: TP at ₹509.60 (₹520 × 0.98)
- Price reaches ₹530: TP at ₹519.40 (₹530 × 0.98)
- Price drops to ₹525: TP stays at ₹519.40 (doesn't move down)
5. Multiple Targets (Partial Exits)​
Multiple profit targets with partial position exits.
{
type: 'multiple_targets',
targets: ProfitTarget[]
}
interface ProfitTarget {
percentage: number // Profit percentage
exitPercentage: number // Position percentage to exit
moveStopTo?: 'entry' | 'breakeven' | number
}
Example:
{
"takeProfit": {
"type": "multiple_targets",
"targets": [
{
"percentage": 2.0,
"exitPercentage": 33,
"moveStopTo": "breakeven"
},
{
"percentage": 4.0,
"exitPercentage": 33
},
{
"percentage": 6.0,
"exitPercentage": 34
}
]
}
}
With 100 shares at ₹500 entry:
- At ₹510 (2% profit): Exit 33 shares, move stop to breakeven
- At ₹520 (4% profit): Exit 33 shares
- At ₹530 (6% profit): Exit remaining 34 shares
Trailing Stop Configuration​
Optional trailing stop that locks in profits.
interface TrailingStop {
enabled: boolean
type: 'percentage' | 'atr'
percentage?: number // For 'percentage'
atrPeriod?: number // For 'atr'
atrMultiplier?: number // For 'atr'
activationThreshold: number // Profit % to activate
}
enabled​
- Type:
boolean - Required: Yes
- Description: Whether trailing stop is enabled
- Example:
true
type​
- Type:
enum - Required: Yes (if enabled)
- Values:
percentage,atr - Example:
"percentage"
percentage​
- Type:
number - Required: Yes (if type is 'percentage')
- Range:
0.1to10 - Description: Trailing distance as percentage
- Example:
1.5
atrPeriod and atrMultiplier​
- Required: Yes (if type is 'atr')
- Description: ATR-based trailing distance
- Example:
atrPeriod: 14, atrMultiplier: 2.0
activationThreshold​
- Type:
number - Required: Yes (if enabled)
- Range:
0.1to20 - Description: Profit percentage required to activate trailing
- Example:
1.0(activate after 1% profit)
Example:
{
"trailingStop": {
"enabled": true,
"type": "percentage",
"percentage": 1.5,
"activationThreshold": 1.0
}
}
Long position at ₹500:
- Price reaches ₹505 (1% profit): Trailing activates
- Stop placed at ₹497.43 (₹505 × 0.985)
- Price reaches ₹510: Stop moves to ₹502.35 (₹510 × 0.985)
- Price drops to ₹508: Stop stays at ₹502.35
- Price drops to ₹502.35: Position exits
Break-Even Stop Configuration​
Optional break-even stop that moves stop to entry after profit threshold.
interface BreakEvenStop {
enabled: boolean
triggerProfit: number // Profit % to trigger
offset: number // Offset from entry (%)
}
enabled​
- Type:
boolean - Required: Yes
- Description: Whether break-even stop is enabled
- Example:
true
triggerProfit​
- Type:
number - Required: Yes (if enabled)
- Range:
0.1to10 - Default:
1.0 - Description: Profit percentage to trigger break-even
- Example:
1.5
offset​
- Type:
number - Required: Yes (if enabled)
- Range:
0to1 - Default:
0.1 - Description: Offset from entry for safety (%)
- Example:
0.1
Example:
{
"breakEvenStop": {
"enabled": true,
"triggerProfit": 1.0,
"offset": 0.1
}
}
Long position at ₹500 with ₹490 stop:
- Price reaches ₹505 (1% profit): Break-even triggers
- Stop moves to ₹500.50 (entry + 0.1% offset)
- Now risk-free trade (small profit locked in)
Partial Exits Configuration​
Optional array of partial exit rules (alternative to multiple_targets take profit).
interface PartialExit {
profitPercentage: number // Profit % to trigger
exitPercentage: number // Position % to exit
moveStopTo?: 'entry' | 'breakeven' | number
}
Example:
{
"partialExits": [
{
"profitPercentage": 2.0,
"exitPercentage": 50,
"moveStopTo": "breakeven"
},
{
"profitPercentage": 4.0,
"exitPercentage": 50
}
]
}
With 100 shares:
- At 2% profit: Exit 50 shares, move stop to breakeven
- At 4% profit: Exit remaining 50 shares
Time-Based Exit Configuration​
Optional time-based exit rules.
interface TimeBasedExit {
enabled: boolean
maxHoldMinutes?: number // Maximum hold time
partialExits?: TimePartialExit[]
}
interface TimePartialExit {
minutes: number
exitPercentage: number
}
enabled​
- Type:
boolean - Required: Yes
- Description: Whether time-based exit is enabled
- Example:
true
maxHoldMinutes​
- Type:
number - Required: No
- Range:
1to43200(30 days) - Description: Maximum minutes to hold position
- Example:
1440(24 hours)
partialExits​
- Type:
TimePartialExit[] - Required: No
- Description: Partial exits at specific times
Example:
{
"timeBasedExit": {
"enabled": true,
"maxHoldMinutes": 1440,
"partialExits": [
{
"minutes": 480,
"exitPercentage": 50
}
]
}
}
- After 8 hours: Exit 50% of position
- After 24 hours: Exit remaining 50%
Exit on Opposite Signal Configuration​
Optional exit when opposite entry signal triggers.
interface ExitOnOppositeSignal {
enabled: boolean
closeImmediately: boolean
}
enabled​
- Type:
boolean - Required: Yes
- Description: Whether to exit on opposite signal
- Example:
true
closeImmediately​
- Type:
boolean - Required: Yes (if enabled)
- Description: Whether to close immediately or wait for next candle
- Example:
true
Example:
{
"exitOnOppositeSignal": {
"enabled": true,
"closeImmediately": true
}
}
Long position with EMA crossover strategy:
- Entry: EMA(9) crosses above EMA(21)
- Exit: EMA(9) crosses below EMA(21) (opposite signal)
Complete Examples​
Conservative with Break-Even​
{
"stopLoss": {
"type": "percentage",
"percentage": 2.0
},
"takeProfit": {
"type": "risk_reward",
"ratio": 3.0
},
"breakEvenStop": {
"enabled": true,
"triggerProfit": 1.0,
"offset": 0.1
}
}
Aggressive with Trailing​
{
"stopLoss": {
"type": "atr",
"atrPeriod": 14,
"atrMultiplier": 1.5
},
"takeProfit": {
"type": "percentage",
"percentage": 10.0
},
"trailingStop": {
"enabled": true,
"type": "percentage",
"percentage": 2.0,
"activationThreshold": 2.0
}
}
Scalping with Partial Exits​
{
"stopLoss": {
"type": "percentage",
"percentage": 0.5
},
"takeProfit": {
"type": "multiple_targets",
"targets": [
{
"percentage": 0.5,
"exitPercentage": 50,
"moveStopTo": "breakeven"
},
{
"percentage": 1.0,
"exitPercentage": 50
}
]
},
"timeBasedExit": {
"enabled": true,
"maxHoldMinutes": 30
}
}
Swing Trading with Indicator Stop​
{
"stopLoss": {
"type": "indicator",
"indicator": {
"type": "EMA",
"period": 20
}
},
"takeProfit": {
"type": "risk_reward",
"ratio": 2.0
},
"trailingStop": {
"enabled": true,
"type": "atr",
"atrPeriod": 14,
"atrMultiplier": 2.0,
"activationThreshold": 3.0
},
"exitOnOppositeSignal": {
"enabled": true,
"closeImmediately": false
}
}
Validation Rules​
General Rules​
- Stop loss is required
- At least one exit method should be configured
- Percentages must be positive
- Ratios must be >= 1.0
Stop Loss Validation​
- Fixed: price must be specified
- Percentage: must be between 0.1 and 50
- ATR: period (5-50), multiplier (0.5-5.0)
- Indicator: must be supported indicator type
Take Profit Validation​
- Fixed: price must be specified
- Percentage: must be between 0.1 and 100
- Risk-Reward: ratio must be between 1.0 and 10.0
- Multiple Targets: sum of exitPercentage must equal 100
Trailing Stop Validation​
- Percentage: must be between 0.1 and 10
- ATR: period (5-50), multiplier (0.5-5.0)
- Activation threshold: must be between 0.1 and 20
Related Documentation​
- Algorithm Structure - Complete algorithm schema
- Entry Conditions Schema - Entry signal configuration
- Risk Parameters Schema - Risk management configuration
- How to Setup Exit Conditions - Step-by-step guide
- Trailing Stops Guide - Detailed trailing stop guide