@omnifolio/trading-calc
v1.0.0
Published
Trading position calculators for Forex, Crypto, Options & Futures — pip values, margin, liquidation prices, Black-Scholes, Kelly criterion, and risk management.
Maintainers
Readme
@omnifolio/trading-calc
Zero-dependency trading position calculators for Forex, Crypto, Options & Futures.
Built by the OmniFolio team. Battle-tested in production.
Install
npm install @omnifolio/trading-calcQuick Start
import {
calculateForexPosition,
calculateCryptoPosition,
blackScholesCall,
kellyCalculator,
} from '@omnifolio/trading-calc';
// Forex: How many lots can I trade with 1% risk?
const forex = calculateForexPosition({
accountBalance: 10_000,
riskPercentage: 1,
stopLossPips: 50,
pair: 'EURUSD',
leverage: 100,
});
console.log(forex.lotSize); // 0.2
console.log(forex.potentialLoss); // ~$100
// Crypto: Leveraged BTC position with liquidation price
const crypto = calculateCryptoPosition({
accountBalance: 5_000,
riskPercentage: 2,
entryPrice: 65_000,
stopLossPrice: 63_000,
leverage: 10,
marginType: 'isolated',
});
console.log(crypto.liquidationPrice); // ~$58,760
console.log(crypto.quantity); // BTC quantity to buy
// Options: Black-Scholes call pricing
const callPrice = blackScholesCall(100, 100, 1, 0.05, 0.20);
console.log(callPrice); // ~$10.45
// Risk: Kelly criterion position sizing
const kellyPct = kellyCalculator(0.55, 200, 100);
console.log(kellyPct); // recommended % of capital to riskAPI
Forex
| Function | Description |
|---|---|
| calculatePipValue(pair, lotSize, currency?, rate?) | Pip value in account currency |
| calculateForexPosition(params) | Full position sizing with risk/reward |
| calculateForexMargin(lotSize, leverage, rate?) | Margin requirement |
| convertLotSize(lots, from, to) | Convert between standard/mini/micro |
Crypto
| Function | Description |
|---|---|
| calculateCryptoPosition(params) | Position sizing with liquidation price (isolated & cross margin) |
| calculateFundingRate(notional, rate, hours) | Perpetual futures funding cost |
Options
| Function | Description |
|---|---|
| calculateOptionsPosition(params) | Cost, breakeven, max profit/loss |
| blackScholesCall(S, K, T, r, σ) | European call option pricing |
Futures
| Function | Description |
|---|---|
| calculateFuturesPosition(params) | Contract sizing with margin and risk/reward |
Risk Management
| Function | Description |
|---|---|
| calculateRiskMetrics(params) | Comprehensive risk analysis for any position |
| kellyCalculator(winRate, avgWin, avgLoss) | Kelly criterion optimal bet size (capped at 25%) |
| fixedRatioPositionSize(balance, delta, profits, contracts) | Ryan Jones fixed-ratio method |
| volatilityBasedPositionSize(balance, risk%, atr, price) | ATR-based position sizing |
| calculateSharpeRatio(returns, riskFreeRate?) | Risk-adjusted return metric |
Utilities
| Function | Description |
|---|---|
| calculatePnL(params) | Profit/loss for long or short with optional leverage |
| calculateROI(initial, current) | Return on investment percentage |
| formatCurrency(amount, currency?, decimals?) | Currency string formatting |
Types
All interfaces and types are fully exported:
import type {
AccountCurrency, // 'USD' | 'EUR' | 'GBP' | 'JPY' | 'AUD' | 'CAD' | 'CHF'
MarginType, // 'isolated' | 'cross'
PositionSide, // 'long' | 'short'
ForexCalculation,
CryptoCalculation,
OptionsCalculation,
FuturesCalculation,
RiskManagement,
} from '@omnifolio/trading-calc';