more fixes

This commit is contained in:
Bojan Kucera 2025-06-04 18:37:26 -04:00
parent ab7ef2b678
commit 4c2220d148
5 changed files with 138 additions and 43 deletions

View file

@ -340,6 +340,38 @@ describe('Position Sizing Calculations', () => {
});
});
describe('sharpeOptimizedPositionSize', () => {
it('should calculate position size based on Sharpe optimization', () => {
const result = sharpeOptimizedPositionSize(100000, 0.15, 0.20, 0.02, 3);
// Kelly formula for continuous returns: f = (μ - r) / σ²
// Expected return: 0.15, Risk-free: 0.02, Volatility: 0.20
// f = (0.15 - 0.02) / (0.20)² = 0.13 / 0.04 = 3.25
// But capped at maxLeverage=3, so should be 3.0
// Final position: 100000 * 3 = 300000
expect(result).toBe(300000);
});
it('should return 0 for invalid inputs', () => {
// Invalid volatility
expect(sharpeOptimizedPositionSize(100000, 0.15, 0, 0.02)).toBe(0);
// Invalid account size
expect(sharpeOptimizedPositionSize(0, 0.15, 0.20, 0.02)).toBe(0);
// Expected return less than risk-free rate
expect(sharpeOptimizedPositionSize(100000, 0.01, 0.20, 0.02)).toBe(0);
});
it('should respect maximum leverage', () => {
const result = sharpeOptimizedPositionSize(100000, 0.30, 0.20, 0.02, 2);
// Kelly fraction would be (0.30 - 0.02) / (0.20)² = 7, but capped at 2
// Position: 100000 * 2 = 200000
expect(result).toBe(200000);
});
});
describe('validatePositionSize', () => {
it('should validate position size against limits', () => {
const result = validatePositionSize(500, 100, 100000, 10, 2);