Position Sizing Schema
This document provides the complete schema reference for the positionSizing configuration object. Position sizing determines how much capital to allocate to each trade.
Overview​
Position sizing is Step 2 of algorithm configuration. It controls:
- How position sizes are calculated
- Whether pyramiding (scaling in) is enabled
- Position size limits and constraints
Schema Structure​
interface PositionSizing {
method: PositionSizingMethod
// Method-specific parameters
percentage?: number // For 'percentage' method
fixedQuantity?: number // For 'fixed_quantity' method
fixedAmount?: number // For 'fixed_amount' method
riskPercentage?: number // For 'risk_based' method
atrPeriod?: number // For 'volatility_adjusted' method
atrMultiplier?: number // For 'volatility_adjusted' method
kellyFraction?: number // For 'kelly_criterion' method
// Pyramiding configuration
pyramiding: PyramidingConfig
}
Position Sizing Methods​
method​
- Type:
enum - Required: Yes
- Values:
percentage- Fixed percentage of account balancefixed_quantity- Fixed number of shares/contractsfixed_amount- Fixed rupee amount per traderisk_based- Based on risk percentage and stop loss distancevolatility_adjusted- Adjusted based on ATR volatilitykelly_criterion- Optimal bet sizing based on win rate and profit factor
Method-Specific Parameters​
Percentage-Based Sizing​
Uses a fixed percentage of account balance for each trade.
{
method: 'percentage',
percentage: number // 0.01 to 100
}
percentage​
- Type:
number - Required: Yes (when method is 'percentage')
- Range:
0.01to100 - Recommended:
1to5 - Description: Percentage of account balance to risk per trade
- Example:
2.5(2.5% of account)
Calculation:
Position Size = (Account Balance × Percentage) / Current Price
Example:
{
"method": "percentage",
"percentage": 2.5,
"pyramiding": {
"enabled": false
}
}
With ₹100,000 account and ₹500 stock price:
- Position Value = ₹100,000 × 2.5% = ₹2,500
- Quantity = ₹2,500 / ₹500 = 5 shares
Fixed Quantity Sizing​
Uses a fixed number of shares or contracts per trade.
{
method: 'fixed_quantity',
fixedQuantity: number // Minimum 1
}
fixedQuantity​
- Type:
number - Required: Yes (when method is 'fixed_quantity')
- Minimum:
1 - Description: Fixed number of shares/contracts to trade
- Example:
10(always trade 10 shares)
Use Cases:
- Testing strategies with consistent exposure
- Trading futures/options with specific lot sizes
- Maintaining equal position sizes across symbols
Example:
{
"method": "fixed_quantity",
"fixedQuantity": 10,
"pyramiding": {
"enabled": false
}
}
Always trades 10 shares regardless of price or account size.
Fixed Amount Sizing​
Uses a fixed rupee amount per trade.
{
method: 'fixed_amount',
fixedAmount: number // Minimum 100
}
fixedAmount​
- Type:
number - Required: Yes (when method is 'fixed_amount')
- Minimum:
100 - Description: Fixed rupee amount to invest per trade
- Example:
5000(always invest ₹5,000)
Calculation:
Quantity = Fixed Amount / Current Price
Example:
{
"method": "fixed_amount",
"fixedAmount": 5000,
"pyramiding": {
"enabled": false
}
}
With ₹500 stock price:
- Quantity = ₹5,000 / ₹500 = 10 shares
With ₹250 stock price:
- Quantity = ₹5,000 / ₹250 = 20 shares
Risk-Based Sizing​
Calculates position size based on risk percentage and stop loss distance.
{
method: 'risk_based',
riskPercentage: number // 0.1 to 10
}
riskPercentage​
- Type:
number - Required: Yes (when method is 'risk_based')
- Range:
0.1to10 - Recommended:
0.5to2 - Description: Percentage of account to risk per trade
- Example:
1.5(risk 1.5% of account)
Calculation:
Risk Amount = Account Balance × Risk Percentage
Stop Distance = Entry Price - Stop Loss Price
Position Size = Risk Amount / Stop Distance
Example:
{
"method": "risk_based",
"riskPercentage": 1.5,
"pyramiding": {
"enabled": false
}
}
With ₹100,000 account, ₹500 entry, ₹490 stop loss:
- Risk Amount = ₹100,000 × 1.5% = ₹1,500
- Stop Distance = ₹500 - ₹490 = ₹10
- Quantity = ₹1,500 / ₹10 = 150 shares
Volatility-Adjusted Sizing​
Adjusts position size based on ATR (Average True Range) volatility.
{
method: 'volatility_adjusted',
atrPeriod: number, // 5 to 50
atrMultiplier: number // 0.5 to 5.0
}
atrPeriod​
- Type:
number - Required: Yes (when method is 'volatility_adjusted')
- Range:
5to50 - Default:
14 - Description: Period for ATR calculation
- Example:
20
atrMultiplier​
- Type:
number - Required: Yes (when method is 'volatility_adjusted')
- Range:
0.5to5.0 - Default:
2.0 - Description: Multiplier for ATR-based position sizing
- Example:
2.5
Calculation:
ATR = Average True Range over period
Risk Amount = Account Balance × Base Risk %
Adjusted Risk = Risk Amount / (ATR × Multiplier)
Position Size = Adjusted Risk / Current Price
Example:
{
"method": "volatility_adjusted",
"atrPeriod": 14,
"atrMultiplier": 2.0,
"pyramiding": {
"enabled": false
}
}
Higher volatility (larger ATR) = Smaller position size Lower volatility (smaller ATR) = Larger position size
Kelly Criterion Sizing​
Optimal bet sizing based on historical win rate and profit factor.
{
method: 'kelly_criterion',
kellyFraction: number // 0.1 to 1.0
}
kellyFraction​
- Type:
number - Required: Yes (when method is 'kelly_criterion')
- Range:
0.1to1.0 - Default:
0.25(Quarter Kelly) - Description: Fraction of Kelly percentage to use
- Example:
0.5(Half Kelly)
Formula:
Kelly % = (Win Rate × Avg Win - Loss Rate × Avg Loss) / Avg Win
Position Size = Account Balance × Kelly % × Kelly Fraction
Requirements:
- Minimum 30 historical trades
- Win rate between 30% and 70%
- Profit factor > 1.0
Example:
{
"method": "kelly_criterion",
"kellyFraction": 0.25,
"pyramiding": {
"enabled": false
}
}
With 60% win rate, 1.5 profit factor:
- Full Kelly might suggest 20% position size
- Quarter Kelly (0.25) = 5% position size (more conservative)
Pyramiding Configuration​
Pyramiding allows adding to winning positions (scaling in).
interface PyramidingConfig {
enabled: boolean
maxLevels?: number // 1 to 10
sizingMethod?: 'equal' | 'decreasing' | 'increasing'
profitThreshold?: number // Percentage profit to add
}
enabled​
- Type:
boolean - Required: Yes
- Description: Whether pyramiding is enabled
- Default:
false - Example:
true
maxLevels​
- Type:
number - Required: Yes (when enabled is true)
- Range:
1to10 - Description: Maximum number of pyramid levels (including initial entry)
- Example:
3(initial + 2 add-ons)
sizingMethod​
- Type:
enum - Required: Yes (when enabled is true)
- Values:
equal- Each level has same size as initialdecreasing- Each level is 50% of previousincreasing- Each level is 1.5x previous
- Example:
"decreasing"
profitThreshold​
- Type:
number - Required: Yes (when enabled is true)
- Range:
0.1to10 - Description: Percentage profit required before adding to position
- Example:
1.5(add when 1.5% in profit)
Pyramiding Examples​
Equal Sizing​
{
"method": "percentage",
"percentage": 2.0,
"pyramiding": {
"enabled": true,
"maxLevels": 3,
"sizingMethod": "equal",
"profitThreshold": 1.0
}
}
With ₹100,000 account:
- Level 1: ₹2,000 (2%)
- Level 2: ₹2,000 (2%) - after 1% profit
- Level 3: ₹2,000 (2%) - after another 1% profit
- Total: ₹6,000 (6%)
Decreasing Sizing​
{
"method": "percentage",
"percentage": 4.0,
"pyramiding": {
"enabled": true,
"maxLevels": 3,
"sizingMethod": "decreasing",
"profitThreshold": 1.5
}
}
With ₹100,000 account:
- Level 1: ₹4,000 (4%)
- Level 2: ₹2,000 (2%) - 50% of level 1
- Level 3: ₹1,000 (1%) - 50% of level 2
- Total: ₹7,000 (7%)
Increasing Sizing​
{
"method": "percentage",
"percentage": 2.0,
"pyramiding": {
"enabled": true,
"maxLevels": 3,
"sizingMethod": "increasing",
"profitThreshold": 2.0
}
}
With ₹100,000 account:
- Level 1: ₹2,000 (2%)
- Level 2: ₹3,000 (3%) - 1.5x level 1
- Level 3: ₹4,500 (4.5%) - 1.5x level 2
- Total: ₹9,500 (9.5%)
Warning: Increasing sizing is aggressive and increases risk significantly.
Complete Examples​
Conservative Risk-Based​
{
"method": "risk_based",
"riskPercentage": 1.0,
"pyramiding": {
"enabled": false
}
}
Moderate with Pyramiding​
{
"method": "percentage",
"percentage": 3.0,
"pyramiding": {
"enabled": true,
"maxLevels": 2,
"sizingMethod": "equal",
"profitThreshold": 1.5
}
}
Aggressive Volatility-Adjusted​
{
"method": "volatility_adjusted",
"atrPeriod": 14,
"atrMultiplier": 1.5,
"pyramiding": {
"enabled": true,
"maxLevels": 3,
"sizingMethod": "decreasing",
"profitThreshold": 2.0
}
}
Kelly Criterion with Conservative Fraction​
{
"method": "kelly_criterion",
"kellyFraction": 0.25,
"pyramiding": {
"enabled": false
}
}
Validation Rules​
General Rules​
- Exactly one method-specific parameter must be provided
- If pyramiding is enabled, all pyramiding fields are required
- Position size must not exceed
riskParameters.maxPositionSize
Method-Specific Validation​
- percentage: Must be between 0.01 and 100
- fixedQuantity: Must be at least 1
- fixedAmount: Must be at least 100
- riskPercentage: Must be between 0.1 and 10
- atrPeriod: Must be between 5 and 50
- atrMultiplier: Must be between 0.5 and 5.0
- kellyFraction: Must be between 0.1 and 1.0
Pyramiding Validation​
- maxLevels must be between 1 and 10
- profitThreshold must be between 0.1 and 10
- sizingMethod must be one of: equal, decreasing, increasing
Related Documentation​
- Algorithm Structure - Complete algorithm schema
- Risk Parameters Schema - Risk limits and constraints
- Position Sizing Methods - Detailed explanation of each method
- How to Setup Position Sizing - Step-by-step guide